UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

20 lines 1.41 kB
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