'use client'; import IconLockDots from '@/components/icon/icon-lock-dots'; import IconMail from '@/components/icon/icon-mail'; import IconEye from '@/components/icon/icon-eye'; import { useRouter } from 'next/navigation'; import React, { useState } from 'react'; import axios from 'axios'; import Cookies from 'universal-cookie'; const cookies = new Cookies(); const LoginForm = () => { const router = useRouter(); // ✅ Single state for form values const [formData, setFormData] = useState({ email: '', password: '', }); // ✅ State for loading and errors const [loading, setLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); const [errors, setErrors] = useState<{ email?: string; password?: string }>({}); // Generic handler for inputs const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value, })); // Clear error when user starts typing setErrors((prev) => ({ ...prev, [name]: '', })); }; // Validation const validate = () => { const newErrors: { email?: string; password?: string } = {}; if (!formData.email.trim()) { newErrors.email = 'Email is required'; } if (!formData.password.trim()) { newErrors.password = 'Password is required'; } return newErrors; }; const submitForm = async (e: React.FormEvent) => { e.preventDefault(); const validationErrors = validate(); if (Object.keys(validationErrors).length > 0) { setErrors(validationErrors); return; } setLoading(true); try { const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3000/api/'; const response = await axios.post(`${baseUrl}auth/login`, formData); if (response.data.success && response.data.data?.token) { cookies.set('token', response.data.data.token, { path: '/' }); cookies.set('user', JSON.stringify(response.data.data.user), { path: '/' }); router.push('/'); } } catch (error: any) { console.error('Login error', error); setErrors({ email: error.response?.data?.message || 'Invalid email or password', password: '', }); } finally { setLoading(false); } }; return (
{errors.email && (

{errors.email}

)}
{errors.password && (

{errors.password}

)}
); }; export default LoginForm;