import { useState } from 'react' import { ChevronDown, Plus, FolderOpen, Loader2, Trash2 } from 'lucide-react' import type { ProjectSummary } from '../lib/types' import { NewProjectModal } from './NewProjectModal' import { ConfirmDialog } from './ConfirmDialog' import { useDeleteProject } from '../hooks/useProjects' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' interface ProjectSelectorProps { projects: ProjectSummary[] selectedProject: string | null onSelectProject: (name: string | null) => void isLoading: boolean onSpecCreatingChange?: (isCreating: boolean) => void } export function ProjectSelector({ projects, selectedProject, onSelectProject, isLoading, onSpecCreatingChange, }: ProjectSelectorProps) { const [isOpen, setIsOpen] = useState(false) const [showNewProjectModal, setShowNewProjectModal] = useState(false) const [projectToDelete, setProjectToDelete] = useState(null) const deleteProject = useDeleteProject() const handleProjectCreated = (projectName: string) => { onSelectProject(projectName) setIsOpen(false) } const handleDeleteClick = (e: React.MouseEvent, projectName: string) => { e.stopPropagation() e.preventDefault() setProjectToDelete(projectName) } const handleConfirmDelete = async () => { if (!projectToDelete) return try { await deleteProject.mutateAsync(projectToDelete) if (selectedProject === projectToDelete) { onSelectProject(null) } setProjectToDelete(null) } catch (error) { console.error('Failed to delete project:', error) setProjectToDelete(null) } } const handleCancelDelete = () => { setProjectToDelete(null) } const selectedProjectData = projects.find(p => p.name === selectedProject) return (
{projects.length > 0 ? (
{projects.map(project => ( { onSelectProject(project.name) }} > {project.name} {project.stats.total > 0 && ( {project.stats.passing}/{project.stats.total} )} ))}
) : (
No projects yet
)}
{ setShowNewProjectModal(true) }} className="cursor-pointer font-semibold" > New Project
{/* New Project Modal */} setShowNewProjectModal(false)} onProjectCreated={handleProjectCreated} onStepChange={(step) => onSpecCreatingChange?.(step === 'chat')} /> {/* Delete Confirmation Dialog */}
) }