From 9096aad69362abc966d07ea8ebbf50a2d317feec Mon Sep 17 00:00:00 2001 From: Sharang Parnerkar <30073382+mighty840@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:06:45 +0200 Subject: [PATCH] refactor(admin): split audit-checklist, cookie-banner, escalations pages Each page.tsx was 750-780 LOC. Extracted React components to _components/ and custom hooks to _hooks/ next to each page.tsx. All three pages are now under 215 LOC (well within the 500 LOC hard cap). Zero behavior changes. Co-Authored-By: Claude Sonnet 4.6 --- .../_components/ChecklistItemCard.tsx | 119 +++ .../_components/LoadingSkeleton.tsx | 17 + .../_components/SessionHistory.tsx | 69 ++ .../_components/checklistTemplates.ts | 78 ++ .../_components/statusHelpers.ts | 26 + .../sdk/audit-checklist/_components/types.ts | 39 + .../_hooks/useAuditChecklist.ts | 266 +++++++ .../app/sdk/audit-checklist/page.tsx | 613 +------------- .../_components/BannerPreview.tsx | 141 ++++ .../_components/CategoryList.tsx | 95 +++ .../_components/CookieBannerContent.tsx | 152 ++++ .../_components/EmbedCodeViewer.tsx | 96 +++ .../cookie-banner/_components/StylingForm.tsx | 118 +++ .../cookie-banner/_components/TextsForm.tsx | 53 ++ .../sdk/einwilligungen/cookie-banner/page.tsx | 749 +----------------- .../_components/EscalationCard.tsx | 69 ++ .../_components/EscalationCreateModal.tsx | 155 ++++ .../_components/EscalationDetailDrawer.tsx | 238 ++++++ .../app/sdk/escalations/_components/types.ts | 73 ++ .../sdk/escalations/_hooks/useEscalations.ts | 53 ++ admin-compliance/app/sdk/escalations/page.tsx | 622 +-------------- 21 files changed, 1892 insertions(+), 1949 deletions(-) create mode 100644 admin-compliance/app/sdk/audit-checklist/_components/ChecklistItemCard.tsx create mode 100644 admin-compliance/app/sdk/audit-checklist/_components/LoadingSkeleton.tsx create mode 100644 admin-compliance/app/sdk/audit-checklist/_components/SessionHistory.tsx create mode 100644 admin-compliance/app/sdk/audit-checklist/_components/checklistTemplates.ts create mode 100644 admin-compliance/app/sdk/audit-checklist/_components/statusHelpers.ts create mode 100644 admin-compliance/app/sdk/audit-checklist/_components/types.ts create mode 100644 admin-compliance/app/sdk/audit-checklist/_hooks/useAuditChecklist.ts create mode 100644 admin-compliance/app/sdk/einwilligungen/cookie-banner/_components/BannerPreview.tsx create mode 100644 admin-compliance/app/sdk/einwilligungen/cookie-banner/_components/CategoryList.tsx create mode 100644 admin-compliance/app/sdk/einwilligungen/cookie-banner/_components/CookieBannerContent.tsx create mode 100644 admin-compliance/app/sdk/einwilligungen/cookie-banner/_components/EmbedCodeViewer.tsx create mode 100644 admin-compliance/app/sdk/einwilligungen/cookie-banner/_components/StylingForm.tsx create mode 100644 admin-compliance/app/sdk/einwilligungen/cookie-banner/_components/TextsForm.tsx create mode 100644 admin-compliance/app/sdk/escalations/_components/EscalationCard.tsx create mode 100644 admin-compliance/app/sdk/escalations/_components/EscalationCreateModal.tsx create mode 100644 admin-compliance/app/sdk/escalations/_components/EscalationDetailDrawer.tsx create mode 100644 admin-compliance/app/sdk/escalations/_components/types.ts create mode 100644 admin-compliance/app/sdk/escalations/_hooks/useEscalations.ts diff --git a/admin-compliance/app/sdk/audit-checklist/_components/ChecklistItemCard.tsx b/admin-compliance/app/sdk/audit-checklist/_components/ChecklistItemCard.tsx new file mode 100644 index 0000000..6803c73 --- /dev/null +++ b/admin-compliance/app/sdk/audit-checklist/_components/ChecklistItemCard.tsx @@ -0,0 +1,119 @@ +'use client' + +import { useState } from 'react' +import { DisplayChecklistItem, DisplayStatus } from './types' + +interface ChecklistItemCardProps { + item: DisplayChecklistItem + onStatusChange: (status: DisplayStatus) => void + onNotesChange: (notes: string) => void + onAddEvidence: () => void +} + +export function ChecklistItemCard({ + item, + onStatusChange, + onNotesChange, + onAddEvidence, +}: ChecklistItemCardProps) { + const [showNotes, setShowNotes] = useState(false) + + const statusColors = { + compliant: 'bg-green-100 text-green-700 border-green-300', + 'non-compliant': 'bg-red-100 text-red-700 border-red-300', + partial: 'bg-yellow-100 text-yellow-700 border-yellow-300', + 'not-reviewed': 'bg-gray-100 text-gray-500 border-gray-300', + } + + const priorityColors = { + critical: 'bg-red-100 text-red-700', + high: 'bg-orange-100 text-orange-700', + medium: 'bg-yellow-100 text-yellow-700', + low: 'bg-green-100 text-green-700', + } + + return ( +
+
+
+
+ {item.category} + + {item.priority === 'critical' ? 'Kritisch' : + item.priority === 'high' ? 'Hoch' : + item.priority === 'medium' ? 'Mittel' : 'Niedrig'} + + + {item.requirementId} + +
+

{item.question}

+
+ +
+ + {item.notes && ( +
+ {item.notes} +
+ )} + + {item.evidence.length > 0 && ( +
+ Nachweise: + {item.evidence.map(ev => ( + + {ev} + + ))} +
+ )} + + {item.verifiedBy && item.verifiedAt && ( +
+ Geprueft von {item.verifiedBy} am {item.verifiedAt.toLocaleDateString('de-DE')} +
+ )} + +
+ + +
+ + {showNotes && ( +
+