import React, {useContext, useEffect, useState} from 'react'; import Navbar from "./Navbar"; import {Link} from "react-router-dom"; import {Input} from "../custom"; import {AuthContext} from "../App"; import {login} from "../auth"; import {toast} from "react-toastify"; import {useForm} from "react-hook-form"; const background = require('../assets/background.png') function Login(props) { const {register, handleSubmit, errors} = useForm(); const [error, setError] = useState("") const [status, setStatus] = useState("Sign In") const {authState, authDispatch} = useContext(AuthContext) const [canLogin, setLogin] = useState(true) const [cooldown, setCooldown] = useState(0) function submit(data) { if (!canLogin) return; setError(""); setStatus("Loading.."); setLogin(false); (async () => { let {status, json} = await login(data.username.trim(), data.password.trim()) setCooldown(setTimeout(() => setLogin(true), 1000)); if (status !== 200) { setStatus("Sign In") return setError(json.reason) } toast.success("You have been logged in.") window.localStorage.setItem("authtoken", json.token) authDispatch({response: {token: json.token}}) })() } useEffect(() => { let loc = new URLSearchParams(props.location.search).get("return") if (authState.loggedIn) props.history.push("/" + (loc ? loc : "")) return () => clearTimeout(cooldown) }, [props, authState, cooldown]) return
Log In
{error &&
{error}
} Username Password
Reset Password
; } export default Login;