"use client" import * as React from "react" import type { DataTableAdvancedFilterField, DataTableFilterField, DataTableRowAction, } from "@/types/table" import { useDataTable } from "@/hooks/use-data-table" import { DataTable } from "@/components/data-table/data-table" import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar" import { getColumns } from "./projects-table-columns" import { getBidProjectLists } from "../service" import { BiddingProjects } from "@/db/schema" import { ProjectTableToolbarActions } from "./projects-table-toolbar-actions" import { ProjectSeriesDialog } from "./project-series-dialog" import { UpdateProjectSheet } from "./update-project-sheet" interface ItemsTableProps { promises: Promise< [ Awaited>, ] > } export function BidProjectsTable({ promises }: ItemsTableProps) { const [{ data, pageCount }] = React.use(promises) const [rowAction, setRowAction] = React.useState | null>(null) const columns = React.useMemo( () => getColumns({ setRowAction }), [setRowAction] ) /** * This component can render either a faceted filter or a search filter based on the `options` prop. * * @prop options - An array of objects, each representing a filter option. If provided, a faceted filter is rendered. If not, a search filter is rendered. * * Each `option` object has the following properties: * @prop {string} label - The label for the filter option. * @prop {string} value - The value for the filter option. * @prop {React.ReactNode} [icon] - An optional icon to display next to the label. * @prop {boolean} [withCount] - An optional boolean to display the count of the filter option. */ const filterFields: DataTableFilterField[] = [ ] /** * Advanced filter fields for the data table. * These fields provide more complex filtering options compared to the regular filterFields. * * Key differences from regular filterFields: * 1. More field types: Includes 'text', 'multi-select', 'date', and 'boolean'. * 2. Enhanced flexibility: Allows for more precise and varied filtering options. * 3. Used with DataTableAdvancedToolbar: Enables a more sophisticated filtering UI. * 4. Date and boolean types: Adds support for filtering by date ranges and boolean values. */ const advancedFilterFields: DataTableAdvancedFilterField[] = [ { id: "pjtType", label: "프로젝트 타입", type: "select", options: [ { label: "SHIP", value: "SHIP" }, { label: "HULL", value: "HULL" }, { label: "TOP", value: "TOP" }, ], }, { id: "pspid", label: "견적프로젝트번호", type: "text", // group: "Basic Info", }, { id: "projNm", label: "견적프로젝트명", type: "text", // group: "Basic Info", }, { id: "sector", label: "부문(S / M)", type: "text", }, { id: "kunnrNm", label: "선주명", type: "text", }, { id: "cls1Nm", label: "선급명", type: "text", }, { id: "ptypeNm", label: "선종명", type: "text", }, { id: "estmPm", label: "견적대표PM 성명", type: "text", }, { id: "createdAt", label: "Created At", type: "date", // group: "Metadata",a }, { id: "updatedAt", label: "Updated At", type: "date", // group: "Metadata", }, ] const { table } = useDataTable({ data, columns, pageCount, filterFields, enablePinning: true, enableAdvancedFilter: true, initialState: { sorting: [{ id: "createdAt", desc: true }], columnPinning: { right: ["actions"] }, }, getRowId: (originalRow) => String(originalRow.pspid), shallow: false, clearOnDefault: true, }) return ( <> setRowAction(null)} project={rowAction?.row.original ?? null} /> setRowAction(null)} project={rowAction?.row.original ?? null} /> ) }