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

---
 lib/tbe-tech/table/tbe-table-toolbar-actions.tsx | 68 ++++++++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 lib/tbe-tech/table/tbe-table-toolbar-actions.tsx

(limited to 'lib/tbe-tech/table/tbe-table-toolbar-actions.tsx')

diff --git a/lib/tbe-tech/table/tbe-table-toolbar-actions.tsx b/lib/tbe-tech/table/tbe-table-toolbar-actions.tsx
new file mode 100644
index 00000000..d3502032
--- /dev/null
+++ b/lib/tbe-tech/table/tbe-table-toolbar-actions.tsx
@@ -0,0 +1,68 @@
+"use client"
+
+import * as React from "react"
+import { type Table } from "@tanstack/react-table"
+import { Download } from "lucide-react"
+import { toast } from "sonner"
+import { useRouter } from "next/navigation"
+
+import { exportTableToExcel } from "@/lib/export"
+import { Button } from "@/components/ui/button"
+
+import { InviteVendorsDialog } from "@/lib/rfqs-tech/tbe-table/invite-vendors-dialog"
+import { VendorWithTbeFields } from "@/config/vendorTbeColumnsConfig"
+
+interface VendorsTableToolbarActionsProps {
+  table: Table<VendorWithTbeFields>
+  rfqId: number
+}
+
+export function VendorsTableToolbarActions({ table, rfqId }: VendorsTableToolbarActionsProps) {
+  const router = useRouter()
+
+  const invitationPossibleVendors = React.useMemo(() => {
+    const selectedRows = table.getSelectedRowModel().rows;
+    const vendors = selectedRows.map(row => row.original);
+    
+    const rfqIds = new Set(vendors.map(vendor => vendor.rfqId));
+    if (rfqIds.size > 1) {
+      toast.error("동일한 rfq에 대해 초대가 가능합니다");
+      return [];
+    }
+
+    return vendors.filter(vendor => vendor.technicalResponseStatus === null);
+  }, [table.getSelectedRowModel().rows]);
+  
+  const selectedRfqId = invitationPossibleVendors[0]?.rfqId ?? 0;
+  console.log("selectedRfqId", selectedRfqId)
+  
+  return (
+    <div className="flex items-center gap-2">
+      {invitationPossibleVendors.length > 0 && (
+        <InviteVendorsDialog
+          vendors={invitationPossibleVendors}
+          rfqId={selectedRfqId}
+          onSuccess={() => {
+            table.toggleAllRowsSelected(false);
+            router.refresh();
+          }}
+          showTrigger={true}
+        />
+      )}
+      <Button
+        variant="outline"
+        size="sm"
+        onClick={() =>
+          exportTableToExcel(table, {
+            filename: "tasks",
+            excludeColumns: ["select", "actions"],
+          })
+        }
+        className="gap-2"
+      >
+        <Download className="size-4" aria-hidden="true" />
+        <span className="hidden sm:inline">Export</span>
+      </Button>
+    </div>
+  )
+}
\ No newline at end of file
-- 
cgit v1.2.3

