import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useAuth } from '../../context/AuthContext'; import { gdprApi } from '../../services/api'; import type { ConsentType, ConsentStatus, CustomerConsent } from '../../types'; import { Shield, ShieldCheck, ShieldX, ShieldAlert, FileDown, CheckCircle2, } from 'lucide-react'; import Card from '../../components/ui/Card'; const CONSENT_TYPE_LABELS: Record = { DATA_PROCESSING: { label: 'Datenverarbeitung', description: 'Grundlegende Verarbeitung personenbezogener Daten zur Vertragserfüllung', }, MARKETING_EMAIL: { label: 'Elektronisches Marketing', description: 'Zusendung von Werbung und Angeboten über elektronische Kommunikationswege (E-Mail, Messenger etc.)', }, MARKETING_PHONE: { label: 'Telefonmarketing', description: 'Kontaktaufnahme zu Werbezwecken per Telefon', }, DATA_SHARING_PARTNER: { label: 'Datenweitergabe an Partner', description: 'Weitergabe Ihrer Daten an ausgewählte Partnerunternehmen', }, }; export default function PortalPrivacy() { const { user } = useAuth(); const queryClient = useQueryClient(); const { data, isLoading } = useQuery({ queryKey: ['my-privacy'], queryFn: () => gdprApi.getMyPrivacy(), }); const updateMutation = useMutation({ mutationFn: ({ consentType, status }: { consentType: ConsentType; status: ConsentStatus }) => gdprApi.updateConsent(user!.customerId!, consentType, { status, source: 'portal' }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['my-privacy'] }); queryClient.invalidateQueries({ queryKey: ['my-consent-status'] }); }, }); const handleToggle = (consent: CustomerConsent) => { const newStatus: ConsentStatus = consent.status === 'GRANTED' ? 'WITHDRAWN' : 'GRANTED'; updateMutation.mutate({ consentType: consent.consentType, status: newStatus }); }; const getStatusIcon = (status: ConsentStatus) => { switch (status) { case 'GRANTED': return ; case 'WITHDRAWN': return ; case 'PENDING': return ; default: return ; } }; const getStatusLabel = (status: ConsentStatus) => { switch (status) { case 'GRANTED': return Erteilt; case 'WITHDRAWN': return Widerrufen; case 'PENDING': return Ausstehend; default: return null; } }; if (isLoading) { return
Laden...
; } const consents = data?.data?.consents || []; const privacyPolicyHtml = data?.data?.privacyPolicyHtml || ''; const allGranted = consents.every((c) => c.status === 'GRANTED'); const token = localStorage.getItem('token'); return (

Datenschutz

{/* Erfolgs-Banner wenn alle erteilt */} {allGranted && (

Sie haben allen Einwilligungen zugestimmt. Vielen Dank!

)} {/* Einwilligungen */}

Hier können Sie Ihre Datenschutz-Einwilligungen verwalten. Alle Einwilligungen sind erforderlich, damit wir Sie beraten können.

{consents.map((consent) => { const typeInfo = CONSENT_TYPE_LABELS[consent.consentType] || { label: consent.consentType, description: '' }; return (
{getStatusIcon(consent.status)}

{typeInfo.label}

{getStatusLabel(consent.status)}

{typeInfo.description}

{consent.grantedAt && consent.status === 'GRANTED' && (

Erteilt am {new Date(consent.grantedAt).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', })}

)}
); })}
{updateMutation.isError && (
Fehler beim Speichern. Bitte versuchen Sie es erneut.
)}
{/* Datenschutzerklärung */}
); }