'use client' import { useState, useEffect } from 'react' import { useSDK } from '@/lib/sdk' interface Vendor { id: string vendor_name: string vendor_url: string | null category_key: string description_de: string | null description_en: string | null cookie_names: string[] retention_days: number | null is_active: boolean } const CATEGORY_LABELS: Record = { necessary: { label: 'Notwendig', color: 'bg-green-100 text-green-700' }, functional: { label: 'Funktional', color: 'bg-blue-100 text-blue-700' }, statistics: { label: 'Statistik', color: 'bg-yellow-100 text-yellow-700' }, marketing: { label: 'Marketing', color: 'bg-red-100 text-red-700' }, } export function VendorTable({ siteId }: { siteId?: string }) { const { projectId } = useSDK() const [vendors, setVendors] = useState([]) const [loading, setLoading] = useState(true) const [expandedId, setExpandedId] = useState(null) 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(() => setVendors([])) .finally(() => setLoading(false)) }, [siteId]) // Group by category const grouped = vendors.reduce>((acc, v) => { const key = v.category_key || 'other' if (!acc[key]) acc[key] = [] acc[key].push(v) return acc }, {}) if (loading) { return
Lade Verarbeiter...
} if (vendors.length === 0) { return (

Keine Verarbeiter konfiguriert.

Nutzen Sie den Website-Scanner oder fuegen Sie Verarbeiter manuell hinzu.

) } return (

Verarbeiter-Uebersicht

{vendors.length} Dienste in {Object.keys(grouped).length} Kategorien

{Object.entries(grouped).map(([catKey, catVendors]) => { const catInfo = CATEGORY_LABELS[catKey] || { label: catKey, color: 'bg-gray-100 text-gray-700' } return (
{catInfo.label} {catVendors.length} Dienste
{catVendors.map(v => ( ))}
Anbieter Zweck Cookies Aufbewahrung Datenschutz
{expandedId === v.id && v.cookie_names?.length > 0 && (
{v.cookie_names.map(c => ( {c} ))}
)}
{v.description_de || '-'} {v.cookie_names?.length || 0} {v.retention_days ? `${v.retention_days} Tage` : '-'} {v.vendor_url ? ( Link ) : ( - )}
) })}
) }