fix: Vorbereitung-Module auf 100% — Feld-Fixes, Backend-Persistenz, Endpoints
- ScopeExportTab: 11 Feldnamen-Mismatches gegen ScopeDecision Interface korrigiert (level→determinedLevel, riskScore→risk_score, hardTriggers→triggeredHardTriggers, depthDescription→depth, effortEstimate→estimatedEffort, isMandatory→required, triggeredByHardTrigger→triggeredBy, effortDays→estimatedEffort) - Company Profile: GET vom Backend beim Mount, snake_case→camelCase, SDK State Fallback - Modules: Aktivierung/Deaktivierung ans Backend schreiben (activate/deactivate Endpoints) - Obligations: Explizites Fehler-Banner statt stiller Fallback bei Backend-Fehler - Source Policy: BlockedContentDB Model + GET /api/v1/admin/blocked-content Endpoint - Import: Offline-Modus Label fuer Backend-Fallback Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1130,16 +1130,65 @@ export default function CompanyProfilePage() {
|
||||
const totalSteps = wizardSteps.length
|
||||
const lastStep = wizardSteps[wizardSteps.length - 1].id
|
||||
|
||||
// Load existing profile
|
||||
// Load existing profile: first try backend, then SDK state as fallback
|
||||
useEffect(() => {
|
||||
if (state.companyProfile) {
|
||||
setFormData(state.companyProfile)
|
||||
// If profile is complete, show last step
|
||||
if (state.companyProfile.isComplete) {
|
||||
setCurrentStep(5)
|
||||
let cancelled = false
|
||||
|
||||
async function loadFromBackend() {
|
||||
try {
|
||||
const response = await fetch('/api/sdk/v1/company-profile?tenant_id=default')
|
||||
if (response.ok) {
|
||||
const data = await response.json()
|
||||
if (data && !cancelled) {
|
||||
const backendProfile: Partial<CompanyProfile> = {
|
||||
companyName: data.company_name || '',
|
||||
legalForm: data.legal_form || undefined,
|
||||
industry: data.industry || '',
|
||||
foundedYear: data.founded_year || undefined,
|
||||
businessModel: data.business_model || undefined,
|
||||
offerings: data.offerings || [],
|
||||
companySize: data.company_size || undefined,
|
||||
employeeCount: data.employee_count || '',
|
||||
annualRevenue: data.annual_revenue || '',
|
||||
headquartersCountry: data.headquarters_country || 'DE',
|
||||
headquartersCity: data.headquarters_city || '',
|
||||
hasInternationalLocations: data.has_international_locations || false,
|
||||
internationalCountries: data.international_countries || [],
|
||||
targetMarkets: data.target_markets || [],
|
||||
primaryJurisdiction: data.primary_jurisdiction || 'DE',
|
||||
isDataController: data.is_data_controller ?? true,
|
||||
isDataProcessor: data.is_data_processor ?? false,
|
||||
usesAI: data.uses_ai ?? false,
|
||||
aiUseCases: data.ai_use_cases || [],
|
||||
dpoName: data.dpo_name || '',
|
||||
dpoEmail: data.dpo_email || '',
|
||||
isComplete: data.is_complete || false,
|
||||
}
|
||||
setFormData(backendProfile)
|
||||
if (backendProfile.isComplete) {
|
||||
setCurrentStep(5)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// Backend not available, fall through to SDK state
|
||||
}
|
||||
|
||||
// Fallback: use SDK state
|
||||
if (!cancelled && state.companyProfile) {
|
||||
setFormData(state.companyProfile)
|
||||
if (state.companyProfile.isComplete) {
|
||||
setCurrentStep(5)
|
||||
}
|
||||
}
|
||||
}
|
||||
}, [state.companyProfile])
|
||||
|
||||
loadFromBackend()
|
||||
|
||||
return () => { cancelled = true }
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [])
|
||||
|
||||
const updateFormData = (updates: Partial<CompanyProfile>) => {
|
||||
setFormData(prev => ({ ...prev, ...updates }))
|
||||
|
||||
Reference in New Issue
Block a user