"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 { Loader } from "lucide-react" import { Button } from "@/components/ui/button" import { Sheet, SheetClose, 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 { updateDocumentClassCodeGroup } from "@/lib/docu-list-rule/document-class/service" import { documentClasses } from "@/db/schema/docu-list-rule" const updateDocumentClassSchema = z.object({ value: z.string() .min(1, "Value는 필수입니다.") .max(1, "Value는 1자리만 입력 가능합니다. (예: A, B, 0, 1)") .regex(/^[A-Z0-9]$/, "대문자 알파벳 또는 숫자 1자리만 입력 가능합니다. (예: A, B, 0, 1)"), description: z.string().optional(), }) type UpdateDocumentClassSchema = z.infer interface DocumentClassEditSheetProps { open: boolean onOpenChange: (open: boolean) => void data: typeof documentClasses.$inferSelect | null onSuccess?: () => void } export function DocumentClassEditSheet({ open, onOpenChange, data, onSuccess, }: DocumentClassEditSheetProps) { const [isUpdatePending, startUpdateTransition] = React.useTransition() const form = useForm({ resolver: zodResolver(updateDocumentClassSchema), defaultValues: { value: data?.value || "", description: data?.description || "", }, mode: "onChange" }) React.useEffect(() => { if (data) { form.reset({ value: data.value || "", description: data.description || "", }) } }, [data, form]) async function onSubmit(input: UpdateDocumentClassSchema) { if (!data) return startUpdateTransition(async () => { try { const result = await updateDocumentClassCodeGroup({ id: data.id, value: input.value, description: input.description, }) if (result.success) { toast.success("Document Class가 성공적으로 수정되었습니다.") onSuccess?.() onOpenChange(false) } else { toast.error(result.error || "수정에 실패했습니다.") } } catch (error) { console.error("Update error:", error) toast.error("Document Class 수정 중 오류가 발생했습니다.") } }) } return ( Document Class 수정 Document Class 정보를 수정하고 변경사항을 저장하세요
( Value * field.onChange(e.target.value.toUpperCase())} />
대문자 알파벳 1자리 또는 숫자 1자리 (A, B, 0, 1 등)
)} /> ( Description
선택사항: Document Class에 대한 추가 설명
)} />
) }