From 1a2241c40e10193c5ff7008a7b7b36cc1d855d96 Mon Sep 17 00:00:00 2001
From: joonhoekim <26rote@gmail.com>
Date: Tue, 25 Mar 2025 15:55:45 +0900
Subject: initial commit

---
 lib/vendors/table/attachmentButton.tsx | 69 ++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 lib/vendors/table/attachmentButton.tsx

(limited to 'lib/vendors/table/attachmentButton.tsx')

diff --git a/lib/vendors/table/attachmentButton.tsx b/lib/vendors/table/attachmentButton.tsx
new file mode 100644
index 00000000..a82f59e1
--- /dev/null
+++ b/lib/vendors/table/attachmentButton.tsx
@@ -0,0 +1,69 @@
+'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 { downloadVendorAttachments } 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 downloadVendorAttachments(vendorId);
+      
+      // 로딩 토스트 닫기
+      toast.dismiss();
+      
+      if (!result || !result.url) {
+        toast.error('다운로드 준비 중 오류가 발생했습니다.');
+        return;
+      }
+      
+      // 파일 다운로드 트리거
+      toast.success('첨부파일 다운로드가 시작되었습니다.');
+      
+      // 다운로드 링크 열기
+      const a = document.createElement('a');
+      a.href = result.url;
+      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 (
+    <Button
+      variant="ghost"
+      size="icon"
+      onClick={handleDownload}
+      title={`${attachmentsList.length}개 파일 다운로드`}
+    >
+      <PaperclipIcon className="h-4 w-4" />
+      {attachmentsList.length > 1 && (
+        <Badge variant="outline" className="ml-1 h-5 min-w-5 px-1">
+          {attachmentsList.length}
+        </Badge>
+      )}
+    </Button>
+  );
+}
-- 
cgit v1.2.3

