From 95bbe9c583ff841220da1267630e7b2025fc36dc Mon Sep 17 00:00:00 2001
From: dujinkim <dujin.kim@dtsolution.co.kr>
Date: Thu, 19 Jun 2025 09:44:28 +0000
Subject: (대표님) 20250619 1844 KST 작업사항
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lib/incoterms/table/incoterms-edit-sheet.tsx | 146 +++++++++++++++++++++++++++
 1 file changed, 146 insertions(+)
 create mode 100644 lib/incoterms/table/incoterms-edit-sheet.tsx

(limited to 'lib/incoterms/table/incoterms-edit-sheet.tsx')

diff --git a/lib/incoterms/table/incoterms-edit-sheet.tsx b/lib/incoterms/table/incoterms-edit-sheet.tsx
new file mode 100644
index 00000000..9cd067c7
--- /dev/null
+++ b/lib/incoterms/table/incoterms-edit-sheet.tsx
@@ -0,0 +1,146 @@
+"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 {
+  Form,
+  FormControl,
+  FormField,
+  FormItem,
+  FormLabel,
+  FormMessage,
+} from "@/components/ui/form"
+import {
+  Sheet,
+  SheetContent,
+  SheetDescription,
+  SheetHeader,
+  SheetTitle,
+} from "@/components/ui/sheet"
+import { Input } from "@/components/ui/input"
+import { Switch } from "@/components/ui/switch"
+import { updateIncoterm } from "../service"
+import { incoterms } from "@/db/schema/procurementRFQ"
+
+const updateIncotermSchema = z.object({
+  code: z.string().min(1, "코드는 필수입니다."),
+  description: z.string().min(1, "설명은 필수입니다."),
+  isActive: z.boolean().default(true),
+})
+
+type UpdateIncotermSchema = z.infer<typeof updateIncotermSchema>
+
+interface IncotermsEditSheetProps {
+  open: boolean
+  onOpenChange: (open: boolean) => void
+  data: typeof incoterms.$inferSelect
+  onSuccess: () => void
+}
+
+export function IncotermsEditSheet({
+  open,
+  onOpenChange,
+  data,
+  onSuccess,
+}: IncotermsEditSheetProps) {
+  const form = useForm<UpdateIncotermSchema>({
+    resolver: zodResolver(updateIncotermSchema),
+    defaultValues: {
+      code: data.code,
+      description: data.description,
+      isActive: data.isActive,
+    },
+    mode: "onChange"
+  })
+
+  React.useEffect(() => {
+    if (data) {
+      form.reset({
+        code: data.code,
+        description: data.description,
+        isActive: data.isActive,
+      })
+    }
+  }, [data, form])
+
+  async function onSubmit(input: UpdateIncotermSchema) {
+    try {
+      await updateIncoterm(data.code, input)
+      toast.success("수정이 완료되었습니다.")
+      onSuccess()
+      onOpenChange(false)
+    } catch {
+      toast.error("수정 중 오류가 발생했습니다.")
+    }
+  }
+
+  return (
+    <Sheet open={open} onOpenChange={onOpenChange}>
+      <SheetContent className="flex flex-col gap-6 sm:max-w-md">
+        <SheetHeader className="text-left">
+          <SheetTitle>인코텀즈 수정</SheetTitle>
+          <SheetDescription>
+            인코텀즈 정보를 수정하고 변경사항을 저장하세요
+          </SheetDescription>
+        </SheetHeader>
+        <Form {...form}>
+          <form onSubmit={form.handleSubmit(onSubmit)} className="flex flex-col gap-4">
+            <FormField
+              control={form.control}
+              name="code"
+              render={({ field }) => (
+                <FormItem>
+                  <FormLabel>코드</FormLabel>
+                  <FormControl>
+                    <Input {...field} disabled />
+                  </FormControl>
+                  <FormMessage />
+                </FormItem>
+              )}
+            />
+            <FormField
+              control={form.control}
+              name="description"
+              render={({ field }) => (
+                <FormItem>
+                  <FormLabel>설명</FormLabel>
+                  <FormControl>
+                    <Input {...field} />
+                  </FormControl>
+                  <FormMessage />
+                </FormItem>
+              )}
+            />
+            <FormField
+              control={form.control}
+              name="isActive"
+              render={({ field }) => (
+                <FormItem className="flex flex-row items-center justify-between rounded-lg border p-4">
+                  <div className="space-y-0.5">
+                    <FormLabel>활성화</FormLabel>
+                  </div>
+                  <FormControl>
+                    <Switch
+                      checked={field.value}
+                      onCheckedChange={field.onChange}
+                    />
+                  </FormControl>
+                </FormItem>
+              )}
+            />
+            <div className="flex justify-end space-x-2">
+              <Button type="button" variant="outline" onClick={() => onOpenChange(false)}>
+                취소
+              </Button>
+              <Button type="submit">저장</Button>
+            </div>
+          </form>
+        </Form>
+      </SheetContent>
+    </Sheet>
+  )
+} 
\ No newline at end of file
-- 
cgit v1.2.3

