"use client" import { useMemo, useState } from "react" import Link from "next/link" import { ChevronRight, FileText, Search, X } from "lucide-react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Separator } from "@/components/ui/separator" import { Skeleton } from "@/components/ui/skeleton" import { PrintPolicy } from "@/components/print-policy" import { usePublicPrivacyPolicies } from "@/hooks/use-privacy-policies" import { formatDate } from "@/lib/format" import { PrivacyPolicy } from "@/types/privacy-policy" export function PolicyList({ initial }: { initial: PrivacyPolicy[] }) { const { policies, isLoading, error } = usePublicPrivacyPolicies(initial) const [searchTerm, setSearchTerm] = useState("") const filteredPolicies = useMemo(() => { const term = searchTerm.trim().toLowerCase() if (!term) return policies return policies.filter((policy) => [policy.title, policy.responsible, policy.processingDescription].some((field) => field.toLowerCase().includes(term) ) ) }, [policies, searchTerm]) return (

Datenschutzerklärungen

Transparente Informationen zu unserer Datenverarbeitung nach DSGVO

setSearchTerm(e.target.value)} className="px-9" /> {searchTerm && ( )}
{error ? (
Fehler beim Laden der Daten: {error.message}
) : isLoading ? (
{Array.from({ length: 4 }).map((_, index) => (
))}
) : filteredPolicies.length === 0 ? (

{searchTerm ? "Keine Treffer" : "Keine Datenschutzerklärungen verfügbar"}

{searchTerm ? "Versuchen Sie einen anderen Suchbegriff." : "Derzeit sind keine öffentlichen Datenschutzerklärungen hinterlegt."}

{searchTerm && ( )}
) : (
{filteredPolicies.map((policy) => (
{/* Echter Link: teilbar, in neuem Tab zu öffnen, ohne JavaScript nutzbar */} {policy.title} {policy.responsible.replace(/[*_#`]/g, "").split("\n")[0]}
{formatDate(policy.updatedAt)}
))}
)} {!isLoading && !error && filteredPolicies.length > 0 && (
{filteredPolicies.length}{" "} {filteredPolicies.length === 1 ? "Erklärung" : "Erklärungen"} {searchTerm && ` von ${policies.length}`} DSGVO-konform
)}
) }