import { useState, useMemo } from 'react' import { useTreeEditorStore } from '@/store/treeEditorStore' import { TreePreviewNode } from './TreePreviewNode' import type { TreeStructure } from '@/types' /** Map of targetNodeId -> array of {sourceNodeId, sourceNodeLabel} that link to it */ export type SharedLinksMap = Map> /** * Build a map of which nodes link to which targets * This helps identify shared nodes (multiple sources linking to same target) */ function buildSharedLinksMap( node: TreeStructure, map: SharedLinksMap = new Map() ): SharedLinksMap { const nodeLabel = node.type === 'decision' ? node.question : node.title // Check decision options if (node.type === 'decision' && node.options) { for (const opt of node.options) { if (opt.next_node_id) { const existing = map.get(opt.next_node_id) || [] existing.push({ id: node.id, label: nodeLabel || 'Untitled' }) map.set(opt.next_node_id, existing) } } } // Check action next_node_id if (node.type === 'action' && node.next_node_id) { const existing = map.get(node.next_node_id) || [] existing.push({ id: node.id, label: nodeLabel || 'Untitled' }) map.set(node.next_node_id, existing) } // Recurse into children if (node.children) { for (const child of node.children) { buildSharedLinksMap(child, map) } } return map } export function TreePreviewPanel() { const { treeStructure, name, selectedNodeId, selectNode, findNode } = useTreeEditorStore() const [hoveredNodeId, setHoveredNodeId] = useState(null) // Build map of shared links (which nodes link to which targets) const sharedLinksMap = useMemo(() => { if (!treeStructure) return new Map() return buildSharedLinksMap(treeStructure) }, [treeStructure]) if (!treeStructure) { return (
No tree structure to preview
) } return (
{/* Header */}

Preview: {name || 'Untitled Tree'}

Click a node to select • Hover options to highlight targets

{/* Tree Visualization */}
{/* Legend */}
Decision
Action
Solution
) } export default TreePreviewPanel