'use client'; import { useState } from 'react'; import { Button } from '@/components/ui/button'; import GoogleIcon from '../../../../public/icons/google.svg'; import { InputField } from '@/components/ui/inputfield'; import { useAuthContext } from '@/lib/contexts/Auth.context'; import { useRouter } from 'next/navigation'; export default function LoginForm({ redirectTo }: { redirectTo?: string }) { const API_URL = process.env.NEXT_PUBLIC_API_URL; const [errors, setErrors] = useState({}); const [loading, setLoading] = useState(false); const { setUser } = useAuthContext(); const router = useRouter(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setErrors({}); const formData = new FormData(e.currentTarget); const emailOrUsername = formData.get('emailOrUsername')?.toString() || ''; const password = formData.get('password')?.toString() || ''; const newErrors: any = {}; if (!emailOrUsername) newErrors.emailOrUsername = 'Введите никнейм или email'; if (!password) newErrors.password = 'Введите пароль'; if (Object.keys(newErrors).length > 0) { setErrors(newErrors); setLoading(false); return; } const body = new URLSearchParams(); body.append('username', emailOrUsername); body.append('password', password); try { const res = await fetch(`${API_URL}/api/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: body.toString(), credentials: 'include', }); if (!res.ok) { setErrors({ general: 'Неверный логин или пароль' }); } else { const meRes = await fetch(`${API_URL}/api/me`, { credentials: 'include', }); if (!meRes.ok) throw new Error('Failed to fetch user'); const meData = await meRes.json(); setUser(meData.authenticated ? meData.user : null); if (redirectTo) router.push(redirectTo); } } catch (err) { setErrors({ general: 'Ошибка при авторизации' }); } finally { setLoading(false); } }; return (
{errors.emailOrUsername && (

{errors.emailOrUsername}

)}
{!errors.password && errors.general && (

{errors.general}

)}
); }