'use client'; /* IMPORT */ import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { CircleCheckBig, CircleX, Ellipsis, Handshake, OctagonAlert } from 'lucide-react'; import { DataTableColumnHeaderSimple } from '@/components/data-table/data-table-column-simple-header'; import { Dispatch, SetStateAction } from 'react'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { type ColumnDef } from '@tanstack/react-table'; import { type DataTableRowAction } from '@/types/table'; import { type RisksView } from '@/db/schema'; // ---------------------------------------------------------------------------------------------------- /* TYPES */ interface GetColumnsProps { setRowAction: Dispatch | null>>, }; // ---------------------------------------------------------------------------------------------------- /* FUNCTION FOR GETTING COLUMNS SETTING */ function getColumns({ setRowAction }: GetColumnsProps): ColumnDef[] { // [1] SELECT COLUMN - CHECKBOX 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" /> ), enableSorting: false, enableHiding: false, size: 40, }; // [2] SOURCE COLUMNS const sourceColumns: ColumnDef[] = [ { accessorKey: 'eventType', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('eventType'); return ( {value} ); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Risk Category', group: 'Risk Information', type: 'select', }, }, { accessorKey: 'vendorCode', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('vendorCode'); return (
{value}
); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Vendor Code', group: 'Risk Information', type: 'text', }, }, { accessorKey: 'vendorName', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('vendorName'); return (
{value}
); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Vendor Name', group: 'Risk Information', type: 'text', }, }, { accessorKey: 'businessNumber', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('businessNumber'); const digits = value.replace(/\D/g, ''); const formattedValue = digits.length === 10 ? `${digits.slice(0, 3)}-${digits.slice(3, 5)}-${digits.slice(5)}` : value; return (
{formattedValue}
); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Business Number', group: 'Risk Information', type: 'text', }, }, { accessorKey: 'provider', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('provider'); return ( {value} ); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Provider', group: 'Risk Information', type: 'text', }, }, { accessorKey: 'content', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('content') ?? '-'; return (
{value}
); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Risk Content', group: 'Risk Information', type: 'text', }, size: 100, }, { accessorKey: 'occuredAt', header: ({ column }) => ( ), cell: ({ row }) => { const date = row.getValue('occuredAt'); return (
{date ? new Date(date).toLocaleDateString('ko-KR') : '-'}
); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Occured At', group: 'Risk Information', type: 'date', }, }, ]; // [3] INPUT COLUMNS const inputColumns: ColumnDef[] = [ { accessorKey: 'eventStatus', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('eventStatus'); if (value) { return (
아니오
); } return (
); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Risk Not Cleared', group: 'Risk Management', type: 'text', }, }, { accessorKey: 'managerName', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('managerName') ?? '-'; return (
{value}
); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Procurement Manager Name', group: 'Risk Management', type: 'text', }, }, { accessorKey: 'adminComment', header: ({ column }) => ( ), cell: ({ row }) => { const value = row.getValue('adminComment') ?? '-'; return (
{value}
); }, enableSorting: true, enableHiding: false, meta: { excelHeader: 'Risk Manager Comment', group: 'Risk Management', type: 'text', }, size: 300, }, ]; // [4] ACTIONS COLUMN - DROPDOWN MENU WITH VIEW ACTION const actionsColumn: ColumnDef = { id: 'actions', enableHiding: false, cell: function Cell({ row }) { return ( setRowAction({ row, type: "update" })} className="cursor-pointer" > 리스크 관리 { // 신용정보 관리화면으로 이동 }} className="cursor-pointer" > 신용정보 확인 ) }, size: 80, }; return [ selectColumn, { id: 'riskSource', header: '리스크 정보', columns: sourceColumns, }, { id: 'riskInput', header: '리스크 관리', columns: inputColumns, }, actionsColumn, ]; }; // ---------------------------------------------------------------------------------------------------- /* EXPORT */ export default getColumns;