'use client'; import axios from 'axios'; import clsx from 'clsx'; import { useEffect, useState } from 'react'; import { useConceptNavigation } from '@/app/Navigation/NavigationContext'; import { urls } from '@/app/urls'; import { useResetPassword } from '@/backend/auth/useResetPassword'; import InfoError, { ErrorData } from '@/components/info/InfoError'; import { SubmitButton } from '@/components/ui/Control'; import { TextInput } from '@/components/ui/Input'; import Loader from '@/components/ui/Loader'; import useQueryStrings from '@/hooks/useQueryStrings'; export function Component() { const router = useConceptNavigation(); const token = useQueryStrings().get('token') ?? ''; const { validateToken, resetPassword, isPending, error: serverError } = useResetPassword(); const [isTokenValidated, setIsTokenValidated] = useState(false); const [newPassword, setNewPassword] = useState(''); const [newPasswordRepeat, setNewPasswordRepeat] = useState(''); const passwordColor = !!newPassword && !!newPasswordRepeat && newPassword !== newPasswordRepeat ? 'bg-warn-100' : 'clr-input'; const canSubmit = !!newPassword && !!newPasswordRepeat && newPassword === newPasswordRepeat; function handleSubmit(event: React.FormEvent) { event.preventDefault(); if (!isPending) { resetPassword( { password: newPassword, token: token }, () => { router.replace(urls.home); router.push(urls.login); } ); } } useEffect(() => { if (!isTokenValidated && !isPending) { validateToken({ token: token }); setIsTokenValidated(true); } }, [token, validateToken, isTokenValidated, isPending]); if (isPending) { return ; } return (
{ setNewPassword(event.target.value); }} /> { setNewPasswordRepeat(event.target.value); }} /> {serverError ? : null} ); } // ====== Internals ========= function ServerError({ error }: { error: ErrorData }): React.ReactElement { if (axios.isAxiosError(error) && error.response && error.response.status === 404) { return
Данная ссылка не действительна
; } return ; }