import {useState} from "react"; import Button from "./basics/Button"; import type {LoginRequestDto} from "../api/dtos/LoginRequestDto"; import type {LoginResponseDto} from "../api/dtos/LoginResponseDto"; import {login} from "../api/points/AuthPoint"; import {getRecipeListUrl} from "../routes"; import {useNavigate} from "react-router-dom"; import PasswordField from "./basics/PasswordField"; import {ButtonType} from "./basics/BasicButtonDefinitions"; export default function LoginPage() { const [userName, setUserName] = useState(""); const [password, setPassword] = useState(""); const [errorMessage, setErrorMessage] = useState(null); const navigate = useNavigate(); /** * Login */ const executeLogin = async () => { const dto: LoginRequestDto = { userName, password, }; try { console.log("Trying to log in with " + dto.userName); const loginResponse: LoginResponseDto = await login(dto); localStorage.setItem("session", JSON.stringify(loginResponse)); console.log("Successfully logged in as " + loginResponse.userData?.userName); setErrorMessage(null); // navigate to recipe list after successful login navigate(getRecipeListUrl()); } catch (err: any) { console.error("Login failed:", err); setErrorMessage("Login fehlgeschlagen! Bitte überprüfe Benutzername und Passwort."); } }; /** * Catch key events in order to trigger login on enter */ const handleKeyDown = (event: React.KeyboardEvent) => { if (event.key === "Enter") { executeLogin(); } }; return (

Anmeldung

setUserName(e.target.value)} onKeyDown={handleKeyDown} /> {/* error message */} {errorMessage && (

{errorMessage}

)}
); }