import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { FolderKanban, Loader2, Plus, Trash2, Edit3, Archive, ListTodo, Package, Clock, CheckCircle2, AlertTriangle, ChevronRight, MoreVertical, } from 'lucide-react'; import { api } from '../api/client'; import type { ProjectListItem, ProjectCreate, ProjectUpdate } from '../api/client'; import { Button } from '../components/Button'; import { ConfirmModal } from '../components/ConfirmModal'; import { useToast } from '../contexts/ToastContext'; const PROJECT_COLORS = [ '#ef4444', // red '#f97316', // orange '#eab308', // yellow '#22c55e', // green '#06b6d4', // cyan '#3b82f6', // blue '#8b5cf6', // violet '#ec4899', // pink '#6b7280', // gray ]; interface ProjectModalProps { project?: ProjectListItem; onClose: () => void; onSave: (data: ProjectCreate | ProjectUpdate) => void; isLoading: boolean; } export function ProjectModal({ project, onClose, onSave, isLoading }: ProjectModalProps) { const [name, setName] = useState(project?.name || ''); const [description, setDescription] = useState(project?.description || ''); const [color, setColor] = useState(project?.color || PROJECT_COLORS[0]); const [targetCount, setTargetCount] = useState(project?.target_count?.toString() || ''); const [status, setStatus] = useState(project?.status || 'active'); const [tags, setTags] = useState((project as ProjectListItem & { tags?: string })?.tags || ''); const [dueDate, setDueDate] = useState((project as ProjectListItem & { due_date?: string })?.due_date?.split('T')[0] || ''); const [priority, setPriority] = useState((project as ProjectListItem & { priority?: string })?.priority || 'normal'); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSave({ name: name.trim(), description: description.trim() || undefined, color, target_count: targetCount ? parseInt(targetCount, 10) : undefined, tags: tags.trim() || undefined, due_date: dueDate || undefined, priority, ...(project && { status }), }); }; return (

{project ? 'Edit Project' : 'New Project'}

setName(e.target.value)} className="w-full bg-bambu-dark border border-bambu-dark-tertiary rounded px-3 py-2 text-white placeholder-bambu-gray focus:outline-none focus:border-bambu-green" placeholder="e.g., Voron 2.4 Build" required />