diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-26 09:57:24 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-26 09:57:24 +0000 |
| commit | 8b23b471638a155fd1bfa3a8c853b26d9315b272 (patch) | |
| tree | 47353e9dd342011cb2f1dcd24b09661707a8421b /components/form-data | |
| parent | d62368d2b68d73da895977e60a18f9b1286b0545 (diff) | |
(대표님) 권한관리, 문서업로드, rfq첨부, SWP문서룰 등
(최겸) 입찰
Diffstat (limited to 'components/form-data')
| -rw-r--r-- | components/form-data/add-formTag-dialog.tsx | 68 |
1 files changed, 44 insertions, 24 deletions
diff --git a/components/form-data/add-formTag-dialog.tsx b/components/form-data/add-formTag-dialog.tsx index 5a462d2b..a5d4db21 100644 --- a/components/form-data/add-formTag-dialog.tsx +++ b/components/form-data/add-formTag-dialog.tsx @@ -52,10 +52,10 @@ import { cn } from "@/lib/utils" import { Badge } from "@/components/ui/badge" import { createTagInForm } from "@/lib/tags/service" -import { - getFormTagTypeMappings, - getTagTypeByDescription, - getSubfieldsByTagTypeForForm +import { + getFormTagTypeMappings, + getTagTypeByDescription, + getSubfieldsByTagTypeForForm } from "@/lib/forms/services" import { useTranslation } from "@/i18n/client"; @@ -100,10 +100,10 @@ interface AddFormTagDialogProps { onOpenChange?: (open: boolean) => void; } -export function AddFormTagDialog({ +export function AddFormTagDialog({ projectId, - formCode, - formName, + formCode, + formName, contractItemId, packageCode, open: externalOpen, @@ -138,7 +138,7 @@ export function AddFormTagDialog({ React.useEffect(() => { const loadMappings = async () => { if (!formCode || !projectId) return; - + setIsLoadingClasses(true); try { const result = await getFormTagTypeMappings(formCode, projectId); @@ -158,7 +158,7 @@ export function AddFormTagDialog({ setIsLoadingClasses(false); } }; - + loadMappings(); }, [formCode, projectId]); @@ -167,7 +167,7 @@ export function AddFormTagDialog({ if (isOpen) { const loadMappings = async () => { if (!formCode || !projectId) return; - + setIsLoadingClasses(true); try { const result = await getFormTagTypeMappings(formCode, projectId); @@ -187,7 +187,7 @@ export function AddFormTagDialog({ setIsLoadingClasses(false); } }; - + loadMappings(); } }, [isOpen, formCode, projectId]); @@ -256,13 +256,13 @@ export function AddFormTagDialog({ // --------------- async function handleSelectClass(classLabel: string) { form.setValue("class", classLabel); - + // Find the mapping for this class const mapping = mappings.find(m => m.classLabel === classLabel); if (mapping) { setSelectedTagTypeLabel(mapping.tagTypeLabel); form.setValue("tagType", mapping.tagTypeLabel); - + // Get the tagTypeCode for this tagTypeLabel try { const tagType = await getTagTypeByDescription(mapping.tagTypeLabel, projectId); @@ -285,28 +285,28 @@ export function AddFormTagDialog({ if (subFields.length === 0) { return; } - + const subscription = form.watch((value) => { if (!value.rows || subFields.length === 0) { return; } - + const rows = [...value.rows]; rows.forEach((row, rowIndex) => { if (!row) return; - + let combined = ""; subFields.forEach((sf, idx) => { const fieldValue = row[sf.name] || ""; - + // delimiter를 앞에 붙이기 (첫 번째 필드가 아니고, 현재 필드에 값이 있고, delimiter가 있는 경우) if (idx > 0 && fieldValue && sf.delimiter) { combined += sf.delimiter; } - + combined += fieldValue; }); - + const currentTagNo = form.getValues(`rows.${rowIndex}.tagNo`); if (currentTagNo !== combined) { form.setValue(`rows.${rowIndex}.tagNo`, combined, { @@ -317,7 +317,7 @@ export function AddFormTagDialog({ } }); }); - + return () => subscription.unsubscribe(); }, [subFields, form]); // --------------- @@ -364,11 +364,16 @@ export function AddFormTagDialog({ try { const res = await createTagInForm(tagData, contractItemId, formCode, packageCode); - if ("error" in res) { + if (res && "error" in res) { failedTags.push({ tag: row.tagNo, error: res.error }); - } else { + } else if (res && res.success) { successfulTags.push(row.tagNo); + } else { + // 예상치 못한 응답 처리 + console.error("Unexpected response:", res); + failedTags.push({ tag: row.tagNo, error: "Unexpected response format" }); } + } catch (err) { failedTags.push({ tag: row.tagNo, error: "Unknown error" }); } @@ -381,7 +386,22 @@ export function AddFormTagDialog({ if (failedTags.length > 0) { console.log("Failed tags:", failedTags); - toast.error(`${failedTags.length}개의 태그 생성에 실패했습니다.`); + + // 전체 에러 메시지 표시 + const errorMessage = failedTags + .map(f => `${f.tag}: ${f.error}`) + .join('\n'); + + toast.error( + <div> + <p>{failedTags.length}개의 태그 생성 실패:</p> + <ul className="text-sm mt-1"> + {failedTags.map((f, idx) => ( + <li key={idx}>• {f.tag}: {f.error}</li> + ))} + </ul> + </div> + ); } // Refresh the page @@ -445,7 +465,7 @@ export function AddFormTagDialog({ // --------------- // Render Class field // --------------- - function renderClassField(field: any) { + function renderClassField(field: any) { const [popoverOpen, setPopoverOpen] = React.useState(false) const buttonId = React.useMemo( |
