import type { ColumnDef } from '@tanstack/react-table'; import { KeyRound, Pencil, Trash2 } from 'lucide-react'; import { RowActions } from '@/components/row-actions'; import { ToggleStatus } from '@/components/toggle-status'; import { formatCurrency } from '@/lib/utils'; export type Employee = { id: number; email: string; username: string; is_active: boolean; user_profile: { full_name: string; phone_number: string | null; } | null; employee: { join_date: string; employment_status: string; base_salary: number; } | null; }; function getEmploymentStatusLabel(status: string): string { const labels: Record = { full_time: 'Full Time', part_time: 'Part Time', contract: 'Kontrak', internship: 'Magang', resigned: 'Keluar', }; return labels[status] ?? status; } type CreateColumnsParams = { handleEdit: (employee: Employee) => void; handleDeleteClick: (employee: Employee) => void; handleResetPassword: (employee: Employee) => void; toggleActiveUrl: (id: number) => string; }; export function createEmployeeColumns( params: CreateColumnsParams, ): ColumnDef[] { const { handleEdit, handleDeleteClick, handleResetPassword, toggleActiveUrl, } = params; return [ { accessorKey: 'user_profile.full_name', id: 'full_name', header: () => Nama, cell: ({ row }) => { const employee = row.original; return (
{employee.user_profile?.full_name ?? '-'} {employee.email}
); }, }, { accessorKey: 'username', header: () => Username, cell: ({ row }) => ( {row.getValue('username') as string} ), }, { accessorKey: 'user_profile.phone_number', id: 'phone_number', header: () => No. Telepon, cell: ({ row }) => { const employee = row.original; return ( {employee.user_profile?.phone_number ?? '-'} ); }, }, { accessorKey: 'employee.employment_status', id: 'employment_status', header: () => Status, cell: ({ row }) => { const employee = row.original; return ( {getEmploymentStatusLabel( employee.employee?.employment_status ?? '', )} ); }, }, { accessorKey: 'is_active', header: () => Aktif, meta: { className: 'w-[80px] text-center', headerClassName: 'w-[80px] text-center', }, cell: ({ row }) => { const employee = row.original; return (
); }, }, { id: 'actions', header: () => Aksi, meta: { className: 'w-[120px] text-center', headerClassName: 'w-[120px] text-center', }, cell: ({ row }) => { const employee = row.original; return ( , onClick: () => handleEdit(employee), }, { label: 'Reset Kata Sandi', icon: ( ), onClick: () => handleResetPassword(employee), }, { label: 'Hapus', icon: ( ), onClick: () => handleDeleteClick(employee), }, ]} /> ); }, }, ]; }