(node: FileTreeNode)
| 117 | |
| 118 | // Toggle folder expansion |
| 119 | const toggleFolder = async (node: FileTreeNode) => { |
| 120 | const newExpanded = new Set(expandedFolders); |
| 121 | |
| 122 | if (expandedFolders.has(node.path)) { |
| 123 | newExpanded.delete(node.path); |
| 124 | } else { |
| 125 | newExpanded.add(node.path); |
| 126 | |
| 127 | // Load children if not already loaded |
| 128 | if (!node.children) { |
| 129 | const children = await loadSubdirectory(node.path); |
| 130 | // Update the tree with children |
| 131 | const updateTree = (nodes: FileTreeNode[]): FileTreeNode[] => { |
| 132 | return nodes.map((n) => { |
| 133 | if (n.path === node.path) { |
| 134 | return { ...n, children }; |
| 135 | } |
| 136 | if (n.children) { |
| 137 | return { ...n, children: updateTree(n.children) }; |
| 138 | } |
| 139 | return n; |
| 140 | }); |
| 141 | }; |
| 142 | setFileTree(updateTree(fileTree)); |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | setExpandedFolders(newExpanded); |
| 147 | }; |
| 148 | |
| 149 | // Render file tree node |
| 150 | const renderNode = (node: FileTreeNode, depth: number = 0) => { |
no test coverage detected