import { BuildingNode, LevelNode, useScene } from "@pascal-app/core"; import { useViewer } from "@pascal-app/viewer"; import { Building2, Plus } from "lucide-react"; import { useState } from "react"; import { TreeNode, TreeNodeWrapper } from "./tree-node"; import { TreeNodeActions } from "./tree-node-actions"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/primitives/tooltip"; interface BuildingTreeNodeProps { node: BuildingNode; depth: number; } export function BuildingTreeNode({ node, depth }: BuildingTreeNodeProps) { const [expanded, setExpanded] = useState(true); const createNode = useScene((state) => state.createNode); const isSelected = useViewer((state) => state.selection.buildingId === node.id); const isHovered = useViewer((state) => state.hoveredId === node.id); const setSelection = useViewer((state) => state.setSelection); const handleClick = () => { setSelection({ buildingId: node.id }); }; const handleAddLevel = (e: React.MouseEvent) => { e.stopPropagation(); const newLevel = LevelNode.parse({ level: node.children.length, children: [], parentId: node.id, }); createNode(newLevel, node.id); }; return ( } label={node.name || "Building"} depth={depth} hasChildren={node.children.length > 0} expanded={expanded} onToggle={() => setExpanded(!expanded)} onClick={handleClick} isSelected={isSelected} isHovered={isHovered} actions={
Add new level
} > {node.children.map((childId) => ( ))}
); }