import AuthLayout from "@/components/layout/AuthLayout"; import { motion } from 'framer-motion'; import { useState } from 'react' import { loginInterface } from '@/types/userInterface' import { Link, useNavigate } from "react-router-dom"; import { sageService } from "@/service/sageService"; import { useToast } from "@/components/ui/use-toast"; import { Button } from '@/components/ui/buttonTsx'; import AuthInput from '@/components/ui/AuthInput'; import { Checkbox } from '@/components/ui/checkbox'; import { ArrowRight, Building2, Eye, EyeOff, Loader2, Lock, Mail, ShieldCheck } from "lucide-react"; import { useAppDispatch } from "@/store/hooks"; import { authMe } from "@/store/features/user/thunk"; export default function Login() { const dispatch = useAppDispatch(); const navigate = useNavigate(); const { toast } = useToast(); const [isLoading, setIsLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); const [loginData, setLoginData] = useState({ email: "", password: "", rememberMe: false }); const [errors, setErrors] = useState({}) as any; const [errorFom, setErrorForm] = useState('') const validateForm = () => { const newErrors = {} as any; if (!loginData.email) { newErrors.email = "L'adresse email est requise"; } else if (!/\S+@\S+\.\S+/.test(loginData.email)) { newErrors.email = "Format d'email invalide"; } if (!loginData.password) { newErrors.password = "Le mot de passe est requis"; } else if (loginData.password.length < 8) { newErrors.password = "Le mot de passe doit contenir au moins 8 caractères"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) return; setIsLoading(true); try { const response = await sageService.login(loginData); const access_token = response.access_token; const refresh_token = response.refresh_token; const expires_in = response.expires_in; if (access_token) { document.cookie = `access_token=${access_token}; path=/; max-age=${expires_in}`; document.cookie = `refresh_token=${refresh_token}; path=/; max-age=${expires_in * 2}`; try { await dispatch(authMe()).unwrap(); navigate("/home"); } catch (error) { setErrorForm("Impossible de vérifier votre accès. Veuillez réessayer."); } } else { setErrors("Email ou mot de passe incorrect") setErrorForm("Email ou mot de passe incorrect") } setIsLoading(false); } catch (err: any) { setErrors(`${err.response.data.detail || "Email ou mot de passe incorrect!"}`); setErrorForm(`${err.response.data.detail || "Email ou mot de passe incorrect!"}`); setIsLoading(false); } finally { setIsLoading(false); } }; const handleSSOLogin = (provider : any) => { toast({ title: "Redirection SSO", description: `Connexion avec ${provider} en cours...`, }); // Implementation would go here }; // Animation variants const containerVariants = { hidden: { opacity: 0 }, visible: { opacity: 1, transition: { staggerChildren: 0.1, delayChildren: 0.2 } } }; const itemVariants = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0, transition: { type: "spring", stiffness: 300, damping: 24 } } }; return ( {/* Mobile Logo */}
{/* Header */}

Bon retour

Connectez-vous pour accéder à votre espace

{/* SSO Buttons */}
ou avec email
{/* Login Form */} {errorFom && (
{errorFom}
)} setLoginData({...loginData, email: e.target.value})} error={errors.email} /> setLoginData({...loginData, password: e.target.value})} error={errors.password} rightElement={ } />
setLoginData({ ...loginData, rememberMe: checked === true }) } />
Mot de passe oublié ?
{/* Footer Trust Elements */}
Connexion chiffrée SSL • Données sécurisées

En vous connectant, vous acceptez nos{' '} Conditions {' '}et{' '} Politique de confidentialité.

) }