import type { ColumnDef } from '@tanstack/react-table'; import { Pencil, Trash2, Users } from 'lucide-react'; import { RowActions } from '@/components/row-actions'; import { Badge } from '@/components/ui/badge'; import { index as enrollmentsIndex } from '@/routes/admin/manage/course-classes/enrollments'; import { formatAcademicTermLabel } from '@/types/academic-term'; import { ClassMethodLabels } from '@/types/course-class'; import type { CourseClass } from '@/types/course-class'; export type { CourseClass } from '@/types/course-class'; type CreateColumnsParams = { handleEdit: (courseClass: CourseClass) => void; handleDeleteClick: (courseClass: CourseClass) => void; canUpdate: boolean; canDelete: boolean; canViewEnrollments: boolean; }; export function createCourseClassColumns( params: CreateColumnsParams, ): ColumnDef[] { const { handleEdit, handleDeleteClick, canUpdate, canDelete, canViewEnrollments, } = params; const columns: ColumnDef[] = [ { accessorKey: 'course.name', header: () => Mata Kuliah, cell: ({ row }) => { const course = row.original.course; return course ? `${course.code} - ${course.name}` : '-'; }, }, { accessorKey: 'lecturer.user.profile.full_name', header: () => Dosen Pengampu, cell: ({ row }) => row.original.lecturer?.user?.profile?.full_name ?? '-', }, { accessorKey: 'academic_term.name', header: () => Periode, cell: ({ row }) => { const term = row.original.academic_term; return term ? formatAcademicTermLabel(term) : '-'; }, }, { accessorKey: 'method', header: () => Metode, meta: { className: 'w-[100px] text-center', headerClassName: 'w-[100px] text-center', }, cell: ({ row }) => { const method = row.getValue('method') as keyof typeof ClassMethodLabels | null; return (
{method ? ( {ClassMethodLabels[method]} ) : ( - )}
); }, }, { accessorKey: 'enrollments_count', header: () => Peserta, meta: { className: 'w-[100px] text-center', headerClassName: 'w-[100px] text-center', }, cell: ({ row }) => (
{row.original.enrollments_count}
), }, ]; if (canViewEnrollments || canUpdate || canDelete) { columns.push({ id: 'actions', header: () => Aksi, meta: { className: 'w-[130px] text-center', headerClassName: 'w-[130px] text-center', }, cell: ({ row }) => { const courseClass = row.original; return ( , show: canViewEnrollments, href: enrollmentsIndex.url(courseClass.id), }, { label: 'Edit', icon: , show: canUpdate, onClick: () => handleEdit(courseClass), }, { label: 'Hapus', icon: ( ), show: canDelete, onClick: () => handleDeleteClick(courseClass), }, ]} /> ); }, }); } return columns; }