"use client"; import { Check, Plus } from "lucide-react"; import { type FormEvent, type ReactNode, useEffect, useMemo, useState, } from "react"; import { TaskDetailSheet } from "@/components/tasks/task-detail-sheet"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Dialog, DialogClose, DialogDescription, DialogFooter, DialogHeader, DialogPanel, DialogPopup, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { type Priority, type Task, type TaskInput, createTask, listTasks, updateTask, } from "@/lib/tasks"; import { notify } from "@/lib/toast"; import { cn } from "@/lib/utils"; export type { Priority, Task } from "@/lib/tasks"; type Filter = "all" | "open" | "done"; const priorityVariant: Record = { high: "destructive", medium: "secondary", low: "outline", }; const priorityLabel: Record = { high: "High", medium: "Medium", low: "Low", }; function CheckButton({ done, onClick, }: { done: boolean; onClick: () => void; }) { return ( ); } function Field({ label, children }: { label: string; children: ReactNode }) { return ( ); } const controlClass = "h-9 w-full rounded-3xl border border-transparent bg-input/50 px-3 text-sm text-foreground outline-none transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30"; function AddTaskDialog({ open, onOpenChange, onAdd, }: { open: boolean; onOpenChange: (open: boolean) => void; onAdd: (task: TaskInput) => void; }) { const [title, setTitle] = useState(""); const [notes, setNotes] = useState(""); const [assignee, setAssignee] = useState(""); const [due, setDue] = useState(""); const [priority, setPriority] = useState("medium"); const reset = () => { setTitle(""); setNotes(""); setAssignee(""); setDue(""); setPriority("medium"); }; const submit = (event: FormEvent) => { event.preventDefault(); if (!title.trim()) { notify.error("Add a subject", "Describe the task first."); return; } onAdd({ title: title.trim(), notes: notes.trim() || undefined, assignee: assignee.trim() || "Unassigned", due: due.trim() || "No due date", priority, }); notify.success("Task added", title.trim()); reset(); onOpenChange(false); }; return ( { onOpenChange(o); if (!o) reset(); }} open={open} > New task Assign a follow-up to the care team.
setTitle(e.target.value)} placeholder="e.g. Review lab results" value={title} />