"use client" import * as React from 'react'; import { type ColumnDef } from '@tanstack/react-table'; import { MoreHorizontal, Copy, Trash, Eye } from 'lucide-react'; import Link from 'next/link'; import { Checkbox } from '@/components/ui/checkbox'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { formatDate } from '@/lib/utils'; import { DataTableColumnHeaderSimple } from '@/components/data-table/data-table-column-simple-header'; import { type ApprovalTemplate } from '@/lib/approval-template/service'; import { type DataTableRowAction } from '@/types/table'; interface GetColumnsProps { setRowAction: React.Dispatch | null>> } export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef[] { return [ { id: 'select', header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value)} aria-label="Select all" className="translate-y-0.5" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Select row" className="translate-y-0.5" /> ), enableSorting: false, enableHiding: false, }, { accessorKey: 'name', header: ({ column }) => , cell: ({ row: _row }) => { const t = _row.original; return (
{t.name} {t.description && (
{t.description}
)}
); }, enableSorting: true, enableHiding: false, size: 220, }, { accessorKey: 'subject', header: ({ column }) => , cell: ({ getValue }) => { const subject = getValue() as string; return
{subject}
; }, enableSorting: true, size: 250, }, { accessorKey: 'category', header: ({ column }) => , cell: ({ getValue }) => { const category = getValue() as string | null; if (!category) return
-
; return {category}; }, enableSorting: true, size: 120, }, { accessorKey: 'createdAt', header: ({ column }) => , cell: ({ cell }) => { const date = cell.getValue() as Date; return
{formatDate(date)}
; }, enableSorting: true, size: 200, }, { accessorKey: 'updatedAt', header: ({ column }) => , cell: ({ cell }) => { const date = cell.getValue() as Date; return
{formatDate(date)}
; }, enableSorting: true, size: 200, }, { id: 'actions', cell: ({ row }) => { const template = row.original; return ( { setRowAction({ type: 'duplicate', row }); }} > { setRowAction({ type: 'delete', row }); }} className="text-destructive focus:text-destructive" > ); }, enableSorting: false, enableHiding: false, size: 80, }, ]; }