"use client" import { useMemo, useRef, useState } from "react" import Link from "next/link" import { ChevronRight, FileText, Search, X } from "lucide-react" 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 searchRef = useRef(null) const resetSearch = () => { setSearchTerm(""); searchRef.current?.focus() } 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 && ( )}
) : ( )}

{error ? "Fehler beim Laden der Datenschutzerklärungen." : isLoading ? "Datenschutzerklärungen werden geladen…" : filteredPolicies.length + (filteredPolicies.length === 1 ? " Erklärung" : " Erklärungen") + (searchTerm ? " von " + policies.length : "")}

) }