diff options
Diffstat (limited to 'lib/tbe/table/file-dialog.tsx')
| -rw-r--r-- | lib/tbe/table/file-dialog.tsx | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/lib/tbe/table/file-dialog.tsx b/lib/tbe/table/file-dialog.tsx deleted file mode 100644 index d22671da..00000000 --- a/lib/tbe/table/file-dialog.tsx +++ /dev/null @@ -1,141 +0,0 @@ -"use client" - -import * as React from "react" -import { Download, X } from "lucide-react" -import { toast } from "sonner" - -import { getErrorMessage } from "@/lib/handle-error" -import { formatDateTime } from "@/lib/utils" -import { Button } from "@/components/ui/button" -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog" - -import { - FileList, - FileListItem, - FileListIcon, - FileListInfo, - FileListName, - FileListDescription, - FileListAction, -} from "@/components/ui/file-list" -import { getTbeFilesForVendor } from "@/lib/rfqs/service" - -interface TBEFileDialogProps { - isOpen: boolean - onOpenChange: (open: boolean) => void - tbeId: number - vendorId: number - rfqId: number - onRefresh?: () => void -} - -export function TBEFileDialog({ - isOpen, - onOpenChange, - vendorId, - rfqId, - onRefresh, -}: TBEFileDialogProps) { - const [submittedFiles, setSubmittedFiles] = React.useState<any[]>([]) - const [isFetchingFiles, setIsFetchingFiles] = React.useState(false) - - - // Fetch submitted files when dialog opens - React.useEffect(() => { - if (isOpen && rfqId && vendorId) { - fetchSubmittedFiles() - } - }, [isOpen, rfqId, vendorId]) - - // Fetch submitted files using the service function - const fetchSubmittedFiles = async () => { - if (!rfqId || !vendorId) return - - setIsFetchingFiles(true) - try { - const { files, error } = await getTbeFilesForVendor(rfqId, vendorId) - - if (error) { - throw new Error(error) - } - - setSubmittedFiles(files) - } catch (error) { - toast.error("Failed to load files: " + getErrorMessage(error)) - } finally { - setIsFetchingFiles(false) - } - } - - // Download submitted file - const downloadSubmittedFile = async (file: any) => { - try { - const response = await fetch(`/api/file/${file.id}/download`) - if (!response.ok) { - throw new Error("Failed to download file") - } - - const blob = await response.blob() - const url = window.URL.createObjectURL(blob) - const a = document.createElement("a") - a.href = url - a.download = file.fileName - document.body.appendChild(a) - a.click() - window.URL.revokeObjectURL(url) - document.body.removeChild(a) - } catch (error) { - toast.error("Failed to download file: " + getErrorMessage(error)) - } - } - - return ( - <Dialog open={isOpen} onOpenChange={onOpenChange}> - <DialogContent className="sm:max-w-lg"> - <DialogHeader> - <DialogTitle>TBE 응답 파일</DialogTitle> - <DialogDescription>제출된 파일 목록을 확인하고 다운로드하세요.</DialogDescription> - </DialogHeader> - - {/* 제출된 파일 목록 */} - {isFetchingFiles ? ( - <div className="flex justify-center items-center py-8"> - <div className="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div> - </div> - ) : submittedFiles.length > 0 ? ( - <div className="grid gap-2"> - <FileList> - {submittedFiles.map((file) => ( - <FileListItem key={file.id} className="flex items-center justify-between gap-3"> - <div className="flex items-center gap-3 flex-1"> - <FileListIcon className="flex-shrink-0" /> - <FileListInfo className="flex-1 min-w-0"> - <FileListName className="text-sm font-medium truncate">{file.fileName}</FileListName> - <FileListDescription className="text-xs text-muted-foreground"> - {file.uploadedAt ? formatDateTime(file.uploadedAt, "KR") : ""} - </FileListDescription> - </FileListInfo> - </div> - <FileListAction className="flex-shrink-0 ml-2"> - <Button variant="ghost" size="icon" onClick={() => downloadSubmittedFile(file)}> - <Download className="h-4 w-4" /> - <span className="sr-only">파일 다운로드</span> - </Button> - </FileListAction> - </FileListItem> - ))} - </FileList> - </div> - ) : ( - <div className="text-center py-8 text-muted-foreground">제출된 파일이 없습니다.</div> - )} - </DialogContent> - </Dialog> - ) -}
\ No newline at end of file |
