// simplified-documents-table.tsx "use client" import React from "react" import type { DataTableAdvancedFilterField, DataTableFilterField, DataTableRowAction, } from "@/types/table" import { useDataTable } from "@/hooks/use-data-table" import { getUserVendorDocuments, getUserVendorDocumentStats } from "@/lib/vendor-document-list/enhanced-document-service" import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar" import { toast } from "sonner" import { Badge } from "@/components/ui/badge" import { FileText } from "lucide-react" import { Label } from "@/components/ui/label" import { DataTable } from "@/components/data-table/data-table" import { SimplifiedDocumentsView } from "@/db/schema" import { getSimplifiedDocumentColumns } from "./enhanced-doc-table-columns" import { EnhancedDocTableToolbarActions } from "./enhanced-doc-table-toolbar-actions" // DrawingKind별 설명 매핑 const DRAWING_KIND_INFO = { B3: { title: "B3 Vendor", description: "Approval-focused drawings progressing through Approval → Work stages", color: "bg-blue-50 text-blue-700 border-blue-200" }, B4: { title: "B4 GTT", description: "DOLCE-integrated drawings progressing through Pre → Work stages", color: "bg-green-50 text-green-700 border-green-200" }, B5: { title: "B5 FMEA", description: "Sequential drawings progressing through First → Second stages", color: "bg-purple-50 text-purple-700 border-purple-200" } } as const interface SimplifiedDocumentsTableProps { allPromises: Promise<[ Awaited>, Awaited> ]> onDataLoaded?: (data: SimplifiedDocumentsView[]) => void } export function SimplifiedDocumentsTable({ allPromises, onDataLoaded, }: SimplifiedDocumentsTableProps) { // React.use()로 Promise 결과를 받고, 그 다음에 destructuring const [documentResult, statsResult] = React.use(allPromises) const { data, pageCount, total, drawingKind, vendorInfo } = documentResult const { stats, totalDocuments, primaryDrawingKind } = statsResult // 데이터가 로드되면 콜백 호출 React.useEffect(() => { if (onDataLoaded && data) { onDataLoaded(data) } }, [data, onDataLoaded]) // 기존 상태들 const [rowAction, setRowAction] = React.useState | null>(null) const [expandedRows,] = React.useState>(new Set()) const columns = React.useMemo( () => getSimplifiedDocumentColumns({ setRowAction, }), [setRowAction] ) // ✅ SimplifiedDocumentsView에 맞게 필터 필드 업데이트 const advancedFilterFields: DataTableAdvancedFilterField[] = [ { id: "docNumber", label: "Document No", type: "text", }, // { // id: "vendorDocNumber", // label: "Vendor Document No", // type: "text", // }, { id: "title", label: "Document Title", type: "text", }, { id: "drawingKind", label: "Document Type", type: "select", options: [ { label: "B3", value: "B3" }, { label: "B4", value: "B4" }, { label: "B5", value: "B5" }, ], }, { id: "projectCode", label: "Project Code", type: "text", }, { id: "vendorName", label: "Vendor Name", type: "text", }, { id: "vendorCode", label: "Vendor Code", type: "text", }, { id: "pic", label: "PIC", type: "text", }, { id: "status", label: "Document Status", type: "select", options: [ { label: "Active", value: "ACTIVE" }, { label: "Inactive", value: "INACTIVE" }, { label: "Pending", value: "PENDING" }, { label: "Completed", value: "COMPLETED" }, ], }, { id: "firstStageName", label: "First Stage", type: "text", }, { id: "secondStageName", label: "Second Stage", type: "text", }, { id: "firstStagePlanDate", label: "First Planned Date", type: "date", }, { id: "firstStageActualDate", label: "First Actual Date", type: "date", }, { id: "secondStagePlanDate", label: "Second Planned Date", type: "date", }, { id: "secondStageActualDate", label: "Second Actual Date", type: "date", }, { id: "issuedDate", label: "Issue Date", type: "date", }, { id: "createdAt", label: "Created Date", type: "date", }, { id: "updatedAt", label: "Updated Date", type: "date", }, ] // ✅ B4 전용 필드들 (조건부로 추가) const b4FilterFields: DataTableAdvancedFilterField[] = [ { id: "cGbn", label: "C Category", type: "text", }, { id: "dGbn", label: "D Category", type: "text", }, { id: "degreeGbn", label: "Degree Category", type: "text", }, { id: "deptGbn", label: "Dept Category", type: "text", }, { id: "jGbn", label: "J Category", type: "text", }, { id: "sGbn", label: "S Category", type: "text", }, ] // B4 문서가 있는지 확인하여 B4 전용 필드 추가 const hasB4Documents = data.some(doc => doc.drawingKind === 'B4') const finalFilterFields = hasB4Documents ? [...advancedFilterFields, ...b4FilterFields] : advancedFilterFields const { table } = useDataTable({ data: data, columns, pageCount, enablePinning: true, enableAdvancedFilter: true, initialState: { sorting: [{ id: "createdAt", desc: true }], columnPinning: { right: ["actions"] }, }, getRowId: (originalRow) => String(originalRow.documentId), shallow: false, clearOnDefault: true, columnResizeMode: "onEnd", }) // 실제 데이터의 drawingKind 또는 주요 drawingKind 사용 const activeDrawingKind = drawingKind || primaryDrawingKind const kindInfo = activeDrawingKind ? DRAWING_KIND_INFO[activeDrawingKind] : null return (
{/* DrawingKind 정보 간단 표시 */} {kindInfo && (
{/* {kindInfo.title} {kindInfo.description} */}
{total} documents
)} {/* 테이블 */}
) }