import { useState, useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; import fetchRegisterUser from "../features/fetch-async/fetchRegisterUser"; import { USER_NAME_UNDEFINED, USER_EMAIL_UNDEFINED, } from "../features/constants"; function RegisterPage() { const [login, setLogin] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [confirm, setConfirm] = useState(""); const [validationError, setValidationError] = useState(""); const dispatch = useDispatch(); const navigate = useNavigate(); const { userName, userEmail, loading, error } = useSelector( (state) => state.userDetails ); useEffect(() => { if (loading) return; if ( userName !== USER_NAME_UNDEFINED && userEmail !== USER_EMAIL_UNDEFINED ) { navigate("/"); } }, [loading, userName, userEmail, navigate]); const handleClear = () => { setLogin(""); setEmail(""); setPassword(""); setConfirm(""); setValidationError(""); }; const handleSubmit = (e) => { e.preventDefault(); setValidationError(""); if (login.length < 3) { setValidationError("Login must be at least 3 characters."); return; } if (password.length < 8) { setValidationError("Password must be at least 8 characters."); return; } if (password !== confirm) { setValidationError("Password and Confirm password do not match."); return; } const payload = { username: login, email: email, password: password, confirmPassword: confirm, }; dispatch(fetchRegisterUser(payload)); }; return (

Register

Create a new account by choosing a login, email and a strong password.

{(validationError || error) && (
{validationError || error}
)}
setLogin(e.target.value)} placeholder="Your login" className="w-full rounded-xl bg-slate-800/80 border border-slate-600 focus:border-indigo-400 focus:ring-2 focus:ring-indigo-500/60 focus:outline-none px-4 py-2.5 text-slate-100 placeholder:text-slate-500 text-sm" />
setEmail(e.target.value)} placeholder="Your email" className="w-full rounded-xl bg-slate-800/80 border border-slate-600 focus:border-indigo-400 focus:ring-2 focus:ring-indigo-500/60 focus:outline-none px-4 py-2.5 text-slate-100 placeholder:text-slate-500 text-sm" />
setPassword(e.target.value)} placeholder="Your password" className="w-full rounded-xl bg-slate-800/80 border border-slate-600 focus:border-indigo-400 focus:ring-2 focus:ring-indigo-500/60 focus:outline-none px-4 py-2.5 text-slate-100 placeholder:text-slate-500 text-sm" />
setConfirm(e.target.value)} placeholder="Repeat your password" className="w-full rounded-xl bg-slate-800/80 border border-slate-600 focus:border-indigo-400 focus:ring-2 focus:ring-indigo-500/60 focus:outline-none px-4 py-2.5 text-slate-100 placeholder:text-slate-500 text-sm" />
{(validationError || error) && ( )}
); } export default RegisterPage;