import React from 'react'; import PropTypes from 'prop-types'; import { withStyles } from '@material-ui/core/styles'; import ExpandLess from '@material-ui/icons/KeyboardArrowRight'; import ExpandMore from '@material-ui/icons/ExpandMore'; import Add from '@material-ui/icons/AddCircle'; import Remove from '@material-ui/icons/RemoveCircleOutline'; import { Table, TableBody, TableCell, TableHead, TableRow } from '@material-ui/core'; const styles = theme => ({ root: { width: '100%', marginTop: theme.spacing(3), overflowX: 'auto', }, table: { minWidth: 700, }, hideRow: { display: 'none' }, anchor: { cursor: 'pointer' }, icon: { top: 5, position: 'relative', left: -5 } }); let RenderRow = props => { const { classes, toggleTree, treeOpen, item, parent, arrowMore, icon, branch } = props; const keyID = item.id; const dataBody = Object.keys(item); const dataBodyVal = Object.values(item); const renderIconMore = (iconName) => { if (iconName === 'arrow') { return ; } return ; }; const renderIconLess = (iconName) => { if (iconName === 'arrow') { return ; } return ; }; const renderCell = (dataArray, parentCell) => dataArray.map((itemCell, index) => { if (index < 1) { if (parentCell) { return ( {arrowMore.indexOf(keyID) > -1 ? renderIconMore(icon) : renderIconLess(icon)} {keyID} ); } return ( {keyID} ); } if (itemCell !== 'child') { return ( {dataBodyVal[index]} ); } return false; }); const row = parent ? ( -1 ? classes.hideRow : classes.anchor} onClick={() => toggleTree(keyID, item.child, branch)} > {renderCell(dataBody, true)} ) : ( -1 ? classes.hideRow : ''} > {renderCell(dataBody, false)} ); return [row]; }; RenderRow.propTypes = { classes: PropTypes.object.isRequired, item: PropTypes.object.isRequired, parent: PropTypes.bool.isRequired, toggleTree: PropTypes.func.isRequired, treeOpen: PropTypes.object.isRequired, arrowMore: PropTypes.object.isRequired, branch: PropTypes.string.isRequired, icon: PropTypes.string.isRequired }; RenderRow = withStyles(styles)(RenderRow); class TreeTable extends React.Component { render() { const { classes, dataTable, icon, treeOpen, arrowMore, toggleTree, branch } = this.props; const parentRow = true; const getData = dataArray => dataArray.map((item, index) => { if (item.child) { return [ , getData(item.child) ]; } return ( ); }); const getHead = dataArray => dataArray.map((item, index) => {item.label} ); return ( { getHead(dataTable.head) } { getData(dataTable.body) }
); } } TreeTable.propTypes = { classes: PropTypes.object.isRequired, dataTable: PropTypes.object.isRequired, treeOpen: PropTypes.object.isRequired, toggleTree: PropTypes.func.isRequired, arrowMore: PropTypes.object.isRequired, branch: PropTypes.string.isRequired, icon: PropTypes.string.isRequired }; export default withStyles(styles)(TreeTable);