From 67bb1ad7d7e001e19c8d1dd9153a5f663e2afa03 Mon Sep 17 00:00:00 2001
From: 0-Zz-ang <s1998319@gmail.com>
Date: Thu, 7 Aug 2025 18:02:54 +0900
Subject: (박서영)docu-list-rule Project_code적용
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../code-groups/table/code-groups-add-dialog.tsx   | 61 +++++++++++++++++++++-
 1 file changed, 59 insertions(+), 2 deletions(-)

(limited to 'lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx')

diff --git a/lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx b/lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx
index bf044f1a..a0143239 100644
--- a/lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx
+++ b/lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx
@@ -33,10 +33,12 @@ import {
   SelectTrigger,
   SelectValue,
 } from "@/components/ui/select"
-import { createCodeGroup } from "../service"
+import { createCodeGroup } from "@/lib/docu-list-rule/code-groups/service"
+import { getProjectLists } from "@/lib/projects/service"
 import { z } from "zod"
 
 const createCodeGroupSchema = z.object({
+  projectId: z.string().min(1, "프로젝트는 필수입니다."),
   description: z.string().min(1, "Description은 필수입니다."),
   codeFormat: z.string().optional().refine((val) => {
     if (!val) return true; // 빈 값은 허용
@@ -54,16 +56,44 @@ interface CodeGroupsAddDialogProps {
 export function CodeGroupsAddDialog({ onSuccess }: CodeGroupsAddDialogProps) {
   const [open, setOpen] = React.useState(false)
   const [isLoading, setIsLoading] = React.useState(false)
+  const [projects, setProjects] = React.useState<Array<{ id: number; code: string; name: string }>>([])
 
   const form = useForm<CreateCodeGroupFormValues>({
     resolver: zodResolver(createCodeGroupSchema),
     defaultValues: {
+      projectId: "",
       description: "",
       codeFormat: "",
       controlType: "",
     },
   })
 
+  // 프로젝트 목록 로드
+  React.useEffect(() => {
+    if (open) {
+      const loadProjects = async () => {
+        try {
+          const result = await getProjectLists({ 
+            page: 1, 
+            perPage: 1000,
+            search: "",
+            sort: [],
+            filters: [],
+            joinOperator: "and",
+            flags: []
+          })
+          if (result.data) {
+            setProjects(result.data)
+          }
+        } catch (error) {
+          console.error("Failed to load projects:", error)
+          toast.error("프로젝트 목록을 불러오는데 실패했습니다.")
+        }
+      }
+      loadProjects()
+    }
+  }, [open])
+
   // Code Format을 기반으로 정규식 자동 생성 함수
   const generateExpression = (codeFormat: string): string => {
     if (!codeFormat) return ''
@@ -121,6 +151,7 @@ export function CodeGroupsAddDialog({ onSuccess }: CodeGroupsAddDialogProps) {
       const expressions = generateExpression(data.codeFormat || "")
       
       const result = await createCodeGroup({
+        projectId: parseInt(data.projectId),
         description: data.description,
         codeFormat: data.codeFormat,
         expressions: expressions,
@@ -156,17 +187,43 @@ export function CodeGroupsAddDialog({ onSuccess }: CodeGroupsAddDialogProps) {
           <DialogTitle>Code Group 생성</DialogTitle>
           <DialogDescription>
             새로운 Code Group을 생성합니다.
+            <span className="text-red-500 mt-1 block text-sm">* 표시된 항목은 필수 입력사항입니다.</span>
           </DialogDescription>
         </DialogHeader>
 
         <Form {...form}>
           <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
+            <FormField
+              control={form.control}
+              name="projectId"
+              render={({ field }) => (
+                <FormItem>
+                  <FormLabel>프로젝트 *</FormLabel>
+                  <Select onValueChange={field.onChange} defaultValue={field.value}>
+                    <FormControl>
+                      <SelectTrigger>
+                        <SelectValue placeholder="프로젝트를 선택하세요" />
+                      </SelectTrigger>
+                    </FormControl>
+                    <SelectContent>
+                      {projects.map((project) => (
+                        <SelectItem key={project.id} value={project.id.toString()}>
+                          {project.code} - {project.name}
+                        </SelectItem>
+                      ))}
+                    </SelectContent>
+                  </Select>
+                  <FormMessage />
+                </FormItem>
+              )}
+            />
+
             <FormField
               control={form.control}
               name="description"
               render={({ field }) => (
                 <FormItem>
-                  <FormLabel>Description</FormLabel>
+                  <FormLabel>Description *</FormLabel>
                   <FormControl>
                     <Input placeholder="예: PROJECT NO" {...field} />
                   </FormControl>
-- 
cgit v1.2.3

