/** * LoginPage.tsx * Página de autenticação — ponto de entrada da aplicação. */ import { useState, type FormEvent } from 'react'; import { useNavigate, Link } from 'react-router-dom'; import { useMutation } from '@tanstack/react-query'; import { api } from '@/lib/api'; import { useAuth } from '@/context/AuthContext'; import { useToast } from '@/context/ToastContext'; import styles from './LoginPage.module.css'; export default function LoginPage() { const navigate = useNavigate(); const { login } = useAuth(); const { addToast } = useToast(); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [showPass, setShowPass] = useState(false); const { mutate, isPending, isError, error } = useMutation({ mutationFn: () => api.auth.login({ email, password }), onSuccess: ({ token, user }) => { login(token, user); addToast('Login realizado com sucesso!', 'success'); navigate('/dashboard', { replace: true }); }, onError: (err: any) => { addToast(err.message || 'Erro ao realizar login', 'error'); } }); function handleSubmit(e: FormEvent) { e.preventDefault(); mutate(); } const errorMsg = isError && error instanceof Error ? error.message : null; return (
Central de Chamados
Não tem conta?{' '} Solicite acesso ao administrador