"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([]) 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 ( TBE 응답 파일 제출된 파일 목록을 확인하고 다운로드하세요. {/* 제출된 파일 목록 */} {isFetchingFiles ? (
) : submittedFiles.length > 0 ? (
{submittedFiles.map((file) => (
{file.fileName} {file.uploadedAt ? formatDateTime(file.uploadedAt, "KR") : ""}
))}
) : (
제출된 파일이 없습니다.
)}
) }