'use client' import { useState, useEffect } from 'react' interface Vendor { vendor_name: string vendor_url: string | null category_key: string description_de: string | null cookie_names: string[] retention_days: number | null } const CAT_LABELS: Record = { necessary: 'Notwendig', functional: 'Funktional', statistics: 'Statistik', marketing: 'Marketing', } function generateHTML(vendors: Vendor[]): string { const grouped = vendors.reduce>((acc, v) => { const key = v.category_key || 'other' if (!acc[key]) acc[key] = [] acc[key].push(v) return acc }, {}) let html = `
\n` html += `

Eingesetzte Dienste und Cookies

\n` for (const [catKey, catVendors] of Object.entries(grouped)) { const label = CAT_LABELS[catKey] || catKey html += `

${label}

\n` html += `\n` html += `\n` for (const v of catVendors) { const name = v.vendor_url ? `${v.vendor_name}` : v.vendor_name const cookies = v.cookie_names?.join(', ') || '-' const retention = v.retention_days ? `${v.retention_days} Tage` : '-' html += `\n` } html += `
AnbieterZweckCookiesSpeicherdauer
${name}${v.description_de || '-'}${cookies}${retention}
\n` } html += `
` return html } export function EmbeddableVendorHTML({ siteId }: { siteId?: string }) { const [vendors, setVendors] = useState([]) const [copied, setCopied] = useState(false) useEffect(() => { const sid = siteId || 'preview-test-site' fetch(`/api/sdk/v1/banner/admin/sites/${sid}/vendors`) .then(r => r.ok ? r.json() : []) .then(data => setVendors(Array.isArray(data) ? data : [])) .catch(() => {}) }, [siteId]) const html = generateHTML(vendors) const handleCopy = () => { navigator.clipboard.writeText(html) setCopied(true) setTimeout(() => setCopied(false), 2000) } return (

Einbettbarer HTML-Code

Kopieren Sie diesen Code in Ihre Datenschutzerklaerung oder Cookie-Richtlinie.

{/* Preview */}
{/* Raw HTML */}
Quellcode anzeigen
          {html}
        
) }