"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import { toast } from "sonner" import * as z from "zod" import { Button } from "@/components/ui/button" import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "@/components/ui/sheet" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { updateComboBoxOption } from "@/lib/docu-list-rule/combo-box-settings/service" const updateOptionSchema = z.object({ code: z.string().min(1, "코드는 필수입니다."), remark: z.string().optional(), }) type UpdateOptionSchema = z.infer interface ComboBoxOption { id: number codeGroupId: number code: string description: string remark: string | null isActive: boolean createdAt: Date updatedAt: Date } interface ComboBoxOptionsEditSheetProps { open: boolean onOpenChange: (open: boolean) => void data: ComboBoxOption | null onSuccess?: () => void } export function ComboBoxOptionsEditSheet({ open, onOpenChange, data, onSuccess, }: ComboBoxOptionsEditSheetProps) { const [isPending, startTransition] = React.useTransition() const form = useForm({ resolver: zodResolver(updateOptionSchema), defaultValues: { code: "", remark: "", }, }) React.useEffect(() => { if (data) { form.reset({ code: data.code, remark: data.remark || "", }) } }, [data, form]) const handleSubmit = (formData: UpdateOptionSchema) => { if (!data) return startTransition(async () => { try { const result = await updateComboBoxOption({ id: data.id, code: formData.code, description: data.description, // 기존 description 유지 remark: formData.remark, }) if (result.success) { toast.success("옵션이 성공적으로 수정되었습니다.") onOpenChange(false) onSuccess?.() } else { toast.error(`옵션 수정 실패: ${result.error}`) } } catch (error) { console.error("Update error:", error) toast.error("옵션 수정 중 오류가 발생했습니다.") } }) } const handleCancel = () => { onOpenChange(false) form.reset() } return ( 옵션 수정 ComboBox 옵션을 수정합니다.
( code )} /> ( remark )} />
) }