import { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import { ApiError, fetchFreigabe, sendFreigabe, freigabeLayoutUrl, type Freigabe } from '../lib/api'; /** * Öffentliche Motiv-Freigabe (Direktlink mit Einmal-Token, kein Login nötig). * Zeigt den A6-Entwurf und lässt den Kunden freigeben oder einen Änderungswunsch * hinterlegen. Erst nach Freigabe geht die Karte in den Druck. */ export default function FreigabeSeite() { const { token = '' } = useParams(); const [data, setData] = useState(null); const [status, setStatus] = useState<'laedt' | 'da' | 'fehler'>('laedt'); const [fehler, setFehler] = useState(''); const [modus, setModus] = useState<'ansicht' | 'aendern'>('ansicht'); const [note, setNote] = useState(''); const [sendet, setSendet] = useState(false); const [ergebnis, setErgebnis] = useState<'approved' | 'changes' | null>(null); useEffect(() => { fetchFreigabe(token) .then((d) => { setData(d); setStatus('da'); if (d.status === 'approved' || d.status === 'changes') setErgebnis(d.status); }) .catch((e) => { setStatus('fehler'); setFehler(e instanceof ApiError ? e.message : 'Freigabe-Link ungültig oder abgelaufen.'); }); }, [token]); async function absenden(action: 'approve' | 'changes') { if (action === 'changes' && !note.trim()) { setFehler('Bitte beschreiben Sie kurz Ihren Änderungswunsch.'); return; } setFehler(''); setSendet(true); try { await sendFreigabe(token, action, action === 'changes' ? note.trim() : undefined); setErgebnis(action === 'approve' ? 'approved' : 'changes'); } catch (e) { setFehler(e instanceof ApiError ? e.message : 'Konnte nicht gespeichert werden.'); } finally { setSendet(false); } } if (status === 'laedt') return

Lädt …

; if (status === 'fehler') return (

Freigabe

{fehler}

); const d = data!; const vorschau = (
{d.has_layout ? A6-Entwurf :
Entwurf wird noch erstellt …
}
); if (ergebnis === 'approved') return (

Vielen Dank!

Sie haben den Entwurf zu {d.order_number} freigegeben. Ihre Karte geht jetzt in den Druck.

{vorschau}
); if (ergebnis === 'changes') return (

Änderungswunsch erhalten

Danke – wir haben Ihren Änderungswunsch zu {d.order_number} notiert und melden uns mit einem neuen Entwurf.

{vorschau}
); return (

Ihr Postkarten-Entwurf

Bestellung {d.order_number} · {d.product}. Bitte prüfen Sie den Druck-Entwurf (A6). Erst nach Ihrer Freigabe geht die Karte in den Druck.

{vorschau} {fehler &&

{fehler}

} {modus === 'ansicht' ? (
) : (