import { useState, type FormEvent } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { api, type UserResponse } from '@/lib/api'; import { useAuth } from '@/context/AuthContext'; import { useToast } from '@/context/ToastContext'; import styles from './UsersPage.module.css'; export default function UsersPage() { const { user } = useAuth(); const { addToast } = useToast(); const queryClient = useQueryClient(); const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [role, setRole] = useState<'admin' | 'agent' | 'requester'>('requester'); const [editingUser, setEditingUser] = useState(null); const [editName, setEditName] = useState(''); const [editEmail, setEditEmail] = useState(''); const [editPassword, setEditPassword] = useState(''); const [editRole, setEditRole] = useState<'admin' | 'agent' | 'requester'>('requester'); const [editIsActive, setEditIsActive] = useState(true); const { data: users, isLoading } = useQuery({ queryKey: ['users'], queryFn: () => api.users.list(), enabled: user?.role === 'admin', }); const createMutation = useMutation({ mutationFn: () => api.users.create({ name, email, password, role }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['users'] }); setName(''); setEmail(''); setPassword(''); setRole('requester'); addToast('Usuário criado com sucesso!', 'success'); }, onError: (error: any) => { addToast(`Erro ao criar usuário: ${error.message}`, 'error'); }, }); const updateMutation = useMutation({ mutationFn: () => api.users.update(editingUser!.id, { name: editName, email: editEmail, password: editPassword || undefined, role: editRole, isActive: editIsActive, }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['users'] }); setEditingUser(null); addToast('Usuário atualizado com sucesso!', 'success'); }, onError: (error: any) => addToast(`Erro ao atualizar: ${error.message}`, 'error'), }); const deleteMutation = useMutation({ mutationFn: (id: number) => api.users.delete(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['users'] }); addToast('Usuário excluído com sucesso!', 'success'); }, onError: (error: any) => addToast(`Erro ao excluir: ${error.message}`, 'error'), }); function handleSubmit(e: FormEvent) { e.preventDefault(); createMutation.mutate(); } function handleEditSubmit(e: FormEvent) { e.preventDefault(); updateMutation.mutate(); } function openEdit(u: UserResponse) { setEditingUser(u); setEditName(u.name); setEditEmail(u.email); setEditPassword(''); setEditRole(u.role); setEditIsActive(u.isActive); } if (user?.role !== 'admin') { return (

Acesso Negado

Apenas administradores podem gerenciar usuários.

); } return (

Criar Novo Usuário

setName(e.target.value)} required />
setEmail(e.target.value)} required />
setPassword(e.target.value)} required minLength={8} />

Usuários Cadastrados

{isLoading ? (

Carregando...

) : (
{users?.map((u) => ( ))} {users?.length === 0 && ( )}
Nome E-mail Role Ativo Ações
{u.name} {u.email} {u.role} {u.isActive ? 'Sim' : 'Não'}
Nenhum usuário encontrado.
)}
{editingUser && (

Editar Usuário

setEditName(e.target.value)} required />
setEditEmail(e.target.value)} required />
setEditPassword(e.target.value)} minLength={8} />
setEditIsActive(e.target.checked)} />
)}
); }