/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import React, { Component } from "react"; import axios from "axios"; import { parseString } from "xml2js"; import styled from "styled-components"; const TeamListStyle = styled.div` width: 100%; overflow: auto; > table { font-family: "Inconsolata", monospace; font-size: 14px; display: inline-table; table-layout: auto; color: #13161f; width: 98%; padding: 0; box-shadow: 0 0 0 1px #529d8b; background-color: transparent; border-spacing: 0; border-collapse: collapse; border-style: hidden; border-radius: 2px; overflow-y: hidden; overflow-x: initial; margin: 5px 10px; } > table tr { display: table-row; vertical-align: inherit; border-color: inherit; } > table tr > td { padding: 10px; line-height: 2; font-weight: 200; white-space: pre; } > table > thead { color: #7d899c; background: #f5f6f7; } > table > tbody tr { display: table-row; border-top: 1px solid #529d8b; } > table > thead > tr > th { font-weight: 400; padding: 10px; text-align: left; } `; export default class TeamList extends Component { constructor(props) { super(props); this.state = { isLoading: true, displayData: [] }; this.fetchData(); } fetchData() { axios .get(`https://raw.githubusercontent.com/apache/atlas/master/pom.xml`) .then(res => { // Transform the raw data by extracting the nested posts parseString(res.data, (err, result) => { const developersList = result.project.developers[0].developer; const developersListLength = developersList.length; let t_displayData = []; const keys = Object.keys(developersList[0]); for (var i = 0; i < developersListLength; i++) { const obj = {}; keys.map(k => (obj[k] = developersList[i][k])); t_displayData.push(obj); } this.setState({ displayData: t_displayData, isLoading: false }); }); }) .catch(err => { console.log("fetching data from pom.xml is failed."); }); } render() { const { displayData, isLoading } = this.state; return ( <TeamListStyle> <table> <thead> <tr> <th>Id</th> <th>Name</th> <th>Email</th> <th>Organization</th> <th>Roles</th> <th>Time Zone</th> </tr> </thead> <tbody> {isLoading ? ( <tr> <td colSpan="6">loading...</td> </tr> ) : displayData.length === 0 ? ( "Not found" ) : ( displayData.map((data, i) => { return ( <tr key={data.id.toString()}> <td>{data.id.toString()}</td> <td>{data.name.toString()}</td> <td>{data.email.toString()}</td> <td>{data.organization.toString()}</td> <td>{data.roles.map(r => r.role.toString())}</td> <td>{data.timezone.toString()}</td> </tr> ); }) )} </tbody> </table> </TeamListStyle> ); } }