import React from 'react'; import * as Icons from './icons'; import { FileContainer, IconContainer, FileName } from './elements'; import { sortingFunction, isRootLevel, getDepth, isChildSelected, } from './utils'; function FileTree({ sandbox, currentModuleId, setCurrentModuleId }) { const { modules, directories } = sandbox; const allFiles = [...directories, ...modules].map(file => ({ id: file.shortid, longid: file.id, title: file.title, directory: file.directoryShortid, // this line is so silly because we already know directories type: file.code ? 'file' : 'directory', })); const selectedFile = allFiles.find(file => file.longid === currentModuleId); const onSelect = file => setCurrentModuleId(file.longid); return ( ); } export default FileTree; function SubTree({ files, allFiles, selectedFile, onSelect }) { return (
{files .filter(child => isRootLevel(files, child)) .sort(sortingFunction) .map(child => ( {child.type === 'directory' ? ( ) : ( onSelect(child)} {...child} /> )} ))}
); } function Directory(props) { const children = props.allFiles.filter(file => file.directory === props.id); const defaultOpen = isChildSelected({ allFiles: props.allFiles, directory: props, selectedFile: props.selectedFile, }); const [open, setOpen] = React.useState(defaultOpen); const toggle = () => setOpen(!open); return ( <> {open ? ( ) : null} ); } function FileIcon(props) { return ( {props.type === 'directory' ? ( ) : ( )} ); } function File(props) { const selected = props.selectedFile.id === props.id; const depth = getDepth(props.allFiles, props); return ( {props.title} ); }