"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import { Loader } from "lucide-react" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "@/components/ui/sheet" import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Vendor } from "@/db/schema/vendors" import { updateVendorSchema, type UpdateVendorSchema } from "../validations" import { modifyVendor } from "../service" // 예: import { modifyVendor } from "@/lib/vendors/service" interface UpdateVendorSheetProps extends React.ComponentPropsWithRef { vendor: Vendor | null } // 폼 컴포넌트 export function UpdateVendorSheet({ vendor, ...props }: UpdateVendorSheetProps) { const [isPending, startTransition] = React.useTransition() console.log(vendor) // RHF + Zod const form = useForm({ resolver: zodResolver(updateVendorSchema), defaultValues: { vendorName: vendor?.vendorName ?? "", vendorCode: vendor?.vendorCode ?? "", address: vendor?.address ?? "", country: vendor?.country ?? "", phone: vendor?.phone ?? "", email: vendor?.email ?? "", website: vendor?.website ?? "", status: vendor?.status ?? "ACTIVE", }, }) React.useEffect(() => { if (vendor) { form.reset({ vendorName: vendor?.vendorName ?? "", vendorCode: vendor?.vendorCode ?? "", address: vendor?.address ?? "", country: vendor?.country ?? "", phone: vendor?.phone ?? "", email: vendor?.email ?? "", website: vendor?.website ?? "", status: vendor?.status ?? "ACTIVE", }); } }, [vendor, form]); console.log(form.getValues()) // 제출 핸들러 async function onSubmit(data: UpdateVendorSchema) { if (!vendor) return startTransition(async () => { // 서버 액션 or API // const { error } = await modifyVendor({ id: vendor.id, ...data }) // 여기선 간단 예시 try { // 예시: const { error } = await modifyVendor({ id: String(vendor.id), ...data }) if (error) throw new Error(error) toast.success("Vendor updated!") form.reset() props.onOpenChange?.(false) } catch (err: any) { toast.error(String(err)) } }) } return ( Update Vendor Update the vendor details and save the changes
{/* vendorName */} ( Vendor Name )} /> {/* vendorCode */} ( Vendor Code )} /> {/* address */} ( Address )} /> {/* country */} ( Country )} /> {/* phone */} ( Phone )} /> {/* email */} ( Email )} /> {/* website */} ( Website )} /> {/* status */} ( Status )} />
) }