"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { Loader2, Rocket, User, Users } from "lucide-react"; import { PASSWORD_MIN_LENGTH } from "@/lib/auth/constants"; import { cn } from "@/lib/utils"; type Mode = "SINGLE_USER" | "MULTI_USER"; const MODES: Array<{ value: Mode; label: string; hint: string; icon: typeof User }> = [ { value: "SINGLE_USER", label: "Nur ich", hint: "Ein Konto, keine Registrierung, keine Benutzerliste.", icon: User, }, { value: "MULTI_USER", label: "Mehrere Personen", hint: "Weitere Konten moeglich, jedes mit streng getrennten Daten.", icon: Users, }, ]; export function SetupForm() { const router = useRouter(); const [username, setUsername] = useState(""); const [displayName, setDisplayName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [repeat, setRepeat] = useState(""); const [mode, setMode] = useState("SINGLE_USER"); 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/setup", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username, displayName, email, password, mode }), }); const payload = await response.json().catch(() => ({})); if (!response.ok) { setFieldErrors(payload.fields ?? {}); throw new Error(payload.error ?? "Einrichtung fehlgeschlagen."); } router.replace("/"); router.refresh(); } catch (caught) { setError(caught instanceof Error ? caught.message : String(caught)); setBusy(false); } } return (
Betriebsart
{MODES.map((option) => { const Icon = option.icon; const active = mode === option.value; return ( ); })}

Laesst sich spaeter in den Admin-Einstellungen umstellen.

setUsername(event.target.value)} autoComplete="username" autoCapitalize="none" spellCheck={false} placeholder="florian" required autoFocus /> {fieldErrors.username ? (

{fieldErrors.username}

) : null}
setDisplayName(event.target.value)} placeholder="Florian" />
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} />

Mindestens {PASSWORD_MIN_LENGTH} Zeichen. Einen Passkey kannst du danach unter „Mein Konto“ hinzufuegen.

{fieldErrors.password ? (

{fieldErrors.password}

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

{fieldErrors.repeat}

) : null}
{error ? (

{error}

) : null}
); }