From 50ae0b8f02c034e60d4cbb504620dfa1575a836f Mon Sep 17 00:00:00 2001
From: dujinkim <dujin.kim@dtsolution.co.kr>
Date: Mon, 28 Jul 2025 09:19:42 +0000
Subject: (박서영) 설계 document Numbering Rule 개발-최겸 업로드
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../table/combo-box-options-add-dialog.tsx         | 142 +++++++++++++++++++++
 1 file changed, 142 insertions(+)
 create mode 100644 lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx

(limited to 'lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx')

diff --git a/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx b/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx
new file mode 100644
index 00000000..1fb8950c
--- /dev/null
+++ b/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx
@@ -0,0 +1,142 @@
+"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 { Plus } from "lucide-react"
+
+import { Button } from "@/components/ui/button"
+import {
+  Dialog,
+  DialogContent,
+  DialogDescription,
+  DialogFooter,
+  DialogHeader,
+  DialogTitle,
+  DialogTrigger,
+} from "@/components/ui/dialog"
+import {
+  Form,
+  FormControl,
+  FormField,
+  FormItem,
+  FormLabel,
+  FormMessage,
+} from "@/components/ui/form"
+import { Input } from "@/components/ui/input"
+
+import { createComboBoxOption } from "../service"
+
+const createOptionSchema = z.object({
+  description: z.string().min(1, "값은 필수입니다."),
+  remark: z.string().optional(),
+})
+
+type CreateOptionSchema = z.infer<typeof createOptionSchema>
+
+interface ComboBoxOptionsAddDialogProps {
+  codeGroupId: number
+  onSuccess?: () => void
+}
+
+export function ComboBoxOptionsAddDialog({ codeGroupId, onSuccess }: ComboBoxOptionsAddDialogProps) {
+  const [open, setOpen] = React.useState(false)
+  const [isPending, startTransition] = React.useTransition()
+
+  const form = useForm<CreateOptionSchema>({
+    resolver: zodResolver(createOptionSchema),
+    defaultValues: {
+      description: "",
+      remark: "",
+    },
+  })
+
+  const handleSubmit = (data: CreateOptionSchema) => {
+    startTransition(async () => {
+      try {
+        const result = await createComboBoxOption({
+          codeGroupId,
+          code: "", // 서비스에서 자동 생성
+          description: data.description,
+          remark: data.remark,
+        })
+
+        if (result.success) {
+          toast.success("옵션이 성공적으로 추가되었습니다.")
+          setOpen(false)
+          form.reset()
+          onSuccess?.()
+        } else {
+          toast.error(`옵션 추가 실패: ${result.error}`)
+        }
+      } catch (error) {
+        console.error("Create error:", error)
+        toast.error("옵션 추가 중 오류가 발생했습니다.")
+      }
+    })
+  }
+
+  const handleCancel = () => {
+    setOpen(false)
+    form.reset()
+  }
+
+  return (
+    <Dialog open={open} onOpenChange={setOpen}>
+      <DialogTrigger asChild>
+        <Button variant="outline" size="sm">
+          <Plus className="mr-2 h-4 w-4" />
+          옵션 추가
+        </Button>
+      </DialogTrigger>
+      <DialogContent>
+        <DialogHeader>
+          <DialogTitle>옵션 추가</DialogTitle>
+          <DialogDescription>
+            새로운 Combo Box 옵션을 추가합니다.
+          </DialogDescription>
+        </DialogHeader>
+        <Form {...form}>
+          <form onSubmit={form.handleSubmit(handleSubmit)} className="space-y-4">
+            <FormField
+              control={form.control}
+              name="description"
+              render={({ field }) => (
+                <FormItem>
+                  <FormLabel>값</FormLabel>
+                  <FormControl>
+                    <Input {...field} placeholder="옵션 값" />
+                  </FormControl>
+                  <FormMessage />
+                </FormItem>
+              )}
+            />
+            <FormField
+              control={form.control}
+              name="remark"
+              render={({ field }) => (
+                <FormItem>
+                  <FormLabel>비고</FormLabel>
+                  <FormControl>
+                    <Input {...field} placeholder="비고 (선택사항)" />
+                  </FormControl>
+                  <FormMessage />
+                </FormItem>
+              )}
+            />
+            <DialogFooter>
+              <Button type="button" variant="outline" onClick={handleCancel}>
+                취소
+              </Button>
+              <Button type="submit" disabled={isPending || !form.formState.isValid}>
+                추가
+              </Button>
+            </DialogFooter>
+          </form>
+        </Form>
+      </DialogContent>
+    </Dialog>
+  )
+} 
\ No newline at end of file
-- 
cgit v1.2.3

