summaryrefslogtreecommitdiff
path: root/components/form-data
diff options
context:
space:
mode:
Diffstat (limited to 'components/form-data')
-rw-r--r--components/form-data/add-formTag-dialog.tsx68
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(