summaryrefslogtreecommitdiff
path: root/lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx
diff options
context:
space:
mode:
author0-Zz-ang <s1998319@gmail.com>2025-08-07 18:02:54 +0900
committer0-Zz-ang <s1998319@gmail.com>2025-08-07 18:02:54 +0900
commit67bb1ad7d7e001e19c8d1dd9153a5f663e2afa03 (patch)
tree9aab25663d6c180fd3a315840a3035b491ac0b7d /lib/docu-list-rule/code-groups/table/code-groups-add-dialog.tsx
parente270e477f362dd68249bb4a013c66eab293bba82 (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.tsx61
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>