"use client"; import { useState } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { Loader2, UserPlus } from "lucide-react"; import { PASSWORD_MIN_LENGTH } from "@/lib/auth/constants"; export function RegisterForm() { const router = useRouter(); const [username, setUsername] = useState(""); const [displayName, setDisplayName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [repeat, setRepeat] = useState(""); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); const [fieldErrors, setFieldErrors] = useState>({}); async function submit(event: React.FormEvent) { event.preventDefault(); setError(null); setFieldErrors({}); if (password !== repeat) { setFieldErrors({ repeat: "Die Passwoerter stimmen nicht ueberein." }); return; } setBusy(true); try { const response = await fetch("/api/auth/register", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username, displayName, email, password }), }); const payload = await response.json().catch(() => ({})); if (!response.ok) { setFieldErrors(payload.fields ?? {}); throw new Error(payload.error ?? "Registrierung fehlgeschlagen."); } router.replace("/"); router.refresh(); } catch (caught) { setError(caught instanceof Error ? caught.message : String(caught)); setBusy(false); } } return (
setUsername(event.target.value)} autoComplete="username" autoCapitalize="none" spellCheck={false} required autoFocus /> {fieldErrors.username ? (

{fieldErrors.username}

) : null}
setDisplayName(event.target.value)} />
setEmail(event.target.value)} autoComplete="email" placeholder="optional" /> {fieldErrors.email ? (

{fieldErrors.email}

) : null}
setPassword(event.target.value)} autoComplete="new-password" required minLength={PASSWORD_MIN_LENGTH} /> {fieldErrors.password ? (

{fieldErrors.password}

) : null}
setRepeat(event.target.value)} autoComplete="new-password" required /> {fieldErrors.repeat ? (

{fieldErrors.repeat}

) : null}
{error ? (

{error}

) : null}

Schon ein Konto?{" "} Anmelden

); }