"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 { Badge } from "@/components/ui/badge" 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 { incoterms } from "@/db/schema/procurementRFQ" 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: "code", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "코드", type: "text", }, cell: ({ row }) => row.getValue("code") ?? "", minSize: 80 }, { accessorKey: "description", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "설명", type: "text", }, cell: ({ row }) => row.getValue("description") ?? "", minSize: 80 }, { accessorKey: "isActive", enableResizing: true, header: ({ column }) => ( ), meta: { excelHeader: "상태", type: "boolean", }, cell: ({ row }) => { const isActive = row.getValue("isActive") as boolean return ( {isActive ? "활성" : "비활성"} ) }, 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, ] }