// 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 { getEnhancedDocumentsShip } from "../enhanced-document-service" import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar" import { toast } from "sonner" 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" interface SimplifiedDocumentsTableProps { promises: Promise<{ data: SimplifiedDocumentsView[], pageCount: number, total: number }> } export function SimplifiedDocumentsTable({ promises, }: SimplifiedDocumentsTableProps) { // React.use()로 Promise 결과를 받고, 그 다음에 destructuring const result = React.use(promises) const { data, pageCount, total } = result // 기존 상태들 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: "문서번호", type: "text", }, { id: "vendorDocNumber", label: "벤더 문서번호", type: "text", }, { id: "title", label: "문서제목", type: "text", }, { id: "drawingKind", label: "문서종류", type: "select", options: [ { label: "B3", value: "B3" }, { label: "B4", value: "B4" }, { label: "B5", value: "B5" }, ], }, { id: "projectCode", label: "프로젝트 코드", type: "text", }, { id: "vendorName", label: "벤더명", type: "text", }, { id: "vendorCode", label: "벤더 코드", type: "text", }, { id: "pic", label: "담당자", type: "text", }, { id: "status", label: "문서 상태", type: "select", options: [ { label: "활성", value: "ACTIVE" }, { label: "비활성", value: "INACTIVE" }, { label: "보류", value: "PENDING" }, { label: "완료", value: "COMPLETED" }, ], }, { id: "firstStageName", label: "1차 스테이지", type: "text", }, { id: "secondStageName", label: "2차 스테이지", type: "text", }, { id: "firstStagePlanDate", label: "1차 계획일", type: "date", }, { id: "firstStageActualDate", label: "1차 실제일", type: "date", }, { id: "secondStagePlanDate", label: "2차 계획일", type: "date", }, { id: "secondStageActualDate", label: "2차 실제일", type: "date", }, { id: "issuedDate", label: "발행일", type: "date", }, { id: "createdAt", label: "생성일", type: "date", }, { id: "updatedAt", label: "수정일", type: "date", }, ] // ✅ B4 전용 필드들 (조건부로 추가) const b4FilterFields: DataTableAdvancedFilterField[] = [ { id: "cGbn", label: "C 구분", type: "text", }, { id: "dGbn", label: "D 구분", type: "text", }, { id: "degreeGbn", label: "Degree 구분", type: "text", }, { id: "deptGbn", label: "Dept 구분", type: "text", }, { id: "jGbn", label: "J 구분", type: "text", }, { id: "sGbn", label: "S 구분", 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", }) // ✅ 행 액션 처리 (필요에 따라 구현) React.useEffect(() => { if (rowAction?.type === "view") { toast.info(`문서 조회: ${rowAction.row.docNumber}`) setRowAction(null) } else if (rowAction?.type === "edit") { toast.info(`문서 편집: ${rowAction.row.docNumber}`) setRowAction(null) } else if (rowAction?.type === "delete") { toast.error(`문서 삭제: ${rowAction.row.docNumber}`) setRowAction(null) } }, [rowAction]) return (
{/* ✅ 추가 툴바 컨텐츠 (필요시) */}
) }