import React, { useState } from "react"; import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18n-lite"; import { useAuth } from "../context/AuthContext"; import { getApiErrorMessage } from "../api/errors"; function AuthForm({ isLogin, onToggle }: { isLogin: boolean; onToggle: () => void }) { const { t } = useTranslation(); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); const { login, register } = useAuth(); const navigate = useNavigate(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); if (!isLogin && password !== confirmPassword) { setError(t("auth.passwordsMismatch")); return; } setLoading(true); try { if (isLogin) await login(email, password); else await register(email, password); navigate("/"); } catch (err) { setError(getApiErrorMessage(err, isLogin ? t("auth.loginFailed") : t("auth.registrationFailed"))); } finally { setLoading(false); } }; return (

{t("common.appName")}

{isLogin ? t("auth.signIn") : t("auth.createAccount")}

{error &&
{error}
}
setEmail(e.target.value)} placeholder={t("auth.emailPlaceholder")} required style={{ padding: "10px 12px", borderRadius: 6, border: "1px solid #ddd", fontSize: 16, outline: "none" }} />
setPassword(e.target.value)} placeholder={t("auth.passwordPlaceholder")} required minLength={8} style={{ padding: "10px 12px", borderRadius: 6, border: "1px solid #ddd", fontSize: 16, outline: "none" }} />
{!isLogin &&
setConfirmPassword(e.target.value)} placeholder={t("auth.confirmPasswordPlaceholder")} required minLength={8} style={{ padding: "10px 12px", borderRadius: 6, border: "1px solid #ddd", fontSize: 16, outline: "none" }} />
}

{isLogin ? t("auth.noAccount") + " " : t("auth.hasAccount") + " "}

); } export default function AuthPage() { const [isLogin, setIsLogin] = useState(true); return setIsLogin((v) => !v)} />; }