import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { useNavigate } from 'react-router-dom'; import { useAuthStore } from '@/stores/auth'; import { formatErrorMessage } from '@/utils/apiErrorHandler'; import type { LoginRequest } from '@/services/api/auth'; import type { ApiError } from '@/types/api'; const loginSchema = z.object({ email: z.string().email('Email invalide'), password: z.string().min(1, 'Le mot de passe est requis'), remember_me: z.boolean().optional(), }); type LoginFormData = z.infer; export const LoginForm = () => { const navigate = useNavigate(); const { login: loginStore, isLoading, error } = useAuthStore(); const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(loginSchema), defaultValues: { email: '', password: '', remember_me: false, }, }); const onSubmit = async (data: LoginFormData) => { try { const loginRequest: LoginRequest = { email: data.email, password: data.password, remember_me: data.remember_me || false, }; await loginStore(loginRequest); // Redirection après succès navigate('/dashboard'); } catch (err) { // L'erreur est déjà gérée par le store console.error('Login error:', err); } }; return (

Connexion

{error && (
{formatErrorMessage(error as ApiError)}
)}
{errors.email && (

{errors.email.message}

)}
{errors.password && (

{errors.password.message}

)}
); };