From ef8284dff5ea748a34b40f4f61c43424e31f2193 Mon Sep 17 00:00:00 2001 From: Sharang Parnerkar <30073382+mighty840@users.noreply.github.com> Date: Sat, 11 Apr 2026 18:51:54 +0200 Subject: [PATCH] refactor(admin): split dsfa/[id] and notfallplan page.tsx into colocated components dsfa/[id]/page.tsx (1893 LOC -> 350 LOC) split into 9 components: Section1-5Editor, SDMCoverageOverview, RAGSearchPanel, AddRiskModal, AddMitigationModal. Page is now a thin orchestrator. notfallplan/page.tsx (1890 LOC -> 435 LOC) split into 8 modules: types.ts, ConfigTab, IncidentsTab, TemplatesTab, ExercisesTab, Modals, ApiSections. All under the 500-line hard cap. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../[id]/_components/AddMitigationModal.tsx | 205 ++ .../dsfa/[id]/_components/AddRiskModal.tsx | 182 ++ .../dsfa/[id]/_components/RAGSearchPanel.tsx | 194 ++ .../[id]/_components/SDMCoverageOverview.tsx | 83 + .../dsfa/[id]/_components/Section1Editor.tsx | 216 ++ .../dsfa/[id]/_components/Section2Editor.tsx | 91 + .../dsfa/[id]/_components/Section3Editor.tsx | 189 ++ .../dsfa/[id]/_components/Section4Editor.tsx | 159 ++ .../dsfa/[id]/_components/Section5Editor.tsx | 161 ++ .../app/sdk/dsfa/[id]/_components/index.ts | 9 + admin-compliance/app/sdk/dsfa/[id]/page.tsx | 1755 +---------------- .../notfallplan/_components/ApiSections.tsx | 137 ++ .../sdk/notfallplan/_components/ConfigTab.tsx | 203 ++ .../notfallplan/_components/ExercisesTab.tsx | 207 ++ .../notfallplan/_components/IncidentsTab.tsx | 292 +++ .../sdk/notfallplan/_components/Modals.tsx | 296 +++ .../notfallplan/_components/TemplatesTab.tsx | 73 + .../app/sdk/notfallplan/_components/index.ts | 7 + .../app/sdk/notfallplan/_components/types.ts | 307 +++ admin-compliance/app/sdk/notfallplan/page.tsx | 1637 +-------------- 20 files changed, 3208 insertions(+), 3195 deletions(-) create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/AddMitigationModal.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/AddRiskModal.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/RAGSearchPanel.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/SDMCoverageOverview.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/Section1Editor.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/Section2Editor.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/Section3Editor.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/Section4Editor.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/Section5Editor.tsx create mode 100644 admin-compliance/app/sdk/dsfa/[id]/_components/index.ts create mode 100644 admin-compliance/app/sdk/notfallplan/_components/ApiSections.tsx create mode 100644 admin-compliance/app/sdk/notfallplan/_components/ConfigTab.tsx create mode 100644 admin-compliance/app/sdk/notfallplan/_components/ExercisesTab.tsx create mode 100644 admin-compliance/app/sdk/notfallplan/_components/IncidentsTab.tsx create mode 100644 admin-compliance/app/sdk/notfallplan/_components/Modals.tsx create mode 100644 admin-compliance/app/sdk/notfallplan/_components/TemplatesTab.tsx create mode 100644 admin-compliance/app/sdk/notfallplan/_components/index.ts create mode 100644 admin-compliance/app/sdk/notfallplan/_components/types.ts diff --git a/admin-compliance/app/sdk/dsfa/[id]/_components/AddMitigationModal.tsx b/admin-compliance/app/sdk/dsfa/[id]/_components/AddMitigationModal.tsx new file mode 100644 index 0000000..14bf16c --- /dev/null +++ b/admin-compliance/app/sdk/dsfa/[id]/_components/AddMitigationModal.tsx @@ -0,0 +1,205 @@ +'use client' + +import React, { useState } from 'react' +import { DSFARisk } from '@/lib/sdk/dsfa/types' +import type { SDMGoal } from '@/lib/sdk/dsfa/types' +import { + MITIGATION_LIBRARY, + MITIGATION_TYPE_LABELS, + SDM_GOAL_LABELS, + EFFECTIVENESS_LABELS, +} from '@/lib/sdk/dsfa/mitigation-library' +import type { CatalogMitigation } from '@/lib/sdk/dsfa/mitigation-library' + +export function AddMitigationModal({ + risks, + onClose, + onAdd, +}: { + risks: DSFARisk[] + onClose: () => void + onAdd: (data: { risk_id: string; description: string; type: string; responsible_party: string }) => void +}) { + const [mode, setMode] = useState<'library' | 'manual'>('library') + const [riskId, setRiskId] = useState(risks[0]?.id || '') + const [type, setType] = useState('technical') + const [description, setDescription] = useState('') + const [responsibleParty, setResponsibleParty] = useState('') + const [typeFilter, setTypeFilter] = useState<'all' | 'technical' | 'organizational' | 'legal'>('all') + const [sdmFilter, setSdmFilter] = useState('all') + + const filteredLibrary = MITIGATION_LIBRARY.filter(m => { + if (typeFilter !== 'all' && m.type !== typeFilter) return false + if (sdmFilter !== 'all' && !m.sdmGoals.includes(sdmFilter)) return false + return true + }) + + function selectCatalogMitigation(m: CatalogMitigation) { + setType(m.type) + setDescription(`${m.title}\n\n${m.description}\n\nRechtsgrundlage: ${m.legalBasis}`) + setMode('manual') + } + + return ( +
+
+

Massnahme hinzufuegen

+ + {/* Tab Toggle */} +
+ + +
+ + {mode === 'library' ? ( +
+ {/* Filters */} +
+ + +
+ + {/* Library List */} +
+ {filteredLibrary.map(m => ( + + ))} +
+ {filteredLibrary.length === 0 && ( +

Keine Massnahmen fuer die gewaehlten Filter.

+ )} +
+ ) : ( +
+
+ + +
+ +
+ + +
+ +
+ +