'use client'; import { useMemo } from 'react'; import type { ColumnDef } from '@tanstack/react-table'; import { Edit, RotateCcw } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { PERMISSIONS } from '@/constants/permissions'; import { usePermissions } from '@/hooks/usePermissions'; import type { AdministrationUser } from '@/types'; function formatDate(value?: string | null) { if (!value) return '-'; return new Intl.DateTimeFormat('en-IN', { day: '2-digit', month: 'short', year: 'numeric', }).format(new Date(value)); } interface UseUserColumnsParams { onEdit: (user: AdministrationUser) => void; onToggleStatus: (user: AdministrationUser) => void; pendingUserId?: number; } export function useUserColumns({ onEdit, onToggleStatus, pendingUserId, }: UseUserColumnsParams): ColumnDef[] { const { hasPermission } = usePermissions(); const canEdit = hasPermission(PERMISSIONS.USER.UPDATE); const canDelete = hasPermission(PERMISSIONS.USER.DELETE); return useMemo(() => { const columns: ColumnDef[] = [ { accessorKey: 'first_name', header: 'Name', cell: ({ row }) => ( {[row.original.first_name, row.original.last_name].filter(Boolean).join(' ') || row.original.username} ), }, { accessorKey: 'email', header: 'Email', }, { accessorKey: 'phone_number', header: 'Phone', cell: ({ row }) => row.original.phone_number || '-', }, { accessorKey: 'roles', header: 'Roles', cell: ({ row }) => (
{row.original.roles?.length ? ( row.original.roles.map((role) => ( {role.display_name || role.name} )) ) : ( - )}
), }, { accessorKey: 'created_at', header: 'Created', cell: ({ row }) => formatDate(row.original.created_at), }, { accessorKey: 'effective_status', header: 'Status', cell: ({ row }) => ( {row.original.effective_status} ), }, ]; if (!canEdit && !canDelete) return columns; columns.push({ id: 'actions', header: () =>
Actions
, cell: ({ row }) => { const user = row.original; return (
{canEdit ? ( ) : null} {canDelete ? ( ) : null}
); }, }); return columns; }, [canDelete, canEdit, onEdit, onToggleStatus, pendingUserId]); }