import { Alert, Box, Button, CircularProgress, TextField, Typography, } from "@mui/material"; import React, { useEffect, useRef, useState } from "react"; import { useLocation } from "react-router-dom"; import { AuthApi, CheckResetTokenResponse } from "../../api/AuthApi"; import { PasswordInput } from "../../widgets/PasswordInput"; import { AuthSingleMessage } from "../../widgets/AuthSingleMessage"; import { ServerApi } from "../../api/ServerApi"; export function ResetPasswordRoute(): React.ReactElement { const [error, setError] = React.useState(null); const { hash } = useLocation(); const token = hash.substring(1); const [info, setInfo] = React.useState(null); const checkedToken = useRef(null); useEffect(() => { (async () => { if (token === checkedToken.current) return; checkedToken.current = token; try { setError(null); const info = await AuthApi.CheckResetPasswordToken(token); setInfo(info); } catch (e) { console.error(e); setError( "Echec de validation du jeton de réinitialisation de mot de passe!" ); } })(); }); if (error) return ( {error} ); if (info === null) return ( <> ); return ; } function ResetPasswordForm(p: { token: string; info: CheckResetTokenResponse; }): React.ReactElement { const [error, setError] = React.useState(null); const [loading, setLoading] = React.useState(false); const [success, setSuccess] = React.useState(false); const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const canSubmit = ServerApi.CheckPassword(password) === null && password === confirmPassword; const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); if (!canSubmit) return; setLoading(true); try { await AuthApi.ResetPassword(p.token, password); setSuccess(true); } catch (e) { console.error(e); setError("Echec de la réinitialisation du mot de passe !"); } setLoading(false); }; if (loading) return ( <> ); if (success) return ( ); return ( <> {error && ( {error} )} Bonjour {p.info.name}, veuillez définir votre nouveau mot de passe : { setPassword(n); }} /> setConfirmPassword(e.target.value)} label="Confirmer le mot de passe" type="password" id="password" autoComplete="current-password" /> ); }