import React, { useState } from 'react'; import { Button, TextField, Typography, Snackbar, IconButton, } from '@mui/material'; import makeStyles from '@mui/styles/makeStyles'; import { useNavigate } from 'react-router-dom'; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import LoginLayout from './LoginLayout'; import { useTranslation } from '../common/components/LocalizationProvider'; import useQuery from '../common/util/useQuery'; import { snackBarDurationShortMs } from '../common/util/duration'; import { useCatch } from '../reactHelper'; const useStyles = makeStyles((theme) => ({ container: { display: 'flex', flexDirection: 'column', gap: theme.spacing(2), }, header: { display: 'flex', alignItems: 'center', }, title: { fontSize: theme.spacing(3), fontWeight: 500, marginLeft: theme.spacing(1), textTransform: 'uppercase', }, })); const ResetPasswordPage = () => { const classes = useStyles(); const navigate = useNavigate(); const t = useTranslation(); const query = useQuery(); const token = query.get('passwordReset'); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [snackbarOpen, setSnackbarOpen] = useState(false); const handleSubmit = useCatch(async (event) => { event.preventDefault(); let response; if (!token) { response = await fetch('/api/password/reset', { method: 'POST', body: new URLSearchParams(`email=${encodeURIComponent(email)}`), }); } else { response = await fetch('/api/password/update', { method: 'POST', body: new URLSearchParams(`token=${encodeURIComponent(token)}&password=${encodeURIComponent(password)}`), }); } if (response.ok) { setSnackbarOpen(true); } else { throw Error(await response.text()); } }); return (
navigate('/login')}> {t('loginReset')}
{!token ? ( setEmail(event.target.value)} /> ) : ( setPassword(event.target.value)} /> )}
navigate('/login')} autoHideDuration={snackBarDurationShortMs} message={!token ? t('loginResetSuccess') : t('loginUpdateSuccess')} />
); }; export default ResetPasswordPage;