'use client'; import { useEffect, useState } from 'react'; import clsx from 'clsx'; import { urls, useConceptNavigation } from '@/app'; import { isAxiosError } from '@/backend/apiTransport'; import { SubmitButton } from '@/components/Control'; import { ErrorData, InfoError } from '@/components/InfoError'; import { TextInput } from '@/components/Input'; import { Loader } from '@/components/Loader'; import useQueryStrings from '@/hooks/useQueryStrings'; import { useResetPassword } from '../backend/useResetPassword'; export function Component() { const router = useConceptNavigation(); const token = useQueryStrings().get('token') ?? ''; const { validateToken, resetPassword, isPending, error: serverError } = useResetPassword(); const [isTokenValidating, setIsTokenValidating] = 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) { void resetPassword({ password: newPassword, token: token }).then(() => { router.replace(urls.home); router.push(urls.login); }); } } useEffect(() => { if (!isTokenValidating && !isPending) { void validateToken({ token: token }); setIsTokenValidating(true); } }, [token, validateToken, isTokenValidating, isPending]); if (isPending) { return ; } return (
{ setNewPassword(event.target.value); }} /> { setNewPasswordRepeat(event.target.value); }} /> {serverError ? : null} ); } // ====== Internals ========= function ServerError({ error }: { error: ErrorData }): React.ReactElement { if (isAxiosError(error) && error.response && error.response.status === 404) { return
Данная ссылка не действительна
; } return ; }