import { useState } from "react"; import { Link, useNavigate } from "react-router"; import { useAuth } from "../contexts/AuthContext"; const Login = () => { const [formData, setFormData] = useState({ username: "", password: "", }); const [errors, setErrors] = useState>({}); const [isLoading, setIsLoading] = useState(false); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value, })); // Clear error when user starts typing if (errors[name]) { setErrors((prev) => ({ ...prev, [name]: "", })); } }; const validateForm = () => { const newErrors: Record = {}; if (!formData.username.trim()) { newErrors.username = "Username is required"; } else if (formData.username.length < 3) { newErrors.username = "Username must be at least 3 characters"; } if (!formData.password) { newErrors.password = "Password is required"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const { login } = useAuth(); const navigate = useNavigate(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) return; setIsLoading(true); try { const result = await login(formData.username, formData.password); if (!result.success) { setErrors({ general: result.error || "Login failed. Please try again.", }); return; } // Redirect to home page on successful login navigate("/home"); } catch (error) { console.error("Login failed:", error); setErrors({ general: "Network error. Please try again." }); } finally { setIsLoading(false); } }; return (
{/* Header */}
M
Mirage

Sign in to your account

Or{" "} create a new account

{/* Form */}
{errors.general && (

{errors.general}

)}
{errors.username && (

{errors.username}

)}
{errors.password && (

{errors.password}

)}
); }; export default Login;