From ba06b786ccc598db87483c681b5cc3961b6ba4e1 Mon Sep 17 00:00:00 2001 From: Ida Dittrich Date: Thu, 26 Feb 2026 08:18:49 +0100 Subject: [PATCH] fix: moved wizard pages to subfolders for clearance --- src/App.tsx | 3 +- src/pages/admin/AccessManagementHub.tsx | 2 +- src/pages/admin/index.ts | 2 - .../AdminInvitationWizardPage.tsx | 20 ++++---- .../{ => wizards}/AdminMandateWizardPage.tsx | 51 +++++++++---------- .../FeatureInstanceWizard.module.css | 0 .../{ => wizards}/FeatureInstanceWizard.tsx | 14 ++--- src/pages/admin/wizards/index.ts | 9 ++++ 8 files changed, 54 insertions(+), 47 deletions(-) rename src/pages/admin/{ => wizards}/AdminInvitationWizardPage.tsx (97%) rename src/pages/admin/{ => wizards}/AdminMandateWizardPage.tsx (77%) rename src/pages/admin/{ => wizards}/FeatureInstanceWizard.module.css (100%) rename src/pages/admin/{ => wizards}/FeatureInstanceWizard.tsx (96%) create mode 100644 src/pages/admin/wizards/index.ts diff --git a/src/App.tsx b/src/App.tsx index 3c9b260..32efece 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -38,7 +38,8 @@ import { SettingsPage } from './pages/Settings'; import { GDPRPage } from './pages/GDPR'; import StorePage from './pages/Store'; import { FeatureViewPage } from './pages/FeatureView'; -import { AccessManagementHub, AdminMandatesPage, AdminUsersPage, AdminUserMandatesPage, AdminFeatureAccessPage, AdminInvitationsPage, AdminMandateRolesPage, AdminFeatureRolesPage, AdminFeatureInstanceUsersPage, AdminMandateRolePermissionsPage, AdminUserAccessOverviewPage, AdminAutomationEventsPage, AdminLogsPage, AdminMandateWizardPage, AdminInvitationWizardPage } from './pages/admin'; +import { AccessManagementHub, AdminMandatesPage, AdminUsersPage, AdminUserMandatesPage, AdminFeatureAccessPage, AdminInvitationsPage, AdminMandateRolesPage, AdminFeatureRolesPage, AdminFeatureInstanceUsersPage, AdminMandateRolePermissionsPage, AdminUserAccessOverviewPage, AdminAutomationEventsPage, AdminLogsPage } from './pages/admin'; +import { AdminMandateWizardPage, AdminInvitationWizardPage } from './pages/admin/wizards'; import { PlaygroundPage, WorkflowsPage, AutomationsPage } from './pages/workflows'; import { PromptsPage, FilesPage, ConnectionsPage } from './pages/basedata'; import { BillingDataView, BillingAdmin } from './pages/billing'; diff --git a/src/pages/admin/AccessManagementHub.tsx b/src/pages/admin/AccessManagementHub.tsx index d522ea7..13c795e 100644 --- a/src/pages/admin/AccessManagementHub.tsx +++ b/src/pages/admin/AccessManagementHub.tsx @@ -20,7 +20,7 @@ import api from '../../api'; import styles from './Admin.module.css'; import hubStyles from './AccessManagementHub.module.css'; import { InstanceDetailModal } from './InstanceDetailModal'; -import { FeatureInstanceWizard } from './FeatureInstanceWizard'; +import { FeatureInstanceWizard } from './wizards/FeatureInstanceWizard'; import { InstanceHierarchyView } from './InstanceHierarchyView'; function getMandateName(mandate: Mandate): string { diff --git a/src/pages/admin/index.ts b/src/pages/admin/index.ts index 4c27ffd..34656d2 100644 --- a/src/pages/admin/index.ts +++ b/src/pages/admin/index.ts @@ -17,5 +17,3 @@ export { AdminMandateRolePermissionsPage } from './AdminMandateRolePermissionsPa export { AdminUserAccessOverviewPage } from './AdminUserAccessOverviewPage'; export { AdminAutomationEventsPage } from './AdminAutomationEventsPage'; export { AdminLogsPage } from './AdminLogsPage'; -export { default as AdminMandateWizardPage } from './AdminMandateWizardPage'; -export { default as AdminInvitationWizardPage } from './AdminInvitationWizardPage'; diff --git a/src/pages/admin/AdminInvitationWizardPage.tsx b/src/pages/admin/wizards/AdminInvitationWizardPage.tsx similarity index 97% rename from src/pages/admin/AdminInvitationWizardPage.tsx rename to src/pages/admin/wizards/AdminInvitationWizardPage.tsx index bccd17a..17b0f21 100644 --- a/src/pages/admin/AdminInvitationWizardPage.tsx +++ b/src/pages/admin/wizards/AdminInvitationWizardPage.tsx @@ -10,10 +10,10 @@ */ import React, { useState, useEffect } from 'react'; -import { useInvitations, type InvitationCreate } from '../../hooks/useInvitations'; -import { useUserMandates, type Mandate, type Role } from '../../hooks/useUserMandates'; -import { useFeatureAccess, type FeatureInstance, type FeatureInstanceRole } from '../../hooks/useFeatureAccess'; -import styles from './Admin.module.css'; +import { useInvitations, type InvitationCreate } from '../../../hooks/useInvitations'; +import { useUserMandates, type Mandate, type Role } from '../../../hooks/useUserMandates'; +import { useFeatureAccess, type FeatureInstance, type FeatureInstanceRole } from '../../../hooks/useFeatureAccess'; +import styles from '../Admin.module.css'; // ============================================================================= // TYPES @@ -439,7 +439,7 @@ export const AdminInvitationWizardPage: React.FC = () => { {step < 5 && _renderStepIndicator()} - {/* ═══ STEP 1: SELECT MANDATE ═══ */} + {/* ── STEP 1: SELECT MANDATE ── */} {step === 1 && (

Schritt 1: Mandant auswaehlen

@@ -469,7 +469,7 @@ export const AdminInvitationWizardPage: React.FC = () => {
)} - {/* ═══ STEP 2: MANDATE INVITEES ═══ */} + {/* ── STEP 2: MANDATE INVITEES ── */} {step === 2 && (
@@ -498,7 +498,7 @@ export const AdminInvitationWizardPage: React.FC = () => {
)} - {/* ═══ STEP 3: FEATURE INSTANCE (optional) ═══ */} + {/* ── STEP 3: FEATURE INSTANCE (optional) ── */} {step === 3 && !skipInstance && (
@@ -535,7 +535,7 @@ export const AdminInvitationWizardPage: React.FC = () => {
)} - {/* ═══ STEP 4: INSTANCE INVITEES ═══ */} + {/* ── STEP 4: INSTANCE INVITEES ── */} {step === 4 && !skipInstance && selectedInstance && (
@@ -559,7 +559,7 @@ export const AdminInvitationWizardPage: React.FC = () => {
)} - {/* ═══ DISPATCH / SUMMARY STEP ═══ */} + {/* ── DISPATCH / SUMMARY STEP ── */} {((step === 3 && skipInstance) || (step === 5 && !dispatchResults)) && (

Zusammenfassung & Versand

@@ -610,7 +610,7 @@ export const AdminInvitationWizardPage: React.FC = () => {
)} - {/* ═══ RESULTS ═══ */} + {/* ── RESULTS ── */} {step === 5 && dispatchResults && (

Ergebnis

diff --git a/src/pages/admin/AdminMandateWizardPage.tsx b/src/pages/admin/wizards/AdminMandateWizardPage.tsx similarity index 77% rename from src/pages/admin/AdminMandateWizardPage.tsx rename to src/pages/admin/wizards/AdminMandateWizardPage.tsx index 1f431d6..c44b90a 100644 --- a/src/pages/admin/AdminMandateWizardPage.tsx +++ b/src/pages/admin/wizards/AdminMandateWizardPage.tsx @@ -14,17 +14,17 @@ import { type MandateUser, type Mandate, type Role, -} from '../../hooks/useUserMandates'; +} from '../../../hooks/useUserMandates'; import { useFeatureAccess, type FeatureInstance, type FeatureAccessUser, type FeatureInstanceRole, type Feature, -} from '../../hooks/useFeatureAccess'; -import { useToast } from '../../contexts/ToastContext'; -import api from '../../api'; -import styles from './Admin.module.css'; +} from '../../../hooks/useFeatureAccess'; +import { useToast } from '../../../contexts/ToastContext'; +import api from '../../../api'; +import styles from '../Admin.module.css'; const TOTAL_STEPS = 4; const STEP_LABELS = ['Mandant', 'Benutzer', 'Instances', 'Feature-Benutzer']; @@ -89,9 +89,9 @@ export const AdminMandateWizardPage: React.FC = () => { const [isAddingInstanceUser, setIsAddingInstanceUser] = useState(false); const [addInstanceUserForm, setAddInstanceUserForm] = useState({ userId: '', roleIds: [] as string[] }); - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── // HELPERS - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── const getMandateName = (m: Mandate | Record): string => { if (m.label) return m.label; @@ -117,9 +117,9 @@ export const AdminMandateWizardPage: React.FC = () => { return parts.length > 0 ? parts.join(' ') : u.username; }; - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── // DATA LOADING - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── const loadMandates = useCallback(async () => { try { @@ -194,9 +194,9 @@ export const AdminMandateWizardPage: React.FC = () => { } }, [step, selectedInstance, loadInstanceUsers, loadInstanceRoles, loadMandateUsers]); - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── // HANDLERS - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── const handleCreateMandate = async () => { if (!mandateForm.name.trim()) { setError('Name ist erforderlich'); return; } @@ -318,9 +318,9 @@ export const AdminMandateWizardPage: React.FC = () => { } }; - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── // COMPUTED - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── const availableUsersForMandate = allSystemUsers.filter( u => !mandateUsers.some(mu => mu.userId === u.id) @@ -330,9 +330,9 @@ export const AdminMandateWizardPage: React.FC = () => { mu => !instanceUsers.some(iu => iu.userId === mu.userId) ); - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── // SHARED UI - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── const renderUserTable = ( users: Array<{ userId?: string; id?: string; username: string; email?: string | null; fullName?: string; firstname?: string | null; lastname?: string | null; enabled?: boolean; roleLabels?: string[] }>, @@ -454,9 +454,9 @@ export const AdminMandateWizardPage: React.FC = () => {
); - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── // STEP INDICATOR - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── const renderStepIndicator = () => (
@@ -492,9 +492,9 @@ export const AdminMandateWizardPage: React.FC = () => {
); - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── // CARD WRAPPER (reusable section container matching poweron theme) - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── const cardStyle: React.CSSProperties = { background: 'var(--surface-color, #fff)', @@ -503,9 +503,9 @@ export const AdminMandateWizardPage: React.FC = () => { padding: '24px', }; - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── // RENDER - // ═══════════════════════════════════════════════════════════════════════════ + // ───────────────────────────────────────────────────────────────────────── return (
@@ -529,7 +529,7 @@ export const AdminMandateWizardPage: React.FC = () => { {renderStepIndicator()} - {/* ═══ STEP 1: MANDATE ═══ */} + {/* ── STEP 1: MANDATE ── */} {step === 1 && (

Mandant auswählen oder erstellen

@@ -590,7 +590,7 @@ export const AdminMandateWizardPage: React.FC = () => {
)} - {/* ═══ STEP 2: MANDATE USERS ═══ */} + {/* ── STEP 2: MANDATE USERS ── */} {step === 2 && selectedMandate && (
@@ -632,7 +632,7 @@ export const AdminMandateWizardPage: React.FC = () => {
)} - {/* ═══ STEP 3: INSTANCES ═══ */} + {/* ── STEP 3: INSTANCES ── */} {step === 3 && selectedMandate && (
@@ -754,7 +754,7 @@ export const AdminMandateWizardPage: React.FC = () => {
)} - {/* ═══ STEP 4: FEATURE INSTANCE USERS ═══ */} + {/* ── STEP 4: FEATURE INSTANCE USERS ── */} {step === 4 && selectedMandate && selectedInstance && (
@@ -807,4 +807,3 @@ export const AdminMandateWizardPage: React.FC = () => { }; export default AdminMandateWizardPage; - diff --git a/src/pages/admin/FeatureInstanceWizard.module.css b/src/pages/admin/wizards/FeatureInstanceWizard.module.css similarity index 100% rename from src/pages/admin/FeatureInstanceWizard.module.css rename to src/pages/admin/wizards/FeatureInstanceWizard.module.css diff --git a/src/pages/admin/FeatureInstanceWizard.tsx b/src/pages/admin/wizards/FeatureInstanceWizard.tsx similarity index 96% rename from src/pages/admin/FeatureInstanceWizard.tsx rename to src/pages/admin/wizards/FeatureInstanceWizard.tsx index 3d4fb9d..927c7c6 100644 --- a/src/pages/admin/FeatureInstanceWizard.tsx +++ b/src/pages/admin/wizards/FeatureInstanceWizard.tsx @@ -5,13 +5,13 @@ */ import React, { useState, useMemo } from 'react'; -import { useFeatureAccess } from '../../hooks/useFeatureAccess'; -import { FormGeneratorForm, type AttributeDefinition } from '../../components/FormGenerator/FormGeneratorForm'; -import { useToast } from '../../contexts/ToastContext'; -import api from '../../api'; -import type { Mandate } from '../../hooks/useUserMandates'; -import type { Feature } from '../../hooks/useFeatureAccess'; -import styles from './Admin.module.css'; +import { useFeatureAccess } from '../../../hooks/useFeatureAccess'; +import { FormGeneratorForm, type AttributeDefinition } from '../../../components/FormGenerator/FormGeneratorForm'; +import { useToast } from '../../../contexts/ToastContext'; +import api from '../../../api'; +import type { Mandate } from '../../../hooks/useUserMandates'; +import type { Feature } from '../../../hooks/useFeatureAccess'; +import styles from '../Admin.module.css'; import wizardStyles from './FeatureInstanceWizard.module.css'; function getMandateName(m: Mandate): string { diff --git a/src/pages/admin/wizards/index.ts b/src/pages/admin/wizards/index.ts new file mode 100644 index 0000000..cc6c011 --- /dev/null +++ b/src/pages/admin/wizards/index.ts @@ -0,0 +1,9 @@ +/** + * Wizards Index + * + * Export wizard pages and components for easy importing + */ + +export { default as AdminMandateWizardPage } from './AdminMandateWizardPage'; +export { default as AdminInvitationWizardPage } from './AdminInvitationWizardPage'; +export { default as FeatureInstanceWizard } from './FeatureInstanceWizard';