import React, { useContext, useRef } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import ApplyToBody from '../utilities/apply-to-body'; import { TokenContext } from '../utilities/token-provider'; //utilities const validateEmail = require('../../../common/utilities/validate-email'); const Recover = props => { //history const navigate = useNavigate(); //context const authTokens = useContext(TokenContext); //misplaced? if (authTokens.accessToken) { navigate("/"); } //refs const emailRef = useRef(); const recoverRef = useRef(); return ( <>

Forgot Password

{ //on submit recoverRef.current.disabled = true; evt.preventDefault(); const [result, redirect] = await handleSubmit(emailRef.current.value); if (result) { alert(result); recoverRef.current.disabled = false; } //redirect if (redirect) { navigate("/"); } } }>
Return Home
); }; const handleSubmit = async (email) => { email = email.trim(); const err = handleValidation(email); if (err) { return [err]; } //send to the auth server const result = await fetch(`${process.env.AUTH_URI}/auth/recover`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email }) }); if (!result.ok) { const err = `${result.status}: ${await result.text()}`; console.error(err); return [err, false]; } return [await result.text(), true]; }; //returns an error message, or null on success const handleValidation = (email) => { if (!validateEmail(email)) { return 'invalid email'; } return null; }; export default Recover;