From ef4c533ebacc2cdc97e518f30e9a9350004fcdfb Mon Sep 17 00:00:00 2001
From: dujinkim <dujin.kim@dtsolution.co.kr>
Date: Mon, 28 Apr 2025 02:13:30 +0000
Subject: ~20250428 작업사항
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 components/form-data/form-data-report-dialog.tsx | 153 +++++++++++++++--------
 1 file changed, 100 insertions(+), 53 deletions(-)

(limited to 'components/form-data/form-data-report-dialog.tsx')

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
-- 
cgit v1.2.3

