import React, { useEffect, useState } from "react"; import { Link, useNavigate } from "react-router-dom"; import api from "../../api/axios"; const Register = () => { const navigate = useNavigate(); const [email, setEmail] = useState(""); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); useEffect(() => { const token = localStorage.getItem("authToken"); if (token) navigate("/dashboard", { replace: true }); }, [navigate]); const onSubmit = async (e) => { e.preventDefault(); setError(""); setIsSubmitting(true); const normalizedEmail = email.trim().toLowerCase(); const normalizedUsername = username.trim(); const normalizedPassword = password; if (normalizedUsername.length < 3 || normalizedUsername.length > 50) { setError("Username must be between 3 and 50 characters"); setIsSubmitting(false); return; } if (normalizedPassword.length < 6) { setError("Password must be at least 6 characters"); setIsSubmitting(false); return; } try { const res = await api.post("/auth/register", { email: normalizedEmail, username: normalizedUsername, password: normalizedPassword, }); localStorage.setItem("authToken", res.data.token); localStorage.setItem( "authUser", JSON.stringify({ userId: res.data.userId, username: res.data.username, email: res.data.email, }), ); navigate("/dashboard"); } catch (err) { const fieldErrors = err?.response?.data?.errors ?? {}; const firstFieldError = Object.values(fieldErrors)[0]; const message = firstFieldError || err?.response?.data?.message || "Registration failed"; setError(message); } finally { setIsSubmitting(false); } }; return (
Register setEmail(e.target.value)} autoComplete="email" required /> setUsername(e.target.value)} autoComplete="username" minLength={3} maxLength={50} required /> setPassword(e.target.value)} autoComplete="new-password" minLength={6} required /> {error ?

{error}

: null}

Already have an account?{" "} Login

); }; export default Register;