'use client'; import IconLockDots from '@/components/icon/icon-lock-dots'; import IconMail from '@/components/icon/icon-mail'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import toast from 'react-hot-toast'; type User = { id: string; email: string; is_active: boolean }; const ComponentsAuthLoginForm = () => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(false); const router = useRouter(); const API = process.env.NEXT_PUBLIC_FASTAPI_URL; // e.g. http://localhost:8000 const submitForm = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { const res = await fetch(`${API}/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, password }), credentials: 'include', // cookie from FastAPI }); let data: any = null; try { data = await res.json(); } catch { // non-JSON error } if (!res.ok) { const msg = data?.detail || data?.message || 'Invalid credentials'; throw new Error(msg); } const user: User = data; toast.success(`Welcome ${user.email}`); router.push('/adminDashboard'); router.refresh(); } catch (err: any) { toast.error(err?.message ?? 'Login failed'); } finally { setLoading(false); } }; return (
setEmail(e.target.value)} placeholder="Enter Email" className="form-input ps-10 placeholder:text-white-dark" required />
setPassword(e.target.value)} required placeholder="Enter Password" className="form-input ps-10 placeholder:text-white-dark" minLength={8} />
); }; export default ComponentsAuthLoginForm;