"use client" import { AlertTriangle, Briefcase, Calendar, Contact, Database, ClipboardCheck, Cpu, Gavel, Globe, Layers, Scale, OctagonAlert, RotateCcw, ShieldCheck, Target, Timer, UserCheck, Users, type LucideIcon, } from "lucide-react" import { Badge } from "@/components/ui/badge" import { Dialog, DialogBody, DialogContent, DialogHeader, DialogDescription, DialogTitle, } from "@/components/ui/dialog" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { MarkdownRenderer } from "@/components/markdown-renderer" import { PrintPolicy } from "@/components/print-policy" import { PrivacyPolicy } from "@/types/privacy-policy" import { formatDate } from "@/lib/format" interface PolicyDetailProps { policy: PrivacyPolicy | null open: boolean onOpenChange: (open: boolean) => void } interface Section { icon: LucideIcon label: string content?: string | null } function SectionBlock({ icon: Icon, label, content }: Section) { if (!content) return null return (

{label}

) } export function PolicyDetail({ policy, open, onOpenChange }: PolicyDetailProps) { const responsibleSections: Section[] = policy ? [ { icon: Contact, label: "Verantwortlicher im Sinne der DSGVO", content: policy.responsible }, { icon: ShieldCheck, label: "Kontaktdaten der/des Datenschutzbeauftragten", content: policy.contactDPO }, ] : [] const processingSections: Section[] = policy ? [ { icon: Briefcase, label: "Bezeichnung der Verarbeitungstätigkeit", content: policy.processingDescription }, { icon: Target, label: "Zweck der Datenerhebung", content: policy.processingPurposes }, { icon: Gavel, label: "Rechtsgrundlage der Verarbeitung", content: policy.legalBasis }, { icon: Scale, label: "Berechtigte Interessen", content: policy.legitimateInterests }, { icon: Layers, label: "Kategorien der verarbeiteten Daten", content: policy.dataCategories }, { icon: Users, label: "Geplante Empfänger der Daten", content: policy.recipients }, { icon: Globe, label: "Übermittlung in Drittländer", content: policy.thirdCountryTransfer }, { icon: Timer, label: "Speicherdauer", content: policy.storageDuration }, { icon: Database, label: "Herkunft der Daten", content: policy.dataSource }, { icon: Cpu, label: "Automatisierte Entscheidungsfindung", content: policy.automatedDecision }, ] : [] const rightsSections: Section[] = policy ? [ { icon: UserCheck, label: "Betroffenen-Rechte", content: policy.dataSubjectsRights }, { icon: AlertTriangle, label: "Beschwerderecht bei der Aufsichtsbehörde", content: policy.complaintRight }, { icon: RotateCcw, label: "Widerrufsrecht bei Einwilligung", content: policy.withdrawalRight }, { icon: OctagonAlert, label: "Widerspruchsrecht (Art. 21 DSGVO)", content: policy.objectionRight }, { icon: ClipboardCheck, label: "Ihre Pflicht zur Bereitstellung der Daten", content: policy.provisionObligation }, { icon: OctagonAlert, label: "Folgen, wenn Sie die Daten nicht angeben", content: policy.provisionConsequences }, ] : [] return ( {policy && ( <>
{policy.title} Vorschau der Datenschutzerklärung
Erstellt am {formatDate(policy.createdAt)} {policy.updatedAt !== policy.createdAt && ( Aktualisiert am {formatDate(policy.updatedAt)} )} DSGVO
Verantwortlich Verarbeitung Ihre Rechte {responsibleSections.map((section) => ( ))} {processingSections.map((section) => ( ))} {rightsSections.map((section) => ( ))} )}
) }