'use client'; import { Suspense, useEffect, useState } from 'react'; import { useSearchParams } from 'next/navigation'; import { api, errMsg } from '@/lib/api'; import { Alert } from '@/components/ui'; interface Info { contractNumber: string; orgName: string; productName: string; termEnd: string } function Decision() { const sp = useSearchParams(); const token = sp.get('token') ?? ''; const preselect = sp.get('action') === 'cancel' ? 'cancel' : sp.get('action') === 'keep' ? 'keep' : null; const [info, setInfo] = useState(null); const [err, setErr] = useState(''); const [busy, setBusy] = useState(false); const [done, setDone] = useState<'keep' | 'cancel' | null>(null); useEffect(() => { if (!token) { setErr('Der Link ist unvollständig.'); return; } api('GET', `/contracts/renewal-decision?token=${encodeURIComponent(token)}`).then(setInfo).catch((e) => setErr(errMsg(e))); }, [token]); async function decide(action: 'keep' | 'cancel') { setBusy(true); setErr(''); try { await api('POST', '/contracts/renewal-decision', { token, action }); setDone(action); } catch (e) { setErr(errMsg(e)); } finally { setBusy(false); } } return (

Vertragsentscheidung

{err && {err}} {done ? ( {done === 'keep' ? 'Vielen Dank! Der Vertrag wird weitergeführt.' : 'Die Kündigung wurde erfasst. Unser Team kümmert sich um die Abmeldung und meldet sich bei Rückfragen.'} ) : info ? (<>

Vertrag {info.contractNumber} ({info.productName}) für {info.orgName} läuft am{' '} {new Date(info.termEnd).toLocaleDateString('de-DE')} aus. Möchten Sie ihn behalten oder kündigen?

„Behalten" verlängert den Vertrag automatisch um eine weitere Laufzeit. „Kündigen" leitet die Abmeldung ein.

) : !err &&

Wird geladen …

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