"use client" import * as React from "react" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" // react-hook-form + shadcn/ui Form import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" // shadcn/ui Select import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { tasks } from "@/db/schema/tasks" // enumValues 가져올 DB 스키마 import { createTaskSchema, type CreateTaskSchema } from "@/lib/tasks/validations" import { createTask } from "@/lib/tasks/service" // 서버 액션 혹은 API export function AddTaskDialog() { const [open, setOpen] = React.useState(false) // react-hook-form 세팅 const form = useForm({ resolver: zodResolver(createTaskSchema), defaultValues: { title: "", label: tasks.label.enumValues[0] ?? "", // enumValues 중 첫 번째를 기본값으로 status: tasks.status.enumValues[0] ?? "", priority: tasks.priority.enumValues[0] ?? "", }, }) async function onSubmit(data: CreateTaskSchema) { const result = await createTask(data) if (result.error) { alert(`에러: ${result.error}`) return } // 성공 시 모달 닫고 폼 리셋 form.reset() setOpen(false) } function handleDialogOpenChange(nextOpen: boolean) { if (!nextOpen) { form.reset() } setOpen(nextOpen) } return ( {/* 모달을 열기 위한 버튼 */} Create New Task 새 Task 정보를 입력하고 Create 버튼을 누르세요. {/* shadcn/ui Form을 이용해 react-hook-form과 연결 */}
{/* Title 필드 */} ( Title )} /> {/* Label (Select) */} ( Label )} /> {/* Status (Select) */} ( Status )} /> {/* Priority (Select) */} ( Priority )} />
) }