import type { ColumnDef } from '@tanstack/vue-table'; import { h } from 'vue'; import { DataTableColumnHeader } from '@/components/data-table'; import { Badge } from '@/components/ui/badge'; import { EmployeeAdvanceStatus } from '@/constants/employee-advance-status'; import type { EmployeeAdvanceListItem } from '@/types/employee-advance'; import DataTableActions from './data-table-actions.vue'; function statusVariant(status: string): 'default' | 'secondary' | 'destructive' | 'outline' { switch (status) { case EmployeeAdvanceStatus.APPROVED: return 'default'; case EmployeeAdvanceStatus.PAID: return 'secondary'; case EmployeeAdvanceStatus.REJECTED: return 'destructive'; default: return 'outline'; } } export function createColumns( authEmployeeId: number | null, onEdit: (employeeAdvance: EmployeeAdvanceListItem) => void, onReject: (employeeAdvance: EmployeeAdvanceListItem) => void, ): ColumnDef[] { return [ { accessorKey: 'created_at_formatted', enableSorting: true, header: () => h(DataTableColumnHeader, { title: 'Tanggal', column: 'created_at' }), }, { accessorKey: 'employee_name', enableSorting: false, header: () => 'Pegawai', }, { accessorKey: 'amount_formatted', enableSorting: true, header: () => h(DataTableColumnHeader, { title: 'Jumlah', column: 'amount' }), }, { accessorKey: 'description', enableSorting: true, header: () => h(DataTableColumnHeader, { title: 'Keterangan', column: 'description' }), }, { accessorKey: 'due_date_formatted', enableSorting: true, header: () => h(DataTableColumnHeader, { title: 'Jatuh Tempo', column: 'due_date' }), }, { accessorKey: 'status_label', enableSorting: true, header: () => h(DataTableColumnHeader, { title: 'Status', column: 'status' }), cell: ({ row }) => h( Badge, { variant: statusVariant(row.original.status) }, () => row.original.status_label, ), }, { accessorKey: 'rejection_reason', enableSorting: false, header: () => 'Alasan Penolakan', cell: ({ row }) => row.original.rejection_reason ?? '-', }, { id: 'actions', enableSorting: false, enableHiding: false, cell: ({ row }) => h(DataTableActions, { employeeAdvance: row.original, authEmployeeId, onEdit: () => onEdit(row.original), onReject: () => onReject(row.original), }), }, ]; }