import { useState, useEffect } from 'preact/hooks'; import { MindforgeApiService, type FileTreeNode } from '../services/MindforgeApiService'; import './FileTreeComponent.css'; interface FileTreeComponentProps { selectedPaths: string[]; onSelectionChange: (paths: string[]) => void; } interface FolderNodeProps { node: FileTreeNode; selectedPaths: string[]; onToggle: (path: string) => void; } function FolderNode({ node, selectedPaths, onToggle }: FolderNodeProps) { const [expanded, setExpanded] = useState(true); if (node.type === 'file') { return (
); } return (
setExpanded(e => !e)}> {expanded ? '▾' : '▸'} {node.name}
{expanded && node.children && (
{node.children.map(child => ( ))}
)}
); } export function FileTreeComponent({ selectedPaths, onSelectionChange }: FileTreeComponentProps) { const [tree, setTree] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { MindforgeApiService.getRepositoryTree() .then(setTree) .catch(err => setError(err.message)) .finally(() => setLoading(false)); }, []); const togglePath = (path: string) => { if (selectedPaths.includes(path)) { onSelectionChange(selectedPaths.filter(p => p !== path)); } else { onSelectionChange([...selectedPaths, path]); } }; if (loading) return
Carregando repositório...
; if (error) return
Erro ao carregar repositório: {error}
; if (tree.length === 0) return
Nenhum arquivo encontrado no repositório.
; return (
{tree.map(node => ( ))}
); }