summaryrefslogtreecommitdiff
path: root/lib/tech-vendor-candidates/table/candidates-table-toolbar-actions.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-06-23 09:00:56 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-06-23 09:00:56 +0000
commita75541e1a1aea596bfca2a435f39133b9b72f193 (patch)
tree1d78b9ea8f91416d8fc21602b245c7050c4e895e /lib/tech-vendor-candidates/table/candidates-table-toolbar-actions.tsx
parent96ba777cda69af8caf3a6e0e8bfc1aca5016fe58 (diff)
(최겸) 기술영업 벤더 후보관리 개발
Diffstat (limited to 'lib/tech-vendor-candidates/table/candidates-table-toolbar-actions.tsx')
-rw-r--r--lib/tech-vendor-candidates/table/candidates-table-toolbar-actions.tsx93
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/tech-vendor-candidates/table/candidates-table-toolbar-actions.tsx b/lib/tech-vendor-candidates/table/candidates-table-toolbar-actions.tsx
new file mode 100644
index 00000000..17462841
--- /dev/null
+++ b/lib/tech-vendor-candidates/table/candidates-table-toolbar-actions.tsx
@@ -0,0 +1,93 @@
+"use client"
+
+import * as React from "react"
+import { type Table } from "@tanstack/react-table"
+import { Download, FileDown, Upload } from "lucide-react"
+
+import { exportTableToExcel } from "@/lib/export"
+import { Button } from "@/components/ui/button"
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
+
+import { AddCandidateDialog } from "./add-candidates-dialog"
+import { DeleteCandidatesDialog } from "./delete-candidates-dialog"
+import { InviteCandidatesDialog } from "./invite-candidates-dialog"
+import { ImportVendorCandidatesButton } from "./import-button"
+import { exportVendorCandidateTemplate } from "./excel-template-download"
+import { VendorCandidatesWithVendorInfo } from "@/db/schema/vendors"
+
+
+interface CandidatesTableToolbarActionsProps {
+ table: Table<VendorCandidatesWithVendorInfo>
+}
+
+export function CandidatesTableToolbarActions({ table }: CandidatesTableToolbarActionsProps) {
+ const selectedRows = table.getFilteredSelectedRowModel().rows
+ const hasSelection = selectedRows.length > 0
+ const [refreshKey, setRefreshKey] = React.useState(0)
+
+ // Handler to refresh the table after import
+ const handleImportSuccess = () => {
+ // Trigger a refresh of the table data
+ setRefreshKey(prev => prev + 1)
+ }
+
+ return (
+ <div className="flex items-center gap-2">
+ {/* Show actions only when rows are selected */}
+ {hasSelection ? (
+ <>
+ {/* Invite dialog - new addition */}
+ <InviteCandidatesDialog
+ candidates={selectedRows.map((row) => row.original)}
+ onSuccess={() => table.toggleAllRowsSelected(false)}
+ />
+
+ {/* Delete dialog */}
+ <DeleteCandidatesDialog
+ candidates={selectedRows.map((row) => row.original)}
+ onSuccess={() => table.toggleAllRowsSelected(false)}
+ />
+ </>
+ ) : null}
+
+ {/* Add new candidate dialog */}
+ <AddCandidateDialog />
+
+ {/* Import Excel button */}
+ <ImportVendorCandidatesButton onSuccess={handleImportSuccess} />
+
+ {/* Export dropdown menu */}
+ <DropdownMenu>
+ <DropdownMenuTrigger asChild>
+ <Button variant="outline" size="sm" className="gap-2">
+ <Download className="size-4" aria-hidden="true" />
+ <span className="hidden sm:inline">Export</span>
+ </Button>
+ </DropdownMenuTrigger>
+ <DropdownMenuContent align="end">
+ <DropdownMenuItem
+ onClick={() => {
+ exportTableToExcel(table, {
+ filename: "vendor-candidates",
+ excludeColumns: ["select", "actions"],
+ useGroupHeader: false,
+ })
+ }}
+ >
+ <FileDown className="mr-2 h-4 w-4" />
+ <span>Export Current Data</span>
+ </DropdownMenuItem>
+ <DropdownMenuItem onClick={exportVendorCandidateTemplate}>
+ <FileDown className="mr-2 h-4 w-4" />
+ <span>Download Template</span>
+ </DropdownMenuItem>
+ </DropdownMenuContent>
+ </DropdownMenu>
+ </div>
+ )
+} \ No newline at end of file