"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 { formatDateTime } from "@/lib/utils" 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" import { documentClassOptions } from "@/db/schema/documentClasses" 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: "optionCode", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "코드", type: "text", }, cell: ({ row }) => row.getValue("optionCode") ?? "", minSize: 80 }, { accessorKey: "optionValue", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "옵션 값", type: "text", }, cell: ({ row }) => row.getValue("optionValue") ?? "", minSize: 80 }, { accessorKey: "createdAt", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "생성일", type: "date", }, cell: ({ row }) => { const dateVal = row.getValue("createdAt") as Date return formatDateTime(dateVal, "KR") }, minSize: 80 } ] // ---------------------------------------------------------------- // 4) 최종 컬럼 배열: select, dataColumns, actions // ---------------------------------------------------------------- return [ selectColumn, ...dataColumns, actionsColumn, ] }