'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.coerce.number().min(0).optional(), }); 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: data.estimatedHours, }; 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 )} />
); }