diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-05-28 12:26:28 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-05-28 12:26:28 +0000 |
| commit | 36dd60ca6fce7712b35e6d7c1b9602710f442ada (patch) | |
| tree | 32c3f6e2eef53b565d545535b10b7980ad184883 /lib/rfqs-tech/cbe-table/cbe-table-toolbar-actions.tsx | |
| parent | 2caa8093ac616f14d48430ce2f485f805d6faa53 (diff) | |
(최겸) 기술영업 해양 rfq 개발v1
Diffstat (limited to 'lib/rfqs-tech/cbe-table/cbe-table-toolbar-actions.tsx')
| -rw-r--r-- | lib/rfqs-tech/cbe-table/cbe-table-toolbar-actions.tsx | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/rfqs-tech/cbe-table/cbe-table-toolbar-actions.tsx b/lib/rfqs-tech/cbe-table/cbe-table-toolbar-actions.tsx new file mode 100644 index 00000000..464bf988 --- /dev/null +++ b/lib/rfqs-tech/cbe-table/cbe-table-toolbar-actions.tsx @@ -0,0 +1,67 @@ +"use client" + +import * as React from "react" +import { type Table } from "@tanstack/react-table" +import { Download, Upload } from "lucide-react" +import { toast } from "sonner" + +import { exportTableToExcel } from "@/lib/export" +import { Button } from "@/components/ui/button" + + +import { VendorWithCbeFields } from "@/config/vendorCbeColumnsConfig" +import { InviteVendorsDialog } from "./invite-vendors-dialog" + +interface VendorsTableToolbarActionsProps { + table: Table<VendorWithCbeFields> + rfqId: number +} + +export function VendorsTableToolbarActions({ table, rfqId }: VendorsTableToolbarActionsProps) { + // 파일 input을 숨기고, 버튼 클릭 시 참조해 클릭하는 방식 + const fileInputRef = React.useRef<HTMLInputElement>(null) + + // 파일이 선택되었을 때 처리 + + function handleImportClick() { + // 숨겨진 <input type="file" /> 요소를 클릭 + fileInputRef.current?.click() + } + + const invitationPossibeVendors = React.useMemo(() => { + return table + .getFilteredSelectedRowModel() + .rows + .map(row => row.original) + .filter(vendor => vendor.commercialResponseStatus === null); + }, [table.getFilteredSelectedRowModel().rows]); + + return ( + <div className="flex items-center gap-2"> + {invitationPossibeVendors.length > 0 && + ( + <InviteVendorsDialog + vendors={invitationPossibeVendors} + rfqId={rfqId} + onSuccess={() => table.toggleAllRowsSelected(false)} + /> + ) + } + + <Button + variant="outline" + size="sm" + onClick={() => + exportTableToExcel(table, { + filename: "tasks", + excludeColumns: ["select"], + }) + } + 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 |
