summaryrefslogtreecommitdiff
path: root/components/form-data/form-data-report-dialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'components/form-data/form-data-report-dialog.tsx')
-rw-r--r--components/form-data/form-data-report-dialog.tsx153
1 files changed, 100 insertions, 53 deletions
diff --git a/components/form-data/form-data-report-dialog.tsx b/components/form-data/form-data-report-dialog.tsx
index 52262bf5..3cfbbeb3 100644
--- a/components/form-data/form-data-report-dialog.tsx
+++ b/components/form-data/form-data-report-dialog.tsx
@@ -32,6 +32,7 @@ import {
import { Button } from "@/components/ui/button";
import { getReportTempList } from "@/lib/forms/services";
import { DataTableColumnJSON } from "./form-data-table-columns";
+import { PublishDialog } from "./publish-dialog";
type ReportData = {
[key: string]: any;
@@ -64,6 +65,10 @@ export const FormDataReportDialog: FC<FormDataReportDialogProps> = ({
const [selectTemp, setSelectTemp] = useState<string>("");
const [instance, setInstance] = useState<null | WebViewerInstance>(null);
const [fileLoading, setFileLoading] = useState<boolean>(true);
+
+ // Add new state for publish dialog
+ const [publishDialogOpen, setPublishDialogOpen] = useState<boolean>(false);
+ const [generatedFileBlob, setGeneratedFileBlob] = useState<Blob | null>(null);
useEffect(() => {
updateReportTempList(packageId, formId, setTempList);
@@ -98,61 +103,103 @@ export const FormDataReportDialog: FC<FormDataReportDialogProps> = ({
toast.success("Report 다운로드 완료!");
}
};
+
+ // New function to prepare the file for publishing
+ const prepareFileForPublishing = async () => {
+ if (instance) {
+ try {
+ const { Core } = instance;
+ const { documentViewer } = Core;
+
+ const doc = documentViewer.getDocument();
+ const fileData = await doc.getFileData({
+ includeAnnotations: true,
+ });
+
+ setGeneratedFileBlob(new Blob([fileData]));
+ setPublishDialogOpen(true);
+ } catch (error) {
+ console.error("Error preparing file for publishing:", error);
+ toast.error("Failed to prepare document for publishing");
+ }
+ }
+ };
return (
- <Dialog open={reportData.length > 0} onOpenChange={onClose}>
- <DialogContent className="w-[70vw]" style={{ maxWidth: "none" }}>
- <DialogHeader>
- <DialogTitle>Create Vendor Document</DialogTitle>
- <DialogDescription>
- 사용하시고자 하는 Vendor Document Template를 선택하여 주시기 바랍니다.
- </DialogDescription>
- </DialogHeader>
- <div className="h-[60px]">
- <Label>Vendor Document Template Select</Label>
- <Select
- value={selectTemp}
- onValueChange={setSelectTemp}
- disabled={instance === null}
- >
- <SelectTrigger className="w-[100%]">
- <SelectValue placeholder="사용하시고자하는 Vendor Document Template을 선택하여 주시기 바랍니다." />
- </SelectTrigger>
- <SelectContent>
- {tempList.map((c) => {
- const { fileName, filePath } = c;
-
- return (
- <SelectItem key={filePath} value={filePath}>
- {fileName}
- </SelectItem>
- );
- })}
- </SelectContent>
- </Select>
- </div>
- <div className="h-[calc(70vh-60px)]">
- <ReportWebViewer
- columnsJSON={columnsJSON}
- reportTempPath={selectTemp}
- reportDatas={reportData}
- instance={instance}
- setInstance={setInstance}
- setFileLoading={setFileLoading}
- formCode={formCode}
- />
- </div>
-
- <DialogFooter>
- <Button onClick={downloadFileData} disabled={selectTemp.length === 0}>
- Create Vendor Document
- </Button>
- </DialogFooter>
- </DialogContent>
- </Dialog>
+ <>
+ <Dialog open={reportData.length > 0} onOpenChange={onClose}>
+ <DialogContent className="w-[70vw]" style={{ maxWidth: "none" }}>
+ <DialogHeader>
+ <DialogTitle>Create Vendor Document</DialogTitle>
+ <DialogDescription>
+ 사용하시고자 하는 Vendor Document Template를 선택하여 주시기 바랍니다.
+ </DialogDescription>
+ </DialogHeader>
+ <div className="h-[60px]">
+ <Label>Vendor Document Template Select</Label>
+ <Select
+ value={selectTemp}
+ onValueChange={setSelectTemp}
+ disabled={instance === null}
+ >
+ <SelectTrigger className="w-[100%]">
+ <SelectValue placeholder="사용하시고자하는 Vendor Document Template을 선택하여 주시기 바랍니다." />
+ </SelectTrigger>
+ <SelectContent>
+ {tempList.map((c) => {
+ const { fileName, filePath } = c;
+
+ return (
+ <SelectItem key={filePath} value={filePath}>
+ {fileName}
+ </SelectItem>
+ );
+ })}
+ </SelectContent>
+ </Select>
+ </div>
+ <div className="h-[calc(70vh-60px)]">
+ <ReportWebViewer
+ columnsJSON={columnsJSON}
+ reportTempPath={selectTemp}
+ reportDatas={reportData}
+ instance={instance}
+ setInstance={setInstance}
+ setFileLoading={setFileLoading}
+ formCode={formCode}
+ />
+ </div>
+
+ <DialogFooter>
+ {/* Add the new Publish button */}
+ <Button
+ onClick={prepareFileForPublishing}
+ disabled={selectTemp.length === 0}
+ variant="outline"
+ className="mr-2"
+ >
+ Publish
+ </Button>
+ <Button onClick={downloadFileData} disabled={selectTemp.length === 0}>
+ Create Vendor Document
+ </Button>
+ </DialogFooter>
+ </DialogContent>
+ </Dialog>
+
+ {/* Add the PublishDialog component */}
+ <PublishDialog
+ open={publishDialogOpen}
+ onOpenChange={setPublishDialogOpen}
+ packageId={packageId}
+ formCode={formCode}
+ fileBlob={generatedFileBlob || undefined}
+ />
+ </>
);
};
+// Keep the rest of the component as is...
interface ReportWebViewerProps {
columnsJSON: DataTableColumnJSON[];
reportTempPath: string;
@@ -310,9 +357,9 @@ const importReportData: ImportReportData = async (
columnsJSON.forEach((c) => {
const { key, label } = c;
- const objKey = label.split(" ").join("_");
+ // const objKey = label.split(" ").join("_");
- reportValueMapping[objKey] = reportValue?.[key] ?? "";
+ reportValueMapping[key] = reportValue?.[key] ?? "";
});
const doc = await createDocument(reportFileBlob, {
@@ -357,4 +404,4 @@ const updateReportTempList: UpdateReportTempList = async (
return { fileName, filePath };
})
);
-};
+}; \ No newline at end of file