import { useState, type FormEvent } from "react"; import { useNavigate, Link } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { useAuthStore } from "@/stores/authStore"; import { useToastStore } from "@/stores/toastStore"; import { ApiError } from "@/lib/api"; import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { Card } from "@/components/ui/Card"; export function RegisterPage() { const { t } = useTranslation(); const navigate = useNavigate(); const register = useAuthStore((s) => s.register); const pushToast = useToastStore((s) => s.push); const [email, setEmail] = useState(""); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [passwordConfirm, setPasswordConfirm] = useState(""); const [submitting, setSubmitting] = useState(false); const [errors, setErrors] = useState>({}); const validate = (): boolean => { const next: Record = {}; if (!email.includes("@")) next.email = t("errors.validation"); if (username.trim().length < 3) next.username = t("errors.validation"); if (password.length < 8) next.password = t("errors.validation"); if (password !== passwordConfirm) next.password_confirm = t("errors.validation"); setErrors(next); return Object.keys(next).length === 0; }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); if (!validate()) return; setSubmitting(true); try { await register({ email: email.trim(), username: username.trim(), password, password_confirm: passwordConfirm, }); pushToast("success", t("auth.register_success")); navigate("/login"); } catch (err) { const msg = err instanceof ApiError ? err.message : t("auth.register_failed"); pushToast("error", msg); } finally { setSubmitting(false); } }; return (
setEmail(e.target.value)} autoComplete="email" required error={errors.email} /> setUsername(e.target.value)} autoComplete="username" required error={errors.username} /> setPassword(e.target.value)} autoComplete="new-password" required error={errors.password} /> setPasswordConfirm(e.target.value)} autoComplete="new-password" required error={errors.password_confirm} />

{t("auth.have_account")}

); }