diff --git a/frontend/src/components/CreateTaskModal.tsx b/frontend/src/components/CreateTaskModal.tsx index 034252a..2175069 100644 --- a/frontend/src/components/CreateTaskModal.tsx +++ b/frontend/src/components/CreateTaskModal.tsx @@ -1,4 +1,6 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; +import { fetchProjects } from "../lib/api"; +import type { Project } from "../lib/types"; interface CreateTaskModalProps { open: boolean; @@ -8,6 +10,8 @@ interface CreateTaskModalProps { description?: string; source?: string; priority?: string; + projectId?: string; + dueDate?: string; }) => void; } @@ -16,6 +20,26 @@ export function CreateTaskModal({ open, onClose, onCreate }: CreateTaskModalProp const [description, setDescription] = useState(""); const [source, setSource] = useState("donovan"); const [priority, setPriority] = useState("medium"); + const [projectId, setProjectId] = useState(""); + const [dueDate, setDueDate] = 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; @@ -27,75 +51,166 @@ export function CreateTaskModal({ open, onClose, onCreate }: CreateTaskModalProp description: description.trim() || undefined, source, priority, + projectId: projectId || undefined, + dueDate: dueDate ? new Date(dueDate).toISOString() : undefined, }); + // Reset form setTitle(""); setDescription(""); setSource("donovan"); setPriority("medium"); + setProjectId(""); + setDueDate(""); + setShowAdvanced(false); onClose(); }; return ( -
-
-

New Task

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