'use client' import type { CellContext, ColumnDef } from '@tanstack/react-table' import { HelpCircleIcon } from 'lucide-react' import { Avatar, AvatarFallback } from '@repo/ui/components/ui/avatar' import { Badge } from '@repo/ui/components/ui/badge' import { Checkbox } from '@repo/ui/components/ui/checkbox' import { Progress } from '@repo/ui/components/ui/progress' import { cn, initials } from '@repo/ui/lib/utils' import { DataTableColumnHeader } from '@/components/data-table/column-header' import { labels, statuses } from './data' // This type is used to define the shape of our data. // You can use a Zod schema here if you want. type Course = { id: string name: string } export type Enrollment = { id: string name: string course: Course status: string progress: string created_at: string } const formatted = new Intl.DateTimeFormat('pt-BR', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }) export const columns: ColumnDef[] = [ { id: 'select', header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value)} aria-label="Selecionar tudo" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Selecionar linha" /> ) }, { accessorKey: 'user', header: 'Colaborador', enableHiding: false, cell: ({ row }) => { const user = row.getValue('user') as { name: string; email: string } return (
{initials(user.name)}
  • {user.name}
  • {user.email}
) } }, { accessorKey: 'course', header: 'Curso', enableHiding: false, cell: ({ row }) => { const { name } = row.getValue('course') as { name: string } return ( {name} ) } }, { accessorKey: 'status', header: 'Status', enableHiding: false, cell: ({ row }) => { const s = row.getValue('status') as string const status = labels[s] ?? s const { icon: Icon, color } = statuses?.[s] ?? { icon: HelpCircleIcon } return ( {status} ) } }, { accessorKey: 'progress', header: 'Progresso', enableHiding: false, cell: ({ row }) => { const progress = row.getValue('progress') return (
{String(progress)}%
) } }, { accessorKey: 'created_at', header: ({ column }) => ( ), meta: { title: 'Matriculado em' }, enableSorting: true, enableHiding: true, cell: cellDate }, { accessorKey: 'started_at', header: ({ column }) => ( ), meta: { title: 'Iniciado em' }, enableSorting: true, enableHiding: true, cell: cellDate }, { accessorKey: 'completed_at', header: ({ column }) => ( ), meta: { title: 'Aprovado em' }, enableSorting: true, enableHiding: true, cell: cellDate }, { accessorKey: 'failed_at', header: ({ column }) => ( ), meta: { title: 'Reprovado em' }, enableSorting: true, enableHiding: true, cell: cellDate }, { accessorKey: 'canceled_at', header: ({ column }) => ( ), meta: { title: 'Cancelado em' }, enableSorting: true, enableHiding: true, cell: cellDate } ] function cellDate({ row: { original }, cell: { column } }: CellContext) { const accessorKey = column.columnDef.accessorKey as keyof TData const value = original?.[accessorKey] if (value) { return formatted.format(new Date(value as string)) } return <> }