diff options
| author | 0-Zz-ang <s1998319@gmail.com> | 2025-08-07 18:02:54 +0900 |
|---|---|---|
| committer | 0-Zz-ang <s1998319@gmail.com> | 2025-08-07 18:02:54 +0900 |
| commit | 67bb1ad7d7e001e19c8d1dd9153a5f663e2afa03 (patch) | |
| tree | 9aab25663d6c180fd3a315840a3035b491ac0b7d /lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx | |
| parent | e270e477f362dd68249bb4a013c66eab293bba82 (diff) | |
(박서영)docu-list-rule Project_code적용
Diffstat (limited to 'lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx')
| -rw-r--r-- | lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx | 61 |
1 files changed, 59 insertions, 2 deletions
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,6 +187,7 @@ 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> @@ -163,10 +195,35 @@ export function CodeGroupsAddDialog({ onSuccess }: CodeGroupsAddDialogProps) { <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> |
