import React from 'react'; import { makeStyles } from '@material-ui/core/styles'; import TreeView from '@material-ui/lab/TreeView'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import ChevronRightIcon from '@material-ui/icons/ChevronRight'; import TreeItem from '@material-ui/lab/TreeItem'; interface RenderTree { id: string; name: string; children?: RenderTree[]; } const data: RenderTree = { id: 'root', name: 'Parent', children: [ { id: '1', name: 'Child - 1', }, { id: '3', name: 'Child - 3', children: [ { id: '4', name: 'Child - 4', }, ], }, ], }; const useStyles = makeStyles({ root: { height: 110, flexGrow: 1, maxWidth: 400, }, }); export default function RecursiveTreeView() { const classes = useStyles(); const renderTree = (nodes: RenderTree) => ( {Array.isArray(nodes.children) ? nodes.children.map((node) => renderTree(node)) : null} ); return ( } defaultExpanded={['root']} defaultExpandIcon={} > {renderTree(data)} ); }