fix: FileTree expand/collapse not rendering children

- Change buildTree from .map() to for-loop to properly render children
- Append expanded directory children to nodes array immediately
- Fix TypeScript error by using ReactElement instead of JSX.Element
- Children now render correctly when directories are expanded
This commit is contained in:
Rob Colbert 2026-05-12 16:03:18 -04:00
parent 0a510de487
commit 3062420e99

View File

@ -136,16 +136,16 @@ export default function FileTree({ workspaceMode, onFileSelect }: FileTreeProps)
// Build tree structure from flat entries
const buildTree = useCallback((entries: FileTreeEntry[], depth: number = 0) => {
return entries.map(entry => {
const nodes: JSX.Element[] = [];
for (const entry of entries) {
const isExpanded = state.expandedPaths.has(entry.path);
const isLoading = state.loadingPaths.has(entry.path);
const error = state.errors.get(entry.path);
const hasChildren = entry.type === 'directory';
const children = hasChildren && isExpanded && state.directoryCache.has(entry.path)
? buildTree(state.directoryCache.get(entry.path)!, depth + 1)
: null;
return (
// Render the node
nodes.push(
<FileTreeNode
key={entry.path}
entry={entry}
@ -158,7 +158,15 @@ export default function FileTree({ workspaceMode, onFileSelect }: FileTreeProps)
onSelect={handleFileSelect}
/>
);
});
// If directory is expanded, render children immediately after
if (hasChildren && isExpanded && state.directoryCache.has(entry.path)) {
const children = buildTree(state.directoryCache.get(entry.path)!, depth + 1);
nodes.push(...children);
}
}
return nodes;
}, [state.expandedPaths, state.loadingPaths, state.errors, state.directoryCache, toggleExpand, handleFileSelect]);
const rootEntries = state.directoryCache.get('') || [];