import { createRef, useEffect, useMemo, useState } from "react" import { Navigate } from "react-router-dom" import { authorizeLogin, isLoggedIn, LoginState, useClearToken } from "../authorization" export function Login() { var [username, setUsername] = useState("") var [password, setPassword] = useState("") var [loginState, setLoginState] = useState(isLoggedIn()) var usernameRef = createRef() var passwordRef = createRef() var login = (e: React.ChangeEvent) => { e.preventDefault() if (username.length === 0 || password.length === 0) { setLoginState(LoginState.Invalid) return } authorizeLogin(username, password, setLoginState) } useMemo(() => { if (loginState === LoginState.Invalid) { setLoginState(LoginState.No) } }, [username, password]) useEffect(() => { if (loginState === LoginState.Invalid) { usernameRef.current?.setCustomValidity("Invalid username or password") passwordRef.current?.setCustomValidity("Invalid username or password") } else { usernameRef.current?.setCustomValidity("") passwordRef.current?.setCustomValidity("") } }, [loginState]) return (
setUsername(e.target.value)} className="rounded-full outline-none bg-gray-800 focus:bg-gray-700 text-gray-400 focus:text-gray-200 px-3 py-1 mx-2 shadow-glow shadow-transparent invalid:outline-red-600 invalid:shadow-red-600 focus:outline-blue-500 focus:shadow-blue-500 transition-all" /> setPassword(e.target.value)} className="rounded-full outline-none bg-gray-800 focus:bg-gray-700 text-gray-400 focus:text-gray-200 px-3 py-1 mx-2 shadow-glow shadow-transparent invalid:outline-red-600 invalid:shadow-red-600 focus:outline-blue-500 focus:shadow-blue-500 transition-all" />
{ loginState === LoginState.Yes && }
) } export function Logout() { const loggedOut = useClearToken() return ( <> { loggedOut && } ) }