"use client"; import { Suspense, useState } from "react"; import { useSearchParams } from "next/navigation"; import { TextField } from "@nexarch/shl"; import { ApiError, completePasswordReset } from "../../../lib/api"; export default function PasswordResetCompletePage() { return ( ); } function PasswordResetCompleteForm() { const params = useSearchParams(); const token = params.get("token") ?? ""; const [newPassword, setNewPassword] = useState(""); const [error, setError] = useState(null); const [done, setDone] = useState(false); const [submitting, setSubmitting] = useState(false); async function onSubmit(event: React.FormEvent) { event.preventDefault(); setError(null); setSubmitting(true); try { await completePasswordReset(token, newPassword); setDone(true); } catch (err) { // Akzeptanzkriterium 3: generische Meldung, keine interne Fehlerursache. setError(err instanceof ApiError ? err.message : "Der Link ist ungültig oder abgelaufen."); } finally { setSubmitting(false); } } if (done) { return (

Passwort geändert

Ihr Passwort wurde erfolgreich geändert. Jetzt anmelden.

); } return (

Neues Passwort festlegen

{!token && (

Kein gültiger Link. Bitte fordern Sie einen neuen Reset-Link an.

)}
setNewPassword(e.target.value)} /> {error && (

{error}

)}
); }