'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { login } from '@/api/auth'; import { useAuth } from '@/contexts/AuthContext'; import { getErrorMessage } from '@/lib/error-utils'; 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'), ]); }; export default function LoginPage() { const router = useRouter(); const { login: authLogin } = useAuth(); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [componentsLoaded, setComponentsLoaded] = useState(false); useEffect(() => { loadMaterialComponents() .then(() => setComponentsLoaded(true)) .catch((err) => { console.error('Error loading Material components:', err); setComponentsLoaded(true); }); }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(''); try { const response = await login({ email, password }); if (response.access) { localStorage.setItem('access_token', response.access); if (response.refresh) { localStorage.setItem('refresh_token', response.refresh); } if (response.user) { authLogin(response.access, response.user).catch(console.error); } else { authLogin(response.access).catch(console.error); } window.location.href = '/dashboard'; return; } else { setError('Ошибка: токен не получен'); setLoading(false); return; } } catch (err: any) { setError(getErrorMessage(err, 'Ошибка входа. Проверьте данные.')); setLoading(false); } }; if (!componentsLoaded) { return (
); } return (

Добро пожаловать! Войдите в аккаунт.

setEmail(e.target.value || '')} required style={{ width: '100%' }} />
setPassword(e.target.value || '')} required style={{ width: '100%' }} />
{error && (
{error}
)} {loading ? 'Вход...' : 'Войти'}
Забыли пароль? Нет аккаунта? Зарегистрироваться
); }