"use client"; import * as React from "react"; import { Table } from "@tanstack/react-table"; import { Button } from "@/components/ui/button"; import { Users, RefreshCw, FileDown, Plus } from "lucide-react"; import { RfqsLastView } from "@/db/schema"; import { RfqAssignPicDialog } from "./rfq-assign-pic-dialog"; import { CreateGeneralRfqDialog } from "./create-general-rfq-dialog"; // 추가 import { Badge } from "@/components/ui/badge"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; interface RfqTableToolbarActionsProps { table: Table; rfqCategory?: "general" | "itb" | "rfq"; onRefresh?: () => void; } export function RfqTableToolbarActions({ table, rfqCategory = "itb", onRefresh }: RfqTableToolbarActionsProps) { const [showAssignDialog, setShowAssignDialog] = React.useState(false); console.log(rfqCategory) // 선택된 행 가져오기 const selectedRows = table.getFilteredSelectedRowModel().rows; // 선택된 RFQ의 ID와 코드 추출 const selectedRfqData = React.useMemo(() => { const rows = selectedRows.map(row => row.original as RfqsLastView); const assignableRows = rows.filter(row => row.rfqCode?.startsWith("I") && (row.status === "RFQ 생성" || row.status === "구매담당지정") ); return { ids: rows.map(row => row.id), codes: rows.map(row => row.rfqCode || ""), statuses: rows.map(row => row.status || ""), // "I"로 시작하는 ITB만 필터링 itbCount: rows.filter(row => row.rfqCode?.startsWith("I")).length, totalCount: rows.length, // 담당자 지정 가능한 ITB (상태가 "RFQ 생성" 또는 "구매담당지정"인 ITB) assignableItbCount: assignableRows.length, assignableIds: assignableRows.map(row => row.id), assignableCodes: assignableRows.map(row => row.rfqCode || "") }; }, [selectedRows]); // 담당자 지정 가능 여부 체크 (상태가 "RFQ 생성" 또는 "구매담당지정"인 ITB가 있는지) const canAssignPic = selectedRfqData.assignableItbCount > 0; const handleAssignSuccess = () => { // 테이블 선택 초기화 table.toggleAllPageRowsSelected(false); // 데이터 새로고침 onRefresh?.(); }; const handleCreateGeneralRfqSuccess = () => { onRefresh?.(); // 테이블 데이터 새로고침 }; return ( <>
{/* 담당자 지정 버튼 - 선택된 항목 중 ITB가 있을 때만 표시 */} {selectedRfqData.totalCount > 0 && canAssignPic && (

선택한 ITB에 구매 담당자를 지정합니다

{selectedRfqData.assignableItbCount !== selectedRfqData.itbCount && (

전체 ITB {selectedRfqData.itbCount}건 중 {selectedRfqData.assignableItbCount}건만 지정 가능합니다

)}
)} {/* 선택된 항목 표시 */} {selectedRfqData.totalCount > 0 && (
선택된 항목: {selectedRfqData.totalCount}건 {selectedRfqData.totalCount !== selectedRfqData.itbCount && ( ITB {selectedRfqData.itbCount}건 (지정가능 {selectedRfqData.assignableItbCount}건) )}
)} {/* 기존 버튼들 */} {rfqCategory === "general" && ( )}
{/* 담당자 지정 다이얼로그 */} ); }