72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
import * as React from 'react';
|
|
import { TreeView, TreeItem } from '@mui/x-tree-view';
|
|
import { useRouter } from 'next/router'
|
|
import { styled } from '@mui/material/styles';
|
|
|
|
const TCTreeItem = styled(TreeItem)(({ theme }) => ({
|
|
'& .MuiTreeItem-content': {
|
|
borderRadius: '10px',
|
|
'& .MuiTreeItem-label': {
|
|
fontSize: '1rem',
|
|
paddingLeft: '6px',
|
|
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,',
|
|
lineHeight: 2.0,
|
|
},
|
|
},
|
|
}))
|
|
|
|
|
|
export default function FolderTree(props) {
|
|
const renderTree = (nodes) => (
|
|
<TCTreeItem key={nodes.id} nodeId={nodes.id} label={nodes.name}>
|
|
{Array.isArray(nodes.children)
|
|
? nodes.children.map((node) => renderTree(node))
|
|
: null}
|
|
</TCTreeItem>
|
|
);
|
|
|
|
const router = useRouter()
|
|
// const childrenNodeIds = props.tree.children.map(aNode => {return aNode.id})
|
|
const expandedNodes = [props.tree.id]
|
|
return (
|
|
<>
|
|
<a href="http://localhost:3000" class="mb-5 flex-none rounded-md bg-indigo-500 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-400 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500">{"<-"} Back To Portfolio</a>
|
|
|
|
<TreeView
|
|
aria-label="rich object"
|
|
defaultCollapseIcon={<ChevronDownIcon />}
|
|
defaultExpanded={expandedNodes}
|
|
defaultExpandIcon={<ChevronRightIcon />}
|
|
onNodeSelect={(event, nodIds) => {
|
|
const currentNode = props.flattenNodes.find(aNode => {
|
|
return aNode.id === nodIds
|
|
})
|
|
if (currentNode != null && currentNode.routePath != null) {
|
|
router.push(currentNode.routePath)
|
|
}
|
|
}}
|
|
sx={{ flexGrow: 1, overflowY: 'auto' }}
|
|
>
|
|
{renderTree(props.tree)}
|
|
</TreeView>
|
|
</>
|
|
);
|
|
}
|
|
|
|
function ChevronRightIcon() {
|
|
return (
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" strokeWidth={1.5} stroke="currentColor" className="w-6 h-6">
|
|
<path strokeLinecap="round" strokeLinejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" />
|
|
</svg>
|
|
)
|
|
}
|
|
|
|
function ChevronDownIcon() {
|
|
return (
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" strokeWidth={1.5} stroke="currentColor" className="w-6 h-6">
|
|
<path strokeLinecap="round" strokeLinejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" />
|
|
</svg>
|
|
)
|
|
}
|
|
|