lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
20 lines • 1.41 kB
JavaScript
import { jsx as _jsx, Fragment as _Fragment } from "preact/jsx-runtime";
import BaseTreeItem from "../component/treeItems/BaseTreeItem";
import useSyncState from "../hooks/useSyncState";
import { getFileBrowserDir, setFileBrowserDir } from "../../states/useFileBrowserDir";
import FolderIcon from "./icons/FolderIcon";
import { useMemo } from "preact/hooks";
import { pathObjMap } from "../../collections/pathCollections";
import { firstFolderNamePtr } from "../../pointers/firstFolderNamePtr";
import { useSignal } from "@preact/signals";
const FileTreeItem = ({ fileStructure, folderName, myPath }) => {
const fileEntries = useMemo(() => Object.entries(fileStructure), [fileStructure]);
const fileBrowserDir = useSyncState(getFileBrowserDir);
const expandedSignal = useSignal(true);
const children = () => fileEntries.map(([name, fileOrFolder]) => fileOrFolder instanceof File ? null : (_jsx(FileTreeItem, { fileStructure: fileOrFolder, folderName: name, myPath: firstFolderNamePtr[0] + pathObjMap.get(fileOrFolder) }, name)));
if (!myPath)
return _jsx(_Fragment, { children: children() });
return (_jsx(BaseTreeItem, { label: folderName, expandedSignal: expandedSignal, selected: myPath === fileBrowserDir, onClick: () => setFileBrowserDir(myPath), IconComponent: FolderIcon, children: children }));
};
export default FileTreeItem;
//# sourceMappingURL=FileTreeItem.js.map