"use client" import * as React from "react" import { type Table } from "@tanstack/react-table" import { useRouter } from "next/navigation" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Mail, CheckCircle2, Loader, Award, RefreshCw } from "lucide-react" import { FinalRfqDetailView } from "@/db/schema" interface FinalRfqDetailTableToolbarActionsProps { table: Table rfqId?: number onRefresh?: () => void // 데이터 새로고침 콜백 } export function FinalRfqDetailTableToolbarActions({ table, rfqId, onRefresh }: FinalRfqDetailTableToolbarActionsProps) { const router = useRouter() // 선택된 행들 가져오기 const selectedRows = table.getFilteredSelectedRowModel().rows const selectedDetails = selectedRows.map((row) => row.original) const selectedCount = selectedRows.length // 상태 관리 const [isEmailSending, setIsEmailSending] = React.useState(false) const [isSelecting, setIsSelecting] = React.useState(false) // RFQ 발송 핸들러 (로직 없음) const handleBulkRfqSend = async () => { if (selectedCount === 0) { toast.error("발송할 RFQ를 선택해주세요.") return } setIsEmailSending(true) try { // TODO: 실제 RFQ 발송 로직 구현 await new Promise(resolve => setTimeout(resolve, 2000)) // 임시 딜레이 toast.success(`${selectedCount}개의 최종 RFQ가 발송되었습니다.`) // 선택 해제 table.toggleAllRowsSelected(false) // 데이터 새로고침 if (onRefresh) { onRefresh() } } catch (error) { console.error("RFQ sending error:", error) toast.error("최종 RFQ 발송 중 오류가 발생했습니다.") } finally { setIsEmailSending(false) } } // 최종 선정 핸들러 (로직 없음) const handleFinalSelection = async () => { if (selectedCount === 0) { toast.error("최종 선정할 벤더를 선택해주세요.") return } if (selectedCount > 1) { toast.error("최종 선정은 1개의 벤더만 가능합니다.") return } setIsSelecting(true) try { // TODO: 실제 최종 선정 로직 구현 await new Promise(resolve => setTimeout(resolve, 1500)) // 임시 딜레이 const selectedVendor = selectedDetails[0] toast.success(`${selectedVendor.vendorName}이(가) 최종 선정되었습니다.`) // 선택 해제 table.toggleAllRowsSelected(false) // 데이터 새로고침 if (onRefresh) { onRefresh() } // 계약서 페이지로 이동 (필요시) if (rfqId) { setTimeout(() => { toast.info("계약서 작성 페이지로 이동합니다.") // router.push(`/evcp/contracts/${rfqId}`) }, 1500) } } catch (error) { console.error("Final selection error:", error) toast.error("최종 선정 중 오류가 발생했습니다.") } finally { setIsSelecting(false) } } // 발송 가능한 RFQ 필터링 (DRAFT 상태) const sendableRfqs = selectedDetails.filter( detail => detail.finalRfqStatus === "DRAFT" ) const sendableCount = sendableRfqs.length // 선정 가능한 벤더 필터링 (견적 접수 상태) const selectableVendors = selectedDetails.filter( detail => detail.finalRfqStatus === "Quotation Received" ) const selectableCount = selectableVendors.length // 전체 벤더 중 견적 접수 완료된 벤더 수 const allVendors = table.getRowModel().rows.map(row => row.original) const quotationReceivedCount = allVendors.filter( vendor => vendor.finalRfqStatus === "Quotation Received" ).length return (
{/** 선택된 항목이 있을 때만 표시되는 액션들 */} {selectedCount > 0 && ( <> {/* RFQ 발송 버튼 */} {/* 최종 선정 버튼 */} )} {/* 정보 표시 (선택이 없을 때) */} {selectedCount === 0 && quotationReceivedCount > 0 && (
견적 접수 완료: {quotationReceivedCount}개 벤더
)} {/* 새로고침 버튼 */} {onRefresh && ( )}
) }