'use client'; import axios from 'axios'; import clsx from 'clsx'; import { useEffect, useMemo, useState } from 'react'; import { urls } from '@/app/urls'; import InfoError, { ErrorData } from '@/components/info/InfoError'; import SubmitButton from '@/components/ui/SubmitButton'; import TextInput from '@/components/ui/TextInput'; import DataLoader from '@/components/wrap/DataLoader'; import { useAuth } from '@/context/AuthContext'; import { useConceptNavigation } from '@/context/NavigationContext'; import useQueryStrings from '@/hooks/useQueryStrings'; import { IPasswordTokenData, IResetPasswordData } from '@/models/user'; function ProcessError({ error }: { error: ErrorData }): React.ReactElement { if (axios.isAxiosError(error) && error.response && error.response.status === 404) { return
Данная ссылка не действительна
; } else { return ; } } function PasswordChangePage() { const router = useConceptNavigation(); const token = useQueryStrings().get('token'); const { validateToken, resetPassword, loading, error, setError } = useAuth(); const [isTokenValid, setIsTokenValid] = useState(false); const [newPassword, setNewPassword] = useState(''); const [newPasswordRepeat, setNewPasswordRepeat] = useState(''); const passwordColor = useMemo(() => { if (!!newPassword && !!newPasswordRepeat && newPassword !== newPasswordRepeat) { return 'clr-warning'; } else { return 'clr-input'; } }, [newPassword, newPasswordRepeat]); const canSubmit = useMemo(() => { return !!newPassword && !!newPasswordRepeat && newPassword === newPasswordRepeat; }, [newPassword, newPasswordRepeat]); function handleSubmit(event: React.FormEvent) { event.preventDefault(); if (!loading) { const data: IResetPasswordData = { password: newPassword, token: token! }; resetPassword(data, () => { router.replace(urls.home); router.push(urls.login); }); } } useEffect(() => { setError(undefined); }, [newPassword, newPasswordRepeat, setError]); useEffect(() => { const data: IPasswordTokenData = { token: token ?? '' }; validateToken(data, () => setIsTokenValid(true)); }, [token, validateToken]); if (error) { return ; } return (
{ setNewPassword(event.target.value); }} /> { setNewPasswordRepeat(event.target.value); }} /> {error ? : null}
); } export default PasswordChangePage;