// create boilerplate for ResetPasswordView: import { Box, Button, Container, FormControl, FormHelperText, Input, Sheet, Snackbar, Typography, } from '@mui/joy' import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { API_URL } from './../../Config' const ForgotPasswordView = () => { const navigate = useNavigate() // const [showLoginSnackbar, setShowLoginSnackbar] = useState(false) // const [snackbarMessage, setSnackbarMessage] = useState('') const [resetStatusOk, setResetStatusOk] = useState(null) const [email, setEmail] = useState('') const [emailError, setEmailError] = useState(null) const validateEmail = email => { return !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(email) } const handleSubmit = async () => { if (!email) { return setEmailError('Email is required') } // validate email: if (validateEmail(email)) { setEmailError('Please enter a valid email address') return } if (emailError) { return } try { const response = await fetch(`${API_URL}/auth/reset`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ email: email }), }) if (response.ok) { setResetStatusOk(true) // wait 3 seconds and then redirect to login: } else { setResetStatusOk(false) } } catch (error) { setResetStatusOk(false) } } const handleEmailChange = e => { setEmail(e.target.value) if (validateEmail(e.target.value)) { setEmailError('Please enter a valid email address') } else { setEmailError(null) } } return ( logo {/* */} Done tick {/* HERE */} {resetStatusOk === null && (
Enter your email, and we'll send you a link to get into your account. { if (e.key === 'Enter') { e.preventDefault() handleSubmit() } }} /> {emailError}
)} {resetStatusOk != null && ( <> if there is an account associated with the email you entered, you will receive an email with instructions on how to reset your )} { if (resetStatusOk) { navigate('/login') } }} > {resetStatusOk ? 'Reset email sent, check your email' : 'Reset email failed, try again later'}
) } export default ForgotPasswordView