"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 rfqId: number } export function VendorsTableToolbarActions({ table, rfqId }: VendorsTableToolbarActionsProps) { const { toast } = useToast() const fileInputRef = React.useRef(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 (
{selectedRows.length > 0 && ( <> {showInviteDialog ? ( table.toggleAllRowsSelected(false)} onOpenChange={(open) => { // 다이얼로그가 열릴 때만 경고 표시 if (open && ineligibleCount > 0) { handleInviteClick() } }} /> ) : ( )} )}
) }