"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

{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 && ( )}
) : ( )} {!isLoading && !error && filteredPolicies.length > 0 && (
{/* Beim Filtern hört eine Vorlesesoftware sonst nicht, was passiert */}

{filteredPolicies.length}{" "} {filteredPolicies.length === 1 ? "Erklärung" : "Erklärungen"} {searchTerm && ` von ${policies.length}`}

DSGVO-konform
)}
) }