'use client'; /** * Lokale Registrierungsseite für den eigenständigen Betrieb. */ import { appFetch } from '@/lib/client-fetch'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { Button, Card, ErrorMessage, Input, Label } from '@/components/ui/ui'; function RegisterForm() { const router = useRouter(); const [error, setError] = useState(null); const [busy, setBusy] = useState(false); async function handleSubmit(event: React.FormEvent) { event.preventDefault(); setBusy(true); setError(null); const formData = new FormData(event.currentTarget); const password = String(formData.get('password') ?? ''); const passwordRepeat = String(formData.get('passwordRepeat') ?? ''); if (password !== passwordRepeat) { setError('Die Passwoerter stimmen nicht ueberein.'); setBusy(false); return; } try { const username = String(formData.get('username') ?? '').trim(); const response = await appFetch('/api/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: formData.get('email'), password, ...(username ? { username } : {}), }), }); if (!response.ok) { const data = (await response.json()) as { error?: string }; setError(data.error ?? 'Registrierung fehlgeschlagen.'); return; } router.push('/dashboard'); router.refresh(); } catch { setError('Netzwerkfehler. Bitte erneut versuchen.'); } finally { setBusy(false); } } return (

2-32 Zeichen; Buchstaben, Ziffern, _ - . erlaubt.

Mindestens 10 Zeichen mit Gross-/Kleinbuchstabe und Ziffer.

Bereits registriert?{' '} Anmelden

); } export default function RegisterPage() { return (

Konto erstellen

); }