import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import { Skeleton } from "@/components/ui/skeleton"
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { RefreshCw, Download, MessageSquare, Clock, CheckCircle2, XCircle, AlertCircle } from "lucide-react"
import { formatDate } from "@/lib/utils"
interface VendorResponsesPanelProps {
attachment: any
responses: any[]
isLoading: boolean
onRefresh: () => void
}
export function VendorResponsesPanel({
attachment,
responses,
isLoading,
onRefresh
}: VendorResponsesPanelProps) {
const getStatusIcon = (status: string) => {
switch (status) {
case 'RESPONDED':
return
case 'NOT_RESPONDED':
return
case 'WAIVED':
return
case 'REVISION_REQUESTED':
return
default:
return
}
}
const getStatusBadgeVariant = (status: string) => {
switch (status) {
case 'RESPONDED':
return 'default'
case 'NOT_RESPONDED':
return 'secondary'
case 'WAIVED':
return 'outline'
case 'REVISION_REQUESTED':
return 'destructive'
default:
return 'secondary'
}
}
if (isLoading) {
return (
{Array.from({ length: 3 }).map((_, i) => (
))}
)
}
return (
{/* 헤더 */}
벤더 응답 현황: {attachment.originalFileName}
{attachment.attachmentType}
시리얼: {attachment.serialNo}
등록: {formatDate(attachment.createdAt)}
{attachment.responseStats && (
응답률: {attachment.responseStats.responseRate}%
)}
{/* 테이블 */}
{responses.length === 0 ? (
이 문서에 대한 벤더 응답 정보가 없습니다.
) : (
벤더
국가
응답 상태
리비전
요청일
응답일
벤더 코멘트
액션
{responses.map((response) => (
{response.vendorName}
{response.vendorCode}
{response.vendorCountry}
{getStatusIcon(response.responseStatus)}
{response.responseStatus}
현재: {response.currentRevision}
{response.respondedRevision && (
응답: {response.respondedRevision}
)}
{formatDate(response.requestedAt)}
{response.respondedAt ? formatDate(response.respondedAt) : '-'}
{response.vendorComment ? (
{response.vendorComment}
) : (
'-'
)}
{response.responseStatus === 'RESPONDED' && (
)}
))}
)}
)
}