import {useAuth} from "Frontend/util/auth"; import {useState} from "react"; import {Link, useNavigate} from "react-router-dom"; import {Alert, Button, Card, Input, Spinner, Typography} from "@material-tailwind/react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faCircleInfo, faCircleXmark} from "@fortawesome/free-solid-svg-icons"; export default function LoginView() { const {state, login} = useAuth(); const [hasError, setError] = useState(false); const [loading, setLoading] = useState(false); const [username, setUsername] = useState(); const [password, setPassword] = useState(); const [url, setUrl] = useState(); const navigate = useNavigate(); if (state.user && url) { const path = new URL(url, document.baseURI).pathname; navigate(path, {replace: true}); } return (
{ hasError && } className="mb-4 bg-red-500" > Wrong username and/or password }
{ e.preventDefault(); if (typeof username === "string" && password != null) { setLoading(true); const {defaultUrl, error, redirectUrl} = await login(username, password); if (error) { setError(true); } else { setUrl(redirectUrl ?? defaultUrl ?? '/'); } setLoading(false); } }} > { setUsername(event.target.value); }} id="username" type="text" autoComplete="username" placeholder="" size="lg" className=" !border-t-blue-gray-200 focus:!border-t-gray-900" labelProps={{ className: "before:content-none after:content-none", }} crossOrigin="" //TODO: see https://github.com/creativetimofficial/material-tailwind/issues/427 /> { setPassword(event.target.value); }} id="current-password" type="password" autoComplete="current-password" placeholder="" size="lg" className=" !border-t-blue-gray-200 focus:!border-t-gray-900" labelProps={{ className: "before:content-none after:content-none", }} crossOrigin="" //TODO: see https://github.com/creativetimofficial/material-tailwind/issues/427 />
Forgot password?
); }