summaryrefslogtreecommitdiff
path: root/components/form-data/form-data-report-batch-dialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'components/form-data/form-data-report-batch-dialog.tsx')
-rw-r--r--components/form-data/form-data-report-batch-dialog.tsx73
1 files changed, 57 insertions, 16 deletions
diff --git a/components/form-data/form-data-report-batch-dialog.tsx b/components/form-data/form-data-report-batch-dialog.tsx
index e3fd7ea2..614f890e 100644
--- a/components/form-data/form-data-report-batch-dialog.tsx
+++ b/components/form-data/form-data-report-batch-dialog.tsx
@@ -6,7 +6,6 @@ import React, {
SetStateAction,
useState,
useEffect,
- useRef,
} from "react";
import { useToast } from "@/hooks/use-toast";
import prettyBytes from "pretty-bytes";
@@ -25,7 +24,6 @@ import { Label } from "@/components/ui/label";
import {
Select,
SelectContent,
- SelectGroup,
SelectItem,
SelectTrigger,
SelectValue,
@@ -49,7 +47,7 @@ import {
FileListName,
} from "@/components/ui/file-list";
import { Button } from "@/components/ui/button";
-import { getReportTempList } from "@/lib/forms/services";
+import { getReportTempList, getOrigin } from "@/lib/forms/services";
import { DataTableColumnJSON } from "./form-data-table-columns";
const MAX_FILE_SIZE = 3000000;
@@ -129,30 +127,59 @@ export const FormDataReportBatchDialog: FC<FormDataReportBatchDialogProps> = ({
setIsUploading(true);
try {
- const totalFiles = selectedFiles.length;
- let successCount = 0;
+ const origin = await getOrigin()
- for (let i = 0; i < totalFiles; i++) {
- const file = selectedFiles[i];
+ const targetFiles = selectedFiles[0];
- const formData = new FormData();
- formData.append("file", file);
- formData.append("customFileName", file.name);
+ const reportDatas = reportData.map((c) => {
+ const reportValue = stringifyAllValues(c);
- // await uploadReportTemp(packageId, formId, formData);
+ const reportValueMapping: { [key: string]: any } = {};
- successCount++;
+ columnsJSON.forEach((c2) => {
+ const { key, label } = c2;
+
+ const objKey = label.split(" ").join("_");
+
+ reportValueMapping[objKey] = reportValue?.[key] ?? "";
+ });
+
+ return reportValueMapping;
+ });
+ const formData = new FormData();
+ formData.append("file", targetFiles);
+ formData.append("customFileName", `${formCode}.pdf`);
+ formData.append("reportDatas", JSON.stringify(reportDatas));
+ formData.append("reportTempPath", selectTemp);
+
+ const reqeustCreateReport = await fetch(
+ `${origin}/api/pdftron/createVendorDataReports`,
+ { method: "POST", body: formData }
+ );
+
+ if (reqeustCreateReport.ok) {
+ const blob = await reqeustCreateReport.blob();
+ const url = window.URL.createObjectURL(blob);
+ const a = document.createElement("a");
+ a.href = url;
+ a.download = `${formCode}.pdf`;
+ a.click();
+ window.URL.revokeObjectURL(url);
+ } else {
+ const err = await reqeustCreateReport.json();
+ console.error("에러:", err);
}
} catch (err) {
console.error(err);
toast({
title: "Error",
- description: "파일 업로드 중 오류가 발생했습니다.",
+ description: "Report 생성 중 오류가 발생했습니다.",
variant: "destructive",
});
} finally {
setIsUploading(false);
- setOpen(false);
+ setSelectedFiles([])
+ setOpen(false)
}
};
@@ -237,10 +264,10 @@ export const FormDataReportBatchDialog: FC<FormDataReportBatchDialogProps> = ({
<DialogFooter>
<Button
- disabled={selectedFiles.length === 0 || selectTemp.length === 0}
+ disabled={selectedFiles.length === 0 || selectTemp.length === 0 || isUploading}
onClick={submitData}
>
- 다운로드
+ {isUploading && <Loader2 />}다운로드
</Button>
</DialogFooter>
</DialogContent>
@@ -305,3 +332,17 @@ const updateReportTempList: UpdateReportTempList = async (
})
);
};
+
+const stringifyAllValues = (obj: any): any => {
+ if (Array.isArray(obj)) {
+ return obj.map((item) => stringifyAllValues(item));
+ } else if (typeof obj === "object" && obj !== null) {
+ const result: any = {};
+ for (const key in obj) {
+ result[key] = stringifyAllValues(obj[key]);
+ }
+ return result;
+ } else {
+ return obj !== null && obj !== undefined ? String(obj) : "";
+ }
+};