diff options
| author | kiman Kim <94714426+rlaks5757@users.noreply.github.com> | 2025-03-28 13:59:09 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-28 13:59:09 +0900 |
| commit | 53e136b022c0b8d6afee7bbf743bdcec49dd4e95 (patch) | |
| tree | a7cb3cfcae4291b0b76dd497ad596dbb6a328950 /components/form-data/form-data-report-batch-dialog.tsx | |
| parent | f839e58817340f09720e477ad610d41994a2cd8c (diff) | |
| parent | 2bcbef17fadb6799cca97bf612c87fc558dd19ca (diff) | |
Merge pull request #4 from DTS-Development/feature/kiman
Report Batch, Report Temp Sample Download
Diffstat (limited to 'components/form-data/form-data-report-batch-dialog.tsx')
| -rw-r--r-- | components/form-data/form-data-report-batch-dialog.tsx | 74 |
1 files changed, 58 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..6c690363 100644 --- a/components/form-data/form-data-report-batch-dialog.tsx +++ b/components/form-data/form-data-report-batch-dialog.tsx @@ -6,11 +6,12 @@ import React, { SetStateAction, useState, useEffect, - useRef, } from "react"; import { useToast } from "@/hooks/use-toast"; +import { toast as toastMessage} from "sonner"; import prettyBytes from "pretty-bytes"; import { X, Loader2 } from "lucide-react"; +import { saveAs } from 'file-saver'; import { Badge } from "@/components/ui/badge"; import { Dialog, @@ -25,7 +26,6 @@ import { Label } from "@/components/ui/label"; import { Select, SelectContent, - SelectGroup, SelectItem, SelectTrigger, SelectValue, @@ -49,7 +49,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 +129,58 @@ 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(); + + saveAs(blob, `${formCode}.pdf`); + + toastMessage.success("Report 다운로드 완료!") + } else { + const err = await reqeustCreateReport.json(); + console.error("에러:", err); + throw new Error(err.message) } } catch (err) { console.error(err); toast({ title: "Error", - description: "파일 업로드 중 오류가 발생했습니다.", + description: "Report 생성 중 오류가 발생했습니다.", variant: "destructive", }); } finally { setIsUploading(false); - setOpen(false); + setSelectedFiles([]) + setOpen(false) } }; @@ -237,10 +265,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 +333,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) : ""; + } +}; |
