diff options
Diffstat (limited to 'lib/tbe-tech/table/tbe-table-toolbar-actions.tsx')
| -rw-r--r-- | lib/tbe-tech/table/tbe-table-toolbar-actions.tsx | 68 |
1 files changed, 68 insertions, 0 deletions
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 |
