'use client'; import { useQuery } from '@tanstack/react-query'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Skeleton } from '@/components/ui/skeleton'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { UserPlus, Shield, User } from 'lucide-react'; import { api } from '@/lib/api'; import { format } from 'date-fns'; interface UserItem { id: string; firstName: string; lastName: string; email: string; isActive: boolean; createdAt: string; roleAssignments?: { role: string }[]; } const ROLE_COLORS: Record = { ADMIN: 'bg-purple-100 text-purple-700', STAFF: 'bg-blue-100 text-blue-700', TECHNICIAN: 'bg-orange-100 text-orange-700', COLLECTOR: 'bg-cyan-100 text-cyan-700', }; export default function UsersSettingsPage() { const { data, isLoading } = useQuery({ queryKey: ['users'], queryFn: async () => (await api.get('/api/v1/users')).data, }); const users: UserItem[] = Array.isArray(data) ? data : (data?.data ?? []); return (

User Management

Staff accounts and role assignments

Name Email Roles Status Joined {isLoading ? ( Array.from({ length: 5 }).map((_, i) => ( {Array.from({ length: 5 }).map((_, j) => ( ))} )) ) : users.length === 0 ? ( No users found ) : ( users.map((u) => { const roles = u.roleAssignments?.map(r => r.role) ?? []; return ( {u.firstName} {u.lastName} {u.email}
{roles.length === 0 ? No role : roles.map(r => ( {r} ))}
{u.isActive ? 'Active' : 'Inactive'} {format(new Date(u.createdAt), 'MMM d, yyyy')}
); }) )}
); }