'use client'; import { useState, useEffect, Suspense } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import { confirmPasswordReset } from '@/api/auth'; const loadMaterialComponents = async () => { await Promise.all([ import('@material/web/textfield/filled-text-field.js'), import('@material/web/button/filled-button.js'), import('@material/web/button/text-button.js'), ]); }; function ResetPasswordContent() { const router = useRouter(); const searchParams = useSearchParams(); const token = searchParams.get('token'); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(false); const [componentsLoaded, setComponentsLoaded] = useState(false); useEffect(() => { loadMaterialComponents().then(() => setComponentsLoaded(true)); }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!token) { setError('Отсутствует ссылка для сброса пароля. Запросите восстановление пароля снова.'); return; } if (password !== confirmPassword) { setError('Пароли не совпадают'); return; } setLoading(true); setError(''); try { await confirmPasswordReset(token, password, confirmPassword); setSuccess(true); } catch (err: any) { setError( err.response?.data?.error?.message || err.response?.data?.detail || 'Не удалось сменить пароль. Ссылка могла устареть — запросите новую.' ); } finally { setLoading(false); } }; if (!componentsLoaded) { return (
Загрузка...
Сброс пароля
Сброс пароля
Введите новый пароль
Загрузка...
} >