'use client'; import React from 'react'; import { Button } from '@/components/ui/button'; import { PaperclipIcon } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; import { toast } from 'sonner'; import { type VendorAttach } from '@/db/schema/vendors'; import { downloadTechVendorAttachments } from '../service'; interface AttachmentsButtonProps { vendorId: number; hasAttachments: boolean; attachmentsList?: VendorAttach[]; } export function AttachmentsButton({ vendorId, hasAttachments, attachmentsList = [] }: AttachmentsButtonProps) { if (!hasAttachments) return null; const handleDownload = async () => { try { toast.loading('첨부파일을 준비하는 중...'); // 서버 액션 호출 const result = await downloadTechVendorAttachments(vendorId); // 로딩 토스트 닫기 toast.dismiss(); if (!result || !result.url) { toast.error('다운로드 준비 중 오류가 발생했습니다.'); return; } // 파일 다운로드 트리거 toast.success('첨부파일 다운로드가 시작되었습니다.'); // 서버 액션에서 상대 URL을 반환하므로 절대 URL로 변환 const downloadUrl = result.isServerAction ? `${window.location.origin}${result.url}` : result.url; // 다운로드 링크 열기 const a = document.createElement('a'); a.href = downloadUrl; a.download = result.fileName || '첨부파일.zip'; a.style.display = 'none'; document.body.appendChild(a); a.click(); document.body.removeChild(a); } catch (error) { toast.dismiss(); toast.error('첨부파일 다운로드에 실패했습니다.'); console.error('첨부파일 다운로드 오류:', error); } }; return ( <> {attachmentsList && attachmentsList.length > 0 && } ); }