mylingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
19 lines • 1.33 kB
JavaScript
import { jsx as _jsx } from "preact/jsx-runtime";
import { useEffect, useMemo, useState } from "preact/hooks";
import { makeTreeItemCallbacks } from "./TreeItem";
import { useSceneGraphExpanded, useSceneGraphTarget } from "../states";
import ComponentIcon from "./icons/ComponentIcon";
import BaseTreeItem from "../component/BaseTreeItem";
const Object3DTreeItem = ({ appendable, object3d }) => {
const [expanded, setExpanded] = useState(false);
const [sceneGraphTarget] = useSceneGraphTarget();
const handleClick = useMemo(() => makeTreeItemCallbacks(object3d, appendable), []);
const [sceneGraphExpanded, setSceneGraphExpanded] = useSceneGraphExpanded();
useEffect(() => {
sceneGraphExpanded?.has(object3d) && setExpanded(true);
}, [sceneGraphExpanded]);
const selected = sceneGraphTarget === object3d;
return (_jsx(BaseTreeItem, { label: object3d.name, selected: selected, onCollapse: () => setSceneGraphExpanded(undefined), onClick: handleClick, expanded: expanded, expandable: !!object3d.children.length, outlined: true, IconComponent: ComponentIcon, children: () => object3d.children.map((child) => (_jsx(Object3DTreeItem, { object3d: child, appendable: appendable }, child.uuid))) }));
};
export default Object3DTreeItem;
//# sourceMappingURL=Object3DTreeItem.js.map