"use client"; import * as React from "react"; import { Table } from "@tanstack/react-table"; import { Button } from "@/components/ui/button"; import { Users, RefreshCw, FileDown, Plus, Edit, Trash2 } from "lucide-react"; import { RfqsLastView } from "@/db/schema"; import { RfqAssignPicDialog } from "./rfq-assign-pic-dialog"; import { CreateGeneralRfqDialog } from "./create-general-rfq-dialog"; // 추가 import { UpdateGeneralRfqDialog } from "./update-general-rfq-dialog"; // 수정용 import { DeleteRfqDialog } from "./delete-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); const [showUpdateDialog, setShowUpdateDialog] = React.useState(false); const [showDeleteDialog, setShowDeleteDialog] = React.useState(false); const [selectedRfqForUpdate, setSelectedRfqForUpdate] = React.useState(null); 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 === "구매담당지정") ); // 수정 가능한 RFQ (general 카테고리에서 RFQ 생성 상태인 항목, 단일 선택만) const updatableRfq = rfqCategory === "general" && rows.length === 1 && rows[0].status === "RFQ 생성" ? rows[0] : null; // ANFNR이 있는 RFQ만 필터링 (삭제 가능한 RFQ) const deletableRows = rows.filter(row => row.ANFNR && row.ANFNR.trim() !== ""); 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 || ""), // 수정 가능한 RFQ 정보 updatableRfq: updatableRfq, canUpdate: updatableRfq !== null, // 삭제 가능한 RFQ 정보 deletableRows: deletableRows, deletableCount: deletableRows.length, canDelete: deletableRows.length > 0, }; }, [selectedRows, rfqCategory]); // 담당자 지정 가능 여부 체크 (상태가 "RFQ 생성" 또는 "구매담당지정"인 ITB가 있는지) const canAssignPic = selectedRfqData.assignableItbCount > 0; const handleAssignSuccess = () => { // 테이블 선택 초기화 table.toggleAllPageRowsSelected(false); // 데이터 새로고침 onRefresh?.(); }; const handleCreateGeneralRfqSuccess = () => { onRefresh?.(); // 테이블 데이터 새로고침 }; const handleUpdateGeneralRfqSuccess = () => { // 테이블 선택 초기화 table.toggleAllPageRowsSelected(false); // 데이터 새로고침 onRefresh?.(); }; const handleUpdateClick = () => { if (selectedRfqData.updatableRfq) { setSelectedRfqForUpdate(selectedRfqData.updatableRfq.id); setShowUpdateDialog(true); } }; const handleDeleteSuccess = () => { // 테이블 선택 초기화 table.toggleAllPageRowsSelected(false); // 데이터 새로고침 onRefresh?.(); }; return ( <>
{/* 담당자 지정 버튼 - 선택된 항목 중 ITB가 있을 때만 표시 */} {selectedRfqData.totalCount > 0 && canAssignPic && (

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

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

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

)}
)} {/* RFQ 삭제 버튼 - ANFNR이 있는 RFQ가 선택된 경우에만 활성화 */} {selectedRfqData.totalCount > 0 && selectedRfqData.canDelete && (

선택한 RFQ를 삭제합니다 (ANFNR이 있는 RFQ만 삭제 가능)

{selectedRfqData.deletableCount !== selectedRfqData.totalCount && (

전체 {selectedRfqData.totalCount}건 중 {selectedRfqData.deletableCount}건만 삭제 가능합니다

)}
)} {/* 선택된 항목 표시 */} {selectedRfqData.totalCount > 0 && (
선택된 항목: {selectedRfqData.totalCount}건 {selectedRfqData.totalCount !== selectedRfqData.itbCount && ( ITB {selectedRfqData.itbCount}건 (지정가능 {selectedRfqData.assignableItbCount}건) )}
)} {/* 기존 버튼들 */} {rfqCategory === "general" && ( <> {/* 일반견적 수정 버튼 - 선택된 항목이 1개이고 RFQ 생성 상태일 때만 활성화 */} {selectedRfqData.canUpdate && ( )} )} {/* */}
{/* 담당자 지정 다이얼로그 */} {/* 일반견적 수정 다이얼로그 */} {/* RFQ 삭제 다이얼로그 */} ); }