"use client" import * as React from "react" import { gtcDocuments, type GtcDocumentWithRelations } from "@/db/schema/gtc" import type { DataTableAdvancedFilterField, DataTableFilterField, DataTableRowAction, } from "@/types/table" import { toSentenceCase } from "@/lib/utils" 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 { DataTableToolbar } from "@/components/data-table/data-table-toolbar" import type { getGtcDocuments, getProjectsForFilter, getUsersForFilter } from "@/lib/gtc-contract/service" import { getColumns } from "./gtc-documents-table-columns" import { GtcDocumentsTableToolbarActions } from "./gtc-documents-table-toolbar-actions" import { DeleteGtcDocumentsDialog } from "./delete-gtc-documents-dialog" import { GtcDocumentsTableFloatingBar } from "./gtc-documents-table-floating-bar" import { UpdateGtcDocumentSheet } from "./update-gtc-document-sheet" import { CreateGtcDocumentDialog } from "./create-gtc-document-dialog" import { CreateNewRevisionDialog } from "./create-new-revision-dialog" import { useRouter } from "next/navigation" interface GtcDocumentsTableProps { promises: Promise< [ Awaited>, Awaited>, Awaited> ] > } export function GtcDocumentsTable({ promises }: GtcDocumentsTableProps) { const [{ data, pageCount }, projects, users] = React.use(promises) const router = useRouter() const [rowAction, setRowAction] = React.useState | null>(null) const columns = React.useMemo( () => getColumns({ setRowAction , router}), [setRowAction, router] ) /** * Filter fields for the data table. */ const filterFields: DataTableFilterField[] = [ { id: "editReason", label: "Edit Reason", placeholder: "Filter by edit reason...", }, ] /** * Advanced filter fields for the data table. */ const advancedFilterFields: DataTableAdvancedFilterField[] = [ { id: "type", label: "Type", type: "multi-select", options: [ { label: "Standard", value: "standard" }, { label: "Project", value: "project" }, ], }, { id: "editReason", label: "Edit Reason", type: "text", }, { id: "project.name", label: "Project", type: "multi-select", options: projects.map((project) => ({ label: `${project.name} (${project.code})`, value: project.name, })), }, { id: "createdBy.name", label: "Created By", type: "multi-select", options: users.map((user) => ({ label: user.name, value: user.name, })), }, { id: "updatedBy.name", label: "Updated By", type: "multi-select", options: users.map((user) => ({ label: user.name, value: user.name, })), }, { id: "createdAt", label: "Created At", type: "date", }, { id: "updatedAt", label: "Updated At", type: "date", }, ] const { table } = useDataTable({ data, columns, pageCount, filterFields, enablePinning: true, enableAdvancedFilter: true, initialState: { sorting: [{ id: "updatedAt", desc: true }], columnPinning: { right: ["actions"] }, }, getRowId: (originalRow) => `${originalRow.id}`, shallow: false, clearOnDefault: true, }) return ( <> } > setRowAction(null)} gtcDocuments={rowAction?.row.original ? [rowAction?.row.original] : []} showTrigger={false} onSuccess={() => rowAction?.row.toggleSelected(false)} /> setRowAction(null)} gtcDocument={rowAction?.row.original ?? null} /> setRowAction(null)} originalDocument={rowAction?.row.original ?? null} /> {/* */} ) }