import { useState, useEffect } from "react"; import { fetchProjects } from "../lib/api"; import type { Project } from "../lib/types"; interface CreateTaskModalProps { open: boolean; onClose: () => void; onCreate: (task: { title: string; description?: string; source?: string; priority?: string; projectId?: string; dueDate?: string; estimatedHours?: number; }) => void; } export function CreateTaskModal({ open, onClose, onCreate }: CreateTaskModalProps) { const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [source, setSource] = useState("donovan"); const [priority, setPriority] = useState("medium"); const [projectId, setProjectId] = useState(""); const [dueDate, setDueDate] = useState(""); const [estimatedHours, setEstimatedHours] = useState(""); const [projects, setProjects] = useState([]); const [showAdvanced, setShowAdvanced] = useState(false); useEffect(() => { if (open) { fetchProjects().then(setProjects).catch(() => {}); } }, [open]); // Keyboard shortcut: Escape to close useEffect(() => { if (!open) return; const handleKey = (e: KeyboardEvent) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", handleKey); return () => window.removeEventListener("keydown", handleKey); }, [open, onClose]); if (!open) return null; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!title.trim()) return; onCreate({ title: title.trim(), description: description.trim() || undefined, source, priority, projectId: projectId || undefined, dueDate: dueDate ? new Date(dueDate).toISOString() : undefined, estimatedHours: estimatedHours ? Number(estimatedHours) : undefined, }); // Reset form setTitle(""); setDescription(""); setSource("donovan"); setPriority("medium"); setProjectId(""); setDueDate(""); setEstimatedHours(""); setShowAdvanced(false); onClose(); }; return (

New Task

{/* Title */}
setTitle(e.target.value)} className="w-full border border-gray-200 rounded-lg px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-amber-400 focus:border-amber-400" autoFocus />
{/* Description */}