"use client" import * as React from "react" import { type DataTableRowAction } from "@/types/table" import { type ColumnDef } from "@tanstack/react-table" import { Ellipsis } from "lucide-react" import { Button } from "@/components/ui/button" import { Checkbox } from "@/components/ui/checkbox" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" interface ComboBoxOption { id: number codeGroupId: number code: string description: string remark: string | null sdq: number isActive?: boolean createdAt: Date updatedAt: Date projectId: number projectCode: string | null projectName: string | null } interface GetColumnsProps { setRowAction: React.Dispatch | null>> } /** * tanstack table 컬럼 정의 */ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef[] { // ---------------------------------------------------------------- // 1) select 컬럼 (체크박스) // ---------------------------------------------------------------- const selectColumn: ColumnDef = { 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" /> ), maxSize: 30, enableSorting: false, enableHiding: false, } // ---------------------------------------------------------------- // 2) actions 컬럼 (Dropdown 메뉴) // ---------------------------------------------------------------- const actionsColumn: ColumnDef = { id: "actions", enableHiding: false, cell: function Cell({ row }) { return ( setRowAction({ row, type: "update" })} > Edit setRowAction({ row, type: "delete" })} > Delete ⌘⌫ ) }, maxSize: 30, } // ---------------------------------------------------------------- // 3) 데이터 컬럼들 // ---------------------------------------------------------------- const dataColumns: ColumnDef[] = [ { accessorKey: "sdq", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "순서", type: "number", }, cell: ({ row }) => row.getValue("sdq") ?? "", minSize: 50 }, { accessorKey: "code", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "code", type: "text", }, cell: ({ row }) => row.getValue("code") ?? "", minSize: 80 }, { accessorKey: "description", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "description", type: "text", }, cell: ({ row }) => row.getValue("description") ?? "", minSize: 80 }, { accessorKey: "remark", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "remark", type: "text", }, cell: ({ row }) => row.getValue("remark") ?? "", minSize: 80 }, { accessorKey: "updatedAt", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "updated_at", type: "date", }, cell: ({ row }) => { const date = row.getValue("updatedAt") as Date return date ? new Date(date).toLocaleDateString('ko-KR') : "" }, minSize: 100 } ] // ---------------------------------------------------------------- // 4) 최종 컬럼 배열: select, dataColumns, actions // ---------------------------------------------------------------- return [ selectColumn, ...dataColumns, actionsColumn, ] }