'use client' import React, { useState, useCallback } from 'react' import { useCompliance } from '../provider' import type { DSRRequestType } from '@breakpilot/compliance-sdk-types' export interface DSRPortalProps { onSubmit?: (type: DSRRequestType, email: string, name: string) => void className?: string style?: React.CSSProperties } const DSR_TYPES: Record = { ACCESS: { name: 'Auskunft (Art. 15)', description: 'Welche Daten haben Sie über mich gespeichert?', }, RECTIFICATION: { name: 'Berichtigung (Art. 16)', description: 'Korrigieren Sie falsche Daten über mich.', }, ERASURE: { name: 'Löschung (Art. 17)', description: 'Löschen Sie alle meine personenbezogenen Daten.', }, PORTABILITY: { name: 'Datenübertragbarkeit (Art. 20)', description: 'Exportieren Sie meine Daten in einem maschinenlesbaren Format.', }, RESTRICTION: { name: 'Einschränkung (Art. 18)', description: 'Schränken Sie die Verarbeitung meiner Daten ein.', }, OBJECTION: { name: 'Widerspruch (Art. 21)', description: 'Ich widerspreche der Verarbeitung meiner Daten.', }, } export function DSRPortal({ onSubmit, className, style }: DSRPortalProps) { const { dsgvo } = useCompliance() const [selectedType, setSelectedType] = useState(null) const [email, setEmail] = useState('') const [name, setName] = useState('') const [additionalInfo, setAdditionalInfo] = useState('') const [isSubmitting, setIsSubmitting] = useState(false) const [submitted, setSubmitted] = useState(false) const [error, setError] = useState(null) const handleSubmit = useCallback( async (e: React.FormEvent) => { e.preventDefault() if (!selectedType || !email || !name) return setIsSubmitting(true) setError(null) try { await dsgvo.submitDSR(selectedType, email, name) onSubmit?.(selectedType, email, name) setSubmitted(true) } catch (err) { setError(err instanceof Error ? err.message : 'Ein Fehler ist aufgetreten') } finally { setIsSubmitting(false) } }, [selectedType, email, name, dsgvo, onSubmit] ) const containerStyle: React.CSSProperties = { fontFamily: 'system-ui, -apple-system, sans-serif', maxWidth: '600px', margin: '0 auto', padding: '20px', ...style, } const inputStyle: React.CSSProperties = { width: '100%', padding: '12px', fontSize: '14px', border: '1px solid #ddd', borderRadius: '4px', marginBottom: '15px', boxSizing: 'border-box', } const buttonStyle: React.CSSProperties = { padding: '12px 24px', fontSize: '16px', fontWeight: 500, color: '#fff', backgroundColor: '#1a1a1a', border: 'none', borderRadius: '4px', cursor: 'pointer', width: '100%', } if (submitted) { return (

Anfrage eingereicht

Wir werden Ihre Anfrage innerhalb von 30 Tagen bearbeiten. Sie erhalten eine Bestätigung per E-Mail an {email}.

) } return (

Betroffenenrechte-Portal

Hier können Sie Ihre Rechte gemäß DSGVO wahrnehmen. Wählen Sie die gewünschte Anfrage und füllen Sie das Formular aus.

{Object.entries(DSR_TYPES).map(([type, { name, description }]) => ( ))}
setName(e.target.value)} required placeholder="Max Mustermann" style={inputStyle} />
setEmail(e.target.value)} required placeholder="max@example.com" style={inputStyle} />