From e0dfb55c5457aec489fc084c4567e791b4c65eb1 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Wed, 26 Mar 2025 00:37:41 +0000 Subject: 3/25 까지의 대표님 작업사항 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/vendor-document/table/doc-table-column.tsx | 150 +++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 lib/vendor-document/table/doc-table-column.tsx (limited to 'lib/vendor-document/table/doc-table-column.tsx') diff --git a/lib/vendor-document/table/doc-table-column.tsx b/lib/vendor-document/table/doc-table-column.tsx new file mode 100644 index 00000000..e53b03b9 --- /dev/null +++ b/lib/vendor-document/table/doc-table-column.tsx @@ -0,0 +1,150 @@ +"use client" + +import * as React from "react" +import { ColumnDef } from "@tanstack/react-table" +import { formatDate, formatDateTime } from "@/lib/utils" +import { Checkbox } from "@/components/ui/checkbox" +import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" +import { DataTableRowAction } from "@/types/table" +import { VendorDocumentsView } from "@/db/schema/vendorDocu" + +interface GetColumnsProps { + setRowAction: React.Dispatch | null>> +} + +export function getColumns({ + setRowAction, +}: GetColumnsProps): ColumnDef[] { + return [ + { + id: "select", + // Remove the "Select all" checkbox in header since we're doing single-select + header: () => Select, + cell: ({ row, table }) => ( + { + // If selecting this row + if (value) { + // First deselect all rows (to ensure single selection) + table.toggleAllRowsSelected(false) + // Then select just this row + row.toggleSelected(true) + // Trigger the same action that was in the "Select" button + setRowAction({ row, type: "select" }) + } else { + // Just deselect this row + row.toggleSelected(false) + } + }} + aria-label="Select row" + className="translate-y-0.5" + /> + ), + enableSorting: false, + enableHiding: false, + enableResizing: false, + size: 40, + minSize: 40, + maxSize: 40, + }, + + { + accessorKey: "docNumber", + header: ({ column }) => ( + + ), + cell: ({ row }) =>
{row.getValue("docNumber")}
, + meta: { + excelHeader: "Doc Number" + }, + enableResizing: true, + minSize: 100, + size: 160, + }, + { + accessorKey: "title", + header: ({ column }) => ( + + ), + cell: ({ row }) =>
{row.getValue("title")}
, + meta: { + excelHeader: "Doc title" + }, + enableResizing: true, + minSize: 100, + size: 160, + }, + { + accessorKey: "latestStageName", + header: ({ column }) => ( + + ), + cell: ({ row }) =>
{row.getValue("latestStageName")}
, + meta: { + excelHeader: "Latest Stage Name" + }, + enableResizing: true, + minSize: 100, + size: 160, + }, + { + accessorKey: "latestStagePlanDate", + header: ({ column }) => ( + + ), + cell: ({ cell }) => { + const value = cell.getValue(); + return value ? formatDate(value as Date) : ""; + }, meta: { + excelHeader: "Latest Stage Plan Date" + }, + enableResizing: true, + minSize: 100, + size: 160, + }, + { + accessorKey: "latestStageActualDate", + header: ({ column }) => ( + + ), + cell: ({ cell }) => { + const value = cell.getValue(); + return value ? formatDate(value as Date) : ""; + }, meta: { + excelHeader: "Latest Stage Actual Date" + }, + enableResizing: true, + minSize: 100, + size: 160, + }, + { + accessorKey: "latestRevision", + header: ({ column }) => ( + + ), + cell: ({ row }) =>
{row.getValue("latestRevision")}
, + meta: { + excelHeader: "Latest Revision" + }, + enableResizing: true, + minSize: 100, + size: 160, + }, + + { + accessorKey: "updatedAt", + header: ({ column }) => ( + + ), + cell: ({ cell }) => formatDateTime(cell.getValue() as Date), + meta: { + excelHeader: "updated At" + }, + enableResizing: true, + minSize: 120, + size: 180, + }, + // The "actions" column has been removed + ] +} \ No newline at end of file -- cgit v1.2.3