"use client"; import React, { FC, Dispatch, SetStateAction, useState, useEffect, } from "react"; import { useToast } from "@/hooks/use-toast"; import { toast as toastMessage } from "sonner"; import { Download, Trash2 } from "lucide-react"; import { saveAs } from "file-saver"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Label } from "@/components/ui/label"; import { FileList, FileListAction, FileListHeader, FileListIcon, FileListInfo, FileListItem, FileListName, } from "@/components/ui/file-list"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog"; import { getReportTempList, deleteReportTempFile } from "@/lib/forms/services"; import { VendorDataReportTemps } from "@/db/schema/vendorData"; interface FormDataReportTempUploadedListTabProps { packageId: number; formId: number; } export const FormDataReportTempUploadedListTab: FC< FormDataReportTempUploadedListTabProps > = ({ packageId, formId }) => { const [prevReportTemp, setPrevReportTemp] = useState( [] ); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const getTempFiles = async () => { await updateReportTempList(packageId, formId, setPrevReportTemp); setIsLoading(false); }; getTempFiles(); }, [packageId, formId]); return (
updateReportTempList(packageId, formId, setPrevReportTemp) } isLoading={isLoading} />
); }; type UpdateReportTempList = ( packageId: number, formId: number, setPrevReportTemp: Dispatch> ) => Promise; const updateReportTempList: UpdateReportTempList = async ( packageId, formId, setPrevReportTemp ) => { const tempList = await getReportTempList(packageId, formId); setPrevReportTemp(tempList); }; interface UploadedTempFiles { prevReportTemp: VendorDataReportTemps[]; updateReportTempList: () => void; isLoading: boolean; } const UploadedTempFiles: FC = ({ prevReportTemp, updateReportTempList, isLoading, }) => { const { toast } = useToast(); const downloadTempFile = async (fileName: string, filePath: string) => { try { const getTempFile = await fetch(filePath); if (getTempFile.ok) { const blob = await getTempFile.blob(); saveAs(blob, fileName); toastMessage.success("Report 다운로드 완료!"); } else { const err = await getTempFile.json(); console.error("에러:", err); throw new Error(err.message); } toastMessage.success("Template File 다운로드 완료!"); } catch (err) { console.error(err); toast({ title: "Error", description: "Template File 다운로드 중 오류가 발생했습니다.", variant: "destructive", }); } }; const deleteTempFile = async (id: number) => { try { const { result, error } = await deleteReportTempFile(id); if (result) { updateReportTempList(); toastMessage.success("Template File 삭제 완료!"); } else { throw new Error(error); } } catch (err) { toast({ title: "Error", description: "Template File 삭제 중 오류가 발생했습니다.", variant: "destructive", }); } }; if (isLoading) { return (
); } return ( {prevReportTemp.map((c) => { const { fileName, filePath, id } = c; return ( {fileName} { downloadTempFile(fileName, filePath); }} > Download Delete Report Templete File({fileName})을 삭제하시겠습니까? 취소 { deleteTempFile(id); }} > 삭제 ); })} ); };