'use client' import React, { useState } from 'react' import type { DSFA } from './DSFACard' import type { DSFAPrefillResult } from '@/lib/sdk/dsfa/prefill-from-scope' interface GeneratorWizardProps { onClose: () => void onSubmit: (data: Partial) => Promise prefill?: DSFAPrefillResult | null } export function GeneratorWizard({ onClose, onSubmit, prefill }: GeneratorWizardProps) { const [step, setStep] = useState(1) const [saving, setSaving] = useState(false) const [title, setTitle] = useState(prefill?.title || '') const [description, setDescription] = useState(prefill?.description || '') const [processingActivity, setProcessingActivity] = useState(prefill?.processingActivity || '') const [selectedCategories, setSelectedCategories] = useState(prefill?.dataCategories || []) const riskMap2: Record = { niedrig: 'low', mittel: 'medium', hoch: 'high', kritisch: 'critical' } const [riskLevel, setRiskLevel] = useState<'low' | 'medium' | 'high' | 'critical'>(riskMap2[prefill?.riskLevel || ''] || 'low') const [residualRisk, setResidualRisk] = useState<'low' | 'medium' | 'high' | 'critical'>('low') const [selectedMeasures, setSelectedMeasures] = useState(prefill?.measures || []) const [linkedVvtId, setLinkedVvtId] = useState('') const [vvtActivities, setVvtActivities] = useState>([]) // Load VVT activities for linking React.useEffect(() => { fetch('/api/sdk/v1/compliance/vvt') .then(r => r.ok ? r.json() : []) .then(data => { const items = Array.isArray(data) ? data : data.activities || [] setVvtActivities(items.map((a: any) => ({ id: a.id, name: a.name || a.processing_name || a.title || 'Unbenannt' }))) }) .catch(() => {}) }, []) const riskMap: Record = { Niedrig: 'low', Mittel: 'medium', Hoch: 'high', Kritisch: 'critical', } const handleSubmit = async () => { setSaving(true) try { await onSubmit({ title, description, processingActivity, dataCategories: selectedCategories, riskLevel, measures: selectedMeasures, status: 'draft', ...(prefill?.federalState ? { federal_state: prefill.federalState } : {}), ...(prefill?.involvesAi ? { involves_ai: true } : {}), ...(prefill?.legalBasis ? { legal_basis: prefill.legalBasis } : {}), ...(linkedVvtId ? { linked_vvt_id: linkedVvtId } : {}), ...(residualRisk !== 'low' ? { residual_risk_level: residualRisk } : {}), } as Partial) onClose() } finally { setSaving(false) } } return (

Neue DSFA erstellen

{/* Progress Steps */}
{[1, 2, 3, 4, 5].map(s => (
{s < step ? ( ) : s}
{s < 5 &&
} ))}
{/* Step Content */}
{step === 1 && (
setTitle(e.target.value)} placeholder="z.B. DSFA - Mitarbeiter-Monitoring" className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500" />