From 36dd60ca6fce7712b35e6d7c1b9602710f442ada Mon Sep 17 00:00:00 2001
From: dujinkim <dujin.kim@dtsolution.co.kr>
Date: Wed, 28 May 2025 12:26:28 +0000
Subject: (최겸) 기술영업 해양 rfq 개발v1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../vendor-table/vendors-table-toolbar-actions.tsx | 84 ++++++++++++++++++++++
 1 file changed, 84 insertions(+)
 create mode 100644 lib/rfqs-tech/vendor-table/vendors-table-toolbar-actions.tsx

(limited to 'lib/rfqs-tech/vendor-table/vendors-table-toolbar-actions.tsx')

diff --git a/lib/rfqs-tech/vendor-table/vendors-table-toolbar-actions.tsx b/lib/rfqs-tech/vendor-table/vendors-table-toolbar-actions.tsx
new file mode 100644
index 00000000..864d0f4b
--- /dev/null
+++ b/lib/rfqs-tech/vendor-table/vendors-table-toolbar-actions.tsx
@@ -0,0 +1,84 @@
+"use client"
+
+import * as React from "react"
+import { type Table } from "@tanstack/react-table"
+ 
+import { MatchedVendorRow } from "@/config/vendorRfbColumnsConfig"
+import { InviteVendorsDialog } from "./invite-vendors-dialog"
+import { AddVendorDialog } from "./add-vendor-dialog"
+import { Button } from "@/components/ui/button"
+import { useToast } from "@/hooks/use-toast"
+
+interface VendorsTableToolbarActionsProps {
+  table: Table<MatchedVendorRow>
+  rfqId: number
+}
+
+export function VendorsTableToolbarActions({ table, rfqId }: VendorsTableToolbarActionsProps) {
+  const { toast } = useToast()
+  const fileInputRef = React.useRef<HTMLInputElement>(null)
+  
+  // 선택된 모든 행
+  const selectedRows = table.getFilteredSelectedRowModel().rows
+  
+  // 조건에 맞는 협력업체만 필터링
+  const eligibleVendors = React.useMemo(() => {
+    return selectedRows
+      .map(row => row.original)
+      .filter(vendor => !vendor.rfqVendorStatus || vendor.rfqVendorStatus === "INVITED")
+  }, [selectedRows])
+  
+  // 조건에 맞지 않는 협력업체 수
+  const ineligibleCount = selectedRows.length - eligibleVendors.length
+  
+  function handleImportClick() {
+    fileInputRef.current?.click()
+  }
+  
+  function handleInviteClick() {
+    // 조건에 맞지 않는 협력업체가 있다면 토스트 메시지 표시
+    if (ineligibleCount > 0) {
+      toast({
+        title: "일부 협력업체만 초대됩니다",
+        description: `선택한 ${selectedRows.length}개 중 ${eligibleVendors.length}개만 초대 가능합니다. 나머지 ${ineligibleCount}개는 초대 불가능한 상태입니다.`,
+        // variant: "warning",
+      })
+    }
+  }
+  
+  // 다이얼로그 표시 여부 - 적합한 협력업체가 1개 이상 있으면 표시
+  const showInviteDialog = eligibleVendors.length > 0
+  
+  return (
+    <div className="flex items-center gap-2">
+      {selectedRows.length > 0 && (
+        <>
+          {showInviteDialog ? (
+            <InviteVendorsDialog
+              vendors={eligibleVendors}
+              rfqId={rfqId}
+              onSuccess={() => table.toggleAllRowsSelected(false)}
+              onOpenChange={(open) => {
+                // 다이얼로그가 열릴 때만 경고 표시
+                if (open && ineligibleCount > 0) {
+                  handleInviteClick()
+                }
+              }}
+            />
+          ) : (
+            <Button 
+              variant="default" 
+              size="sm" 
+              disabled={true}
+              title="선택된 협력업체 중 초대 가능한 협력업체가 없습니다"
+            >
+              초대 불가
+            </Button>
+          )}
+        </>
+      )}
+      
+      <AddVendorDialog rfqId={rfqId} />
+    </div>
+  )
+}
\ No newline at end of file
-- 
cgit v1.2.3

