"use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { useCreateTask } from "@/lib/hooks/use-tasks"; import { CreateTaskDto, WorkItemPriority } from "@/types/project"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Card, CardContent } from "@/components/ui/card"; import { Plus, X } from "lucide-react"; interface TaskQuickAddProps { storyId: string; } const taskSchema = z.object({ title: z.string().min(1, "Title is required").max(200, "Title too long"), priority: z.enum(["Critical", "High", "Medium", "Low"]), estimatedHours: z.number().min(0).optional().or(z.literal("")), }); type TaskFormData = z.infer; export function TaskQuickAdd({ storyId }: TaskQuickAddProps) { const [isOpen, setIsOpen] = useState(false); const createTask = useCreateTask(); const form = useForm({ resolver: zodResolver(taskSchema), defaultValues: { title: "", priority: "Medium", estimatedHours: undefined, }, }); const onSubmit = async (data: TaskFormData) => { const taskData: CreateTaskDto = { storyId, title: data.title, priority: data.priority as WorkItemPriority, estimatedHours: typeof data.estimatedHours === "number" ? data.estimatedHours : undefined, }; createTask.mutate(taskData, { onSuccess: () => { form.reset(); // Keep form open for batch creation }, }); }; const handleCancel = () => { form.reset(); setIsOpen(false); }; if (!isOpen) { return ( ); } return (

Quick Add Task

( Title * )} />
( Priority )} /> ( Est. Hours { const value = e.target.value; field.onChange(value === "" ? "" : parseFloat(value)); }} value={field.value === undefined ? "" : field.value} /> )} />
); }