"use client" import { useMemo, useState } from "react" import { ChevronRight, FileText, Search, Settings2, 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 { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip" import { Brand } from "@/components/brand" import { PolicyDetail } from "@/components/policy-detail" import { PrintPolicy } from "@/components/print-policy" import { ThemeToggle } from "@/components/theme-toggle" import { usePublicPrivacyPolicies } from "@/hooks/use-privacy-policies" import { PrivacyPolicy } from "@/types/privacy-policy" import { formatDate } from "@/lib/format" export default function PublicDashboard() { const { policies, isLoading, error } = usePublicPrivacyPolicies() const [selectedPolicy, setSelectedPolicy] = useState(null) const [isDetailOpen, setIsDetailOpen] = useState(false) 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]) const handleViewDetails = (policy: PrivacyPolicy) => { setSelectedPolicy(policy) setIsDetailOpen(true) } return (
Admin-Bereich

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) => (
{formatDate(policy.updatedAt)}
))}
)} {!isLoading && !error && filteredPolicies.length > 0 && (
{filteredPolicies.length}{" "} {filteredPolicies.length === 1 ? "Erklärung" : "Erklärungen"} {searchTerm && ` von ${policies.length}`} DSGVO-konform
)}
) }