import { useState } from 'react'; import { useParams } from 'react-router-dom'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { publicApi } from '../../services/api'; import { formatDate } from '../../utils/dateFormat'; import { Shield, CheckCircle2, FileDown, Loader2 } from 'lucide-react'; export default function ConsentPage() { const { hash } = useParams<{ hash: string }>(); const queryClient = useQueryClient(); const [allChecked, setAllChecked] = useState(false); const [checks, setChecks] = useState>({}); const { data, isLoading, error } = useQuery({ queryKey: ['public-consent', hash], queryFn: () => publicApi.getConsentPage(hash!), enabled: !!hash, }); const grantMutation = useMutation({ mutationFn: () => publicApi.grantAllConsents(hash!), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['public-consent', hash] }); }, }); if (isLoading) { return (
Laden...
); } if (error || !data?.data) { return (

Ungültiger Link

Dieser Datenschutz-Link ist ungültig oder abgelaufen. Bitte kontaktieren Sie Ihren Berater.

); } const { customer, consents, privacyPolicyHtml } = data.data; const allGranted = consents.every((c) => c.status === 'GRANTED'); const consentTypes = consents.map((c) => c.consentType); const allBoxesChecked = consentTypes.every((t) => checks[t]); const handleToggle = (type: string) => { setChecks((prev) => ({ ...prev, [type]: !prev[type] })); }; const handleCheckAll = () => { const newValue = !allChecked; setAllChecked(newValue); const newChecks: Record = {}; consentTypes.forEach((t) => { newChecks[t] = newValue; }); setChecks(newChecks); }; const handleSubmit = () => { if (allBoxesChecked) { grantMutation.mutate(); } }; return (
{/* Header */}

Datenschutzerklärung

{customer.firstName} {customer.lastName} (Nr. {customer.customerNumber})

{/* Bereits zugestimmt */} {allGranted ? (

Einwilligungen bereits erteilt

Sie haben allen Einwilligungen zugestimmt. Vielen Dank!

{consents.map((c) => (
{c.label} {c.grantedAt && ( (am {formatDate(c.grantedAt)}) )}
))}
) : grantMutation.isSuccess ? (

Vielen Dank!

Ihre Einwilligungen wurden erfolgreich gespeichert. Sie erhalten in Kürze eine Bestätigung per E-Mail.

) : null} {/* Datenschutzerklärung */}

Datenschutzerklärung

Als PDF herunterladen
{/* Einwilligungen (nur wenn noch nicht erteilt) */} {!allGranted && !grantMutation.isSuccess && (

Einwilligungen

Bitte stimmen Sie allen Punkten zu, damit wir Sie beraten können.

{/* Alle auswählen */}
{consents.map((c) => ( ))}

* Pflichtfeld

{grantMutation.isError && (
Fehler beim Speichern. Bitte versuchen Sie es erneut.
)}
)}
); }