import { useState, useEffect, useCallback } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Folder, FolderOpen, AlertCircle } from 'lucide-react'; import { Spinner } from '@/components/ui/spinner'; import { getHttpApiClient } from '@/lib/http-api-client'; interface WorkspaceDirectory { name: string; path: string; } interface WorkspacePickerModalProps { open: boolean; onOpenChange: (open: boolean) => void; onSelect: (path: string, name: string) => void; } export function WorkspacePickerModal({ open, onOpenChange, onSelect }: WorkspacePickerModalProps) { const [isLoading, setIsLoading] = useState(false); const [directories, setDirectories] = useState([]); const [error, setError] = useState(null); const loadDirectories = useCallback(async () => { setIsLoading(true); setError(null); try { const client = getHttpApiClient(); const result = await client.workspace.getDirectories(); if (result.success && result.directories) { setDirectories(result.directories); } else { setError(result.error || 'Failed to load directories'); } } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load directories'); } finally { setIsLoading(false); } }, []); // Load directories when modal opens useEffect(() => { if (open) { loadDirectories(); } }, [open, loadDirectories]); const handleSelect = (dir: WorkspaceDirectory) => { onSelect(dir.path, dir.name); }; return ( Select Project Choose a project from your workspace directory
{isLoading && (

Loading projects...

)} {error && !isLoading && (

{error}

)} {!isLoading && !error && directories.length === 0 && (

No projects found in workspace directory

)} {!isLoading && !error && directories.length > 0 && (
{directories.map((dir) => ( ))}
)}
); }