import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { tokenService } from '../services/TokenService'; import { loginApi, LoginRequest } from '../api/loginApi'; import './Login.css'; const Login = () => { const navigate = useNavigate(); const [formData, setFormData] = useState({ username: '', password: '', }); const [errors, setErrors] = useState({}); const [isSubmitting, setIsSubmitting] = useState(false); const [submitError, setSubmitError] = useState(''); const handleChange = (e) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value, })); // Clear error for this field when user starts typing if (errors[name]) { setErrors((prev) => ({ ...prev, [name]: '', })); } }; const validateForm = () => { const newErrors = {}; if (!formData.username.trim()) { newErrors.username = 'Username is required'; } if (!formData.password) { newErrors.password = 'Password is required'; } else if (formData.password.length < 6) { newErrors.password = 'Password must be at least 6 characters'; } return newErrors; }; const handleSubmit = async (e) => { e.preventDefault(); setSubmitError(''); const formErrors = validateForm(); if (Object.keys(formErrors).length > 0) { setErrors(formErrors); return; } setIsSubmitting(true); try { // Simulate API call await new Promise((resolve) => setTimeout(resolve, 1000)); let reqBod = new LoginRequest(); reqBod.username = formData.username; reqBod.password = formData.password; const response = await loginApi.login(reqBod); if (response) { const loginResult = response.data[0]; const token = loginResult.access_token; tokenService.setToken(token); tokenService.setUserId(loginResult.user_id); alert(`Login successful! Welcome, ${formData.username}`); navigate('/dashboard'); } else { console.error('Error logging in'); } // Reset form setFormData({ username: '', password: '' }); setErrors({}); } catch (error) { setSubmitError('Login failed. Please try again.'); console.error('Login error:', error); } finally { setIsSubmitting(false); } }; return (