diff options
Diffstat (limited to 'components/form-data')
| -rw-r--r-- | components/form-data/form-data-report-batch-dialog.tsx | 73 | ||||
| -rw-r--r-- | components/form-data/form-data-report-temp-upload-dialog.tsx | 28 | ||||
| -rw-r--r-- | components/form-data/form-data-table.tsx | 4 |
3 files changed, 85 insertions, 20 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) : ""; + } +}; diff --git a/components/form-data/form-data-report-temp-upload-dialog.tsx b/components/form-data/form-data-report-temp-upload-dialog.tsx index b646c3e6..413c1e51 100644 --- a/components/form-data/form-data-report-temp-upload-dialog.tsx +++ b/components/form-data/form-data-report-temp-upload-dialog.tsx @@ -9,7 +9,7 @@ import React, { } from "react"; import { useToast } from "@/hooks/use-toast"; import prettyBytes from "pretty-bytes"; -import { X, Loader2 } from "lucide-react"; +import { X, Loader2, Download } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Dialog, @@ -137,7 +137,8 @@ export const FormDataReportTempUploadDialog: FC< <DialogHeader> <DialogTitle>Report Template Upload</DialogTitle> <DialogDescription> - 사용하시고자 하는 Report Template를 업로드 하여주시기 바랍니다. + 사용하시고자 하는 Report Template(docx File)를 업로드 하여주시기 + 바랍니다. </DialogDescription> </DialogHeader> {/* {prevReportTemp.length > 0 && ( @@ -150,6 +151,29 @@ export const FormDataReportTempUploadDialog: FC< </ScrollArea> </> )} */} + <div + // className="flex flex-col gap-2" + > + <Label>Sample Template Download</Label> + + <FileList className="max-h-[200px] gap-3"> + <FileListItem className="p-3"> + <FileListHeader> + <FileListIcon /> + <FileListInfo> + <FileListName>sample_template_file.docx</FileListName> + </FileListInfo> + <FileListAction + // onClick={() => removeFile(index)} + // disabled={isUploading} + > + <Download className="h-4 w-4" /> + <span className="sr-only">Download</span> + </FileListAction> + </FileListHeader> + </FileListItem> + </FileList> + </div> <Dropzone maxSize={MAX_FILE_SIZE} diff --git a/components/form-data/form-data-table.tsx b/components/form-data/form-data-table.tsx index 9feaf3b2..50c4f267 100644 --- a/components/form-data/form-data-table.tsx +++ b/components/form-data/form-data-table.tsx @@ -531,14 +531,14 @@ export default function DynamicTable({ size="sm" onClick={() => setBatchDownDialog(true)} > - Report Batch + Report Download </Button> <Button variant="default" size="sm" onClick={() => setTempUpDialog(true)} > - Temp Upload + Template Upload </Button> <Button variant="default" |
