import "./loginAndSignUpPage.css"; import { useEffect, useState } from "react"; import api from "../api/axios"; import ButtonRotkehlchen from "../components/ButtonRotkehlchen"; import { useLocation, useNavigate } from "react-router-dom"; import { useAuth } from "../api/Auth"; type FormData = { username: string; email: string; password: string; }; function LoginAndSignUpPage({ signupProp }: { signupProp: boolean }) { const [signup, setSignup] = useState(signupProp); const [errorMessages, setErrorMessages] = useState<{ error: String; details: { message: string }[]; }>(); const location = useLocation(); const navigate = useNavigate(); const { setUserState } = useAuth(); const returnTo = new URLSearchParams(location.search).get("returnTo") || "/feed"; useEffect(() => { setSignup(signupProp); }, [signupProp]); const toggleLogin = (event: React.MouseEvent) => { event.preventDefault(); setErrorMessages(undefined); setSignup(!signup); }; const [formData, setFormData] = useState({ username: "", email: "", password: "", }); const onSubmit = async (event: React.FormEvent) => { event.preventDefault(); setErrorMessages(undefined); try { const response = signup ? await api.post("http://localhost:3001/api/user/register", { email: formData.email, username: formData.username, password: formData.password, }) : await api.post("http://localhost:3001/api/user/login", { username: formData.username, password: formData.password, }); const authHeader = response.headers["authorization"]; if (authHeader && authHeader.startsWith("Bearer ")) { const token = authHeader.substring(7); localStorage.setItem("token", token); } const refreshToken = response.headers["refresh-token"]; if (refreshToken) { localStorage.setItem("refreshToken", refreshToken); } await setUserState(); navigate(returnTo, { replace: true }); } catch (err: any) { setErrorMessages(err.response.data); } }; const handleChange = (event: React.ChangeEvent) => { const { name, value } = event.target; setFormData((prev) => ({ ...prev, [name]: value, })); }; return (
{signup ? "Sign Up" : "Login"}
icon username
{signup ? (
icon email
) : ( "" )}
icon password
{errorMessages && (
{errorMessages.details.map((detial, index) => (

{detial.message}

))}
)}
{signup ? "Already have an account? " : "Don't have an account yet? "} Click here {signup ? " to login." : " to sign up."}
); } export default LoginAndSignUpPage;