'use client'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { api } from '@/lib/api'; import { Card, CardContent } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; import { Badge } from '@/components/ui/badge'; import { UserPlus } from 'lucide-react'; interface User { id: string; firstName: string; lastName: string; email: string; isActive: boolean; roles: Array<{ role: string }>; } const roleColors: Record = { ADMIN: 'bg-purple-100 text-purple-700', STAFF: 'bg-blue-100 text-blue-700', TECHNICIAN: 'bg-orange-100 text-orange-700', COLLECTOR: 'bg-green-100 text-green-700', }; export default function UsersSettingsPage() { const qc = useQueryClient(); const { data: users, isLoading } = useQuery({ queryKey: ['users'], queryFn: async () => { const res = await api.get('/api/v1/users'); return res.data; }, }); const toggleActive = useMutation({ mutationFn: async ({ id, isActive }: { id: string; isActive: boolean }) => { await api.patch(`/api/v1/users/${id}`, { isActive: !isActive }); }, onSuccess: () => qc.invalidateQueries({ queryKey: ['users'] }), }); return (

Users

Manage staff access and roles

{isLoading ? Array.from({ length: 4 }).map((_, i) => ( {[...Array(5)].map((_, j) => ( ))} )) : users?.map((u) => { const role = u.roles?.[0]?.role ?? 'STAFF'; return ( ); })}
Name Email Role Status
{u.firstName} {u.lastName} {u.email} {role} {u.isActive ? 'Active' : 'Inactive'}
); }