'use client';
import { z as zod } from 'zod';
import { useState, Suspense } from 'react';
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import Link from '@mui/material/Link';
import Alert from '@mui/material/Alert';
import Stack from '@mui/material/Stack';
import IconButton from '@mui/material/IconButton';
import Typography from '@mui/material/Typography';
import LoadingButton from '@mui/lab/LoadingButton';
import InputAdornment from '@mui/material/InputAdornment';
import { paths } from 'src/routes/paths';
import { useRouter, useSearchParams } from 'src/routes/hooks';
import { RouterLink } from 'src/routes/components';
import { useBoolean } from 'src/hooks/use-boolean';
import { Iconify } from 'src/components/iconify';
import { Form, Field } from 'src/components/hook-form';
import { confirmPasswordReset } from 'src/auth/context/jwt';
// ----------------------------------------------------------------------
const ResetPasswordSchema = zod
.object({
newPassword: zod
.string()
.min(1, { message: 'Введите пароль!' })
.min(8, { message: 'Пароль должен содержать не менее 8 символов!' }),
newPasswordConfirm: zod.string().min(1, { message: 'Подтвердите пароль!' }),
})
.refine((data) => data.newPassword === data.newPasswordConfirm, {
message: 'Пароли не совпадают!',
path: ['newPasswordConfirm'],
});
// ----------------------------------------------------------------------
function ResetPasswordContent() {
const router = useRouter();
const searchParams = useSearchParams();
const token = searchParams.get('token');
const [errorMsg, setErrorMsg] = useState('');
const [successMsg, setSuccessMsg] = useState('');
const newPassword = useBoolean();
const newPasswordConfirm = useBoolean();
const methods = useForm({
resolver: zodResolver(ResetPasswordSchema),
defaultValues: { newPassword: '', newPasswordConfirm: '' },
});
const {
handleSubmit,
formState: { isSubmitting },
} = methods;
const onSubmit = handleSubmit(async (data) => {
if (!token) {
setErrorMsg('Ссылка для сброса отсутствует. Запросите новый сброс пароля.');
return;
}
try {
await confirmPasswordReset({
token,
newPassword: data.newPassword,
newPasswordConfirm: data.newPasswordConfirm,
});
setSuccessMsg('Пароль успешно изменён. Теперь вы можете войти с новым паролем.');
setErrorMsg('');
} catch (error) {
console.error(error);
const msg = error?.response?.data?.error?.message || error?.response?.data?.message || error?.response?.data?.detail || 'Не удалось сбросить пароль. Возможно, ссылка устарела — запросите новую.';
setErrorMsg(msg);
}
});
if (!token) {
return (
<>