From 8033ca920752eec5c8f6da4a0edbbf0cea4608fe Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Sat, 17 Jan 2026 02:18:24 +0100 Subject: [PATCH 01/19] prepared multimandate --- src/App.tsx | 95 ++++- src/api/featuresApi.ts | 233 ++++++++++++ .../Navigation/MandateNavigation.module.css | 352 ++++++++++++++++++ .../Navigation/MandateNavigation.tsx | 347 +++++++++++++++++ src/components/Navigation/index.ts | 5 + src/hooks/useCurrentInstance.ts | 137 +++++++ src/hooks/useInstancePermissions.ts | 299 +++++++++++++++ src/layouts/FeatureLayout.module.css | 174 +++++++++ src/layouts/FeatureLayout.tsx | 151 ++++++++ src/layouts/MainLayout.module.css | 132 +++++++ src/layouts/MainLayout.tsx | 83 +++++ src/layouts/index.ts | 6 + src/pages/Dashboard.module.css | 247 ++++++++++++ src/pages/Dashboard.tsx | 139 +++++++ src/pages/FeatureView.module.css | 122 ++++++ src/pages/FeatureView.tsx | 202 ++++++++++ src/pages/Settings.module.css | 267 +++++++++++++ src/pages/Settings.tsx | 146 ++++++++ src/pages/index.ts | 7 + src/stores/featureStore.tsx | 280 ++++++++++++++ src/types/mandate.ts | 257 +++++++++++++ src/utils/userCache.ts | 4 +- 22 files changed, 3666 insertions(+), 19 deletions(-) create mode 100644 src/api/featuresApi.ts create mode 100644 src/components/Navigation/MandateNavigation.module.css create mode 100644 src/components/Navigation/MandateNavigation.tsx create mode 100644 src/components/Navigation/index.ts create mode 100644 src/hooks/useCurrentInstance.ts create mode 100644 src/hooks/useInstancePermissions.ts create mode 100644 src/layouts/FeatureLayout.module.css create mode 100644 src/layouts/FeatureLayout.tsx create mode 100644 src/layouts/MainLayout.module.css create mode 100644 src/layouts/MainLayout.tsx create mode 100644 src/layouts/index.ts create mode 100644 src/pages/Dashboard.module.css create mode 100644 src/pages/Dashboard.tsx create mode 100644 src/pages/FeatureView.module.css create mode 100644 src/pages/FeatureView.tsx create mode 100644 src/pages/Settings.module.css create mode 100644 src/pages/Settings.tsx create mode 100644 src/pages/index.ts create mode 100644 src/stores/featureStore.tsx create mode 100644 src/types/mandate.ts diff --git a/src/App.tsx b/src/App.tsx index de17105..51b89f3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,20 +1,40 @@ +/** + * App.tsx + * + * Haupt-App-Komponente mit Multi-Tenant Router-Setup. + * + * URL-Struktur: + * - / → Dashboard/Übersicht + * - /settings → Benutzer-Einstellungen + * - /mandates/:mandateId/:featureCode/:instanceId/* → Feature-Instanz-Routen + * - /admin/* → System-Administration (nur SysAdmin) + */ + import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { useEffect } from 'react'; // Import global CSS reset first import './index.css'; +// Auth Pages (Public) import Login from './pages/Login'; import Register from './pages/Register'; import PasswordResetRequest from './pages/PasswordResetRequest'; import Reset from './pages/Reset'; +// Providers import { AuthProvider } from './providers/auth/AuthProvider'; import { ProtectedRoute } from './providers/auth/ProtectedRoute'; import { LanguageProvider } from './providers/language/LanguageContext'; -import { WorkflowSelectionProvider } from './contexts/WorkflowSelectionContext'; -import { FileProvider } from './contexts/FileContext'; -import Home from './pages/Home/Home'; + +// Layouts +import { MainLayout } from './layouts/MainLayout'; +import { FeatureLayout } from './layouts/FeatureLayout'; + +// Pages +import { DashboardPage } from './pages/Dashboard'; +import { SettingsPage } from './pages/Settings'; +import { FeatureViewPage } from './pages/FeatureView'; function App() { // Load saved theme preference and set app name on app mount @@ -38,36 +58,75 @@ function App() { } document.documentElement.setAttribute('data-theme', prefersDark ? 'dark' : 'light'); }, []); + return ( - {/* PUBLIC AUTH ROUTES - NO AUTHENTICATION REQUIRED */} + {/* ================================================== */} + {/* PUBLIC AUTH ROUTES - NO AUTHENTICATION REQUIRED */} + {/* ================================================== */} } /> } /> } /> } /> - {/* PROTECTED ROUTE - requires authentication */} + {/* ================================================== */} + {/* PROTECTED ROUTES - REQUIRE AUTHENTICATION */} + {/* ================================================== */} - - - - - + - } /> + }> + {/* Dashboard (Root) */} + } /> + + {/* System-Seiten (ohne Instanz-Kontext) */} + } /> + + {/* ============================================== */} + {/* FEATURE-INSTANZ ROUTES */} + {/* /mandates/:mandateId/:featureCode/:instanceId */} + {/* ============================================== */} + } + > + {/* Feature Views - dynamisch basierend auf featureCode */} + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + {/* Catch-all für unbekannte Sub-Pfade */} + } /> + + + {/* ============================================== */} + {/* ADMIN ROUTES (nur SysAdmin) */} + {/* ============================================== */} + + Admin: Mandanten (TODO)} /> + Admin: Benutzer (TODO)} /> + Admin: Globale Rollen (TODO)} /> + + - {/* Catch-all redirect to home */} + {/* ================================================== */} + {/* CATCH-ALL - Redirect to Dashboard */} + {/* ================================================== */} - - - - - + } /> @@ -77,4 +136,4 @@ function App() { ); } -export default App; \ No newline at end of file +export default App; diff --git a/src/api/featuresApi.ts b/src/api/featuresApi.ts new file mode 100644 index 0000000..2ea691f --- /dev/null +++ b/src/api/featuresApi.ts @@ -0,0 +1,233 @@ +/** + * Features API + * + * API-Schicht für das Multi-Tenant Feature-System. + * Hauptendpoint: GET /features/my - Lädt alle Mandate + Features + Instanzen + Permissions + */ + +import api from '../api'; +import type { + FeaturesMyResponse, + Mandate, + MandateFeature, + FeatureInstance, + InstancePermissions, + AccessLevel, +} from '../types/mandate'; + +// ============================================================================= +// MOCK DATA (Temporär bis Backend bereit) +// ============================================================================= + +const MOCK_PERMISSIONS: InstancePermissions = { + tables: { + TrusteeOrganisation: { view: true, read: 'g', create: 'g', update: 'g', delete: 'n' }, + TrusteeContract: { view: true, read: 'g', create: 'g', update: 'm', delete: 'n' }, + TrusteeDocument: { view: true, read: 'g', create: 'g', update: 'm', delete: 'm' }, + TrusteePosition: { view: true, read: 'g', create: 'g', update: 'm', delete: 'n' }, + }, + views: { + 'trustee-dashboard': true, + 'trustee-organisations': true, + 'trustee-contracts': true, + 'trustee-documents': true, + 'trustee-positions': true, + 'trustee-roles': true, + 'trustee-access': true, + }, +}; + +const MOCK_CUSTOMER_PERMISSIONS: InstancePermissions = { + tables: { + TrusteeOrganisation: { view: true, read: 'm', create: 'n', update: 'n', delete: 'n' }, + TrusteeContract: { view: true, read: 'm', create: 'n', update: 'n', delete: 'n' }, + TrusteeDocument: { view: true, read: 'm', create: 'm', update: 'm', delete: 'n' }, + TrusteePosition: { view: true, read: 'm', create: 'n', update: 'n', delete: 'n' }, + }, + views: { + 'trustee-dashboard': true, + 'trustee-contracts': true, + 'trustee-documents': true, + 'trustee-positions': true, + 'trustee-organisations': false, + 'trustee-roles': false, + 'trustee-access': false, + }, +}; + +const MOCK_WORKFLOW_PERMISSIONS: InstancePermissions = { + tables: { + WorkflowRun: { view: true, read: 'g', create: 'g', update: 'm', delete: 'n' }, + WorkflowFile: { view: true, read: 'g', create: 'g', update: 'm', delete: 'm' }, + }, + views: { + 'chatworkflow-dashboard': true, + 'chatworkflow-runs': true, + 'chatworkflow-files': true, + }, +}; + +const MOCK_RESPONSE: FeaturesMyResponse = { + mandates: [ + { + id: 'mand-soha', + name: 'Soha Treuhand', + code: 'soha', + features: [ + { + code: 'trustee', + label: { de: 'Treuhand', en: 'Trustee' }, + icon: 'briefcase', + instances: [ + { + id: 'inst-soha-pamo', + featureCode: 'trustee', + mandateId: 'mand-soha', + mandateName: 'Soha Treuhand', + instanceLabel: 'PamoCreate AG', + userRole: 'admin', + permissions: MOCK_PERMISSIONS, + }, + { + id: 'inst-soha-valueon', + featureCode: 'trustee', + mandateId: 'mand-soha', + mandateName: 'Soha Treuhand', + instanceLabel: 'ValueOn AG', + userRole: 'customer', + permissions: MOCK_CUSTOMER_PERMISSIONS, + }, + ], + }, + { + code: 'chatworkflow', + label: { de: 'Workflow', en: 'Workflow' }, + icon: 'play_circle', + instances: [ + { + id: 'inst-soha-workflow', + featureCode: 'chatworkflow', + mandateId: 'mand-soha', + mandateName: 'Soha Treuhand', + instanceLabel: 'Beratung Dynamic', + userRole: 'user', + permissions: MOCK_WORKFLOW_PERMISSIONS, + }, + ], + }, + ], + }, + { + id: 'mand-swiss', + name: 'SwissTreu', + code: 'swisstreu', + features: [ + { + code: 'trustee', + label: { de: 'Treuhand', en: 'Trustee' }, + icon: 'briefcase', + instances: [ + { + id: 'inst-swiss-firma-x', + featureCode: 'trustee', + mandateId: 'mand-swiss', + mandateName: 'SwissTreu', + instanceLabel: 'Firma X', + userRole: 'customer', + permissions: MOCK_CUSTOMER_PERMISSIONS, + }, + ], + }, + ], + }, + ], +}; + +// Flag für Mock-Modus (auf false setzen wenn Backend bereit) +const USE_MOCK = true; + +// ============================================================================= +// API FUNCTIONS +// ============================================================================= + +/** + * Lädt alle Mandate + Features + Instanzen + Permissions für den aktuellen User + * + * Endpoint: GET /api/features/my + * + * Response enthält: + * - Alle Mandanten zu denen der User Zugriff hat + * - Pro Mandant: Alle Features mit deren Instanzen + * - Pro Instanz: Summarische Berechtigungen (tables, views) + */ +export async function fetchMyFeatures(): Promise { + if (USE_MOCK) { + console.log('📦 featuresApi: Using MOCK data'); + // Simuliere Netzwerk-Latenz + await new Promise(resolve => setTimeout(resolve, 300)); + return MOCK_RESPONSE; + } + + try { + console.log('📡 featuresApi: Fetching /api/features/my'); + const response = await api.get('/api/features/my'); + console.log('✅ featuresApi: Loaded features:', { + mandateCount: response.data.mandates.length, + totalInstances: response.data.mandates + .flatMap(m => m.features) + .flatMap(f => f.instances) + .length, + }); + return response.data; + } catch (error) { + console.error('❌ featuresApi: Error fetching features:', error); + throw error; + } +} + +/** + * Lädt die verfügbaren Features (für Admin - Feature-Instanz erstellen) + * + * Endpoint: GET /api/features/available + */ +export async function fetchAvailableFeatures(): Promise { + if (USE_MOCK) { + return [ + { code: 'trustee', label: { de: 'Treuhand', en: 'Trustee' }, icon: 'briefcase', instances: [] }, + { code: 'chatworkflow', label: { de: 'Workflow', en: 'Workflow' }, icon: 'play_circle', instances: [] }, + { code: 'chatbot', label: { de: 'Chatbot', en: 'Chatbot' }, icon: 'chat', instances: [] }, + ]; + } + + const response = await api.get('/api/features/available'); + return response.data; +} + +// ============================================================================= +// TYPE GUARDS +// ============================================================================= + +export function isValidAccessLevel(value: string): value is AccessLevel { + return ['n', 'm', 'g', 'a'].includes(value); +} + +export function isValidMandate(obj: unknown): obj is Mandate { + if (!obj || typeof obj !== 'object') return false; + const mandate = obj as Record; + return ( + typeof mandate.id === 'string' && + typeof mandate.name === 'string' && + Array.isArray(mandate.features) + ); +} + +export function isValidFeatureInstance(obj: unknown): obj is FeatureInstance { + if (!obj || typeof obj !== 'object') return false; + const instance = obj as Record; + return ( + typeof instance.id === 'string' && + typeof instance.featureCode === 'string' && + typeof instance.mandateId === 'string' && + typeof instance.instanceLabel === 'string' + ); +} diff --git a/src/components/Navigation/MandateNavigation.module.css b/src/components/Navigation/MandateNavigation.module.css new file mode 100644 index 0000000..150f65c --- /dev/null +++ b/src/components/Navigation/MandateNavigation.module.css @@ -0,0 +1,352 @@ +/** + * MandateNavigation Styles + * + * Hierarchische Navigation: + * System → Mandant → Feature → Instanz → Views + */ + +.navigation { + display: flex; + flex-direction: column; + gap: 0.25rem; + padding: 0 0.5rem; +} + +/* Separator */ +.separator { + height: 1px; + background: var(--border-color, #e0e0e0); + margin: 0.75rem 0.5rem; +} + +/* Section (System, Admin) */ +.section { + margin-bottom: 0.5rem; +} + +.sectionHeader { + padding: 0.5rem 0.75rem; +} + +.sectionTitle { + font-size: 0.65rem; + font-weight: 600; + letter-spacing: 0.1em; + color: var(--text-tertiary, #888); + text-transform: uppercase; +} + +.sectionContent { + display: flex; + flex-direction: column; + gap: 2px; +} + +/* Nav Item (Links) */ +.navItem { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 0.625rem 0.75rem; + border-radius: 6px; + color: var(--text-secondary, #666); + text-decoration: none; + font-size: 0.875rem; + transition: all 0.15s ease; +} + +.navItem:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.04)); + color: var(--text-primary, #1a1a1a); +} + +.navItem.active { + background: var(--primary-light, #e0e7ff); + color: var(--primary-color, #2563eb); + font-weight: 500; +} + +.navIcon { + font-size: 1rem; + flex-shrink: 0; +} + +/* Mandate Group */ +.mandateGroup { + margin-bottom: 0.25rem; +} + +.mandateHeader { + display: flex; + align-items: center; + gap: 0.5rem; + width: 100%; + padding: 0.625rem 0.75rem; + border: none; + border-radius: 6px; + background: transparent; + cursor: pointer; + font-size: 0.875rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); + transition: background 0.15s ease; +} + +.mandateHeader:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.04)); +} + +.mandateLabel { + flex: 1; + text-align: left; +} + +.mandateContent { + margin-left: 0.25rem; + padding-left: 0.75rem; + border-left: 2px solid var(--border-color, #e0e0e0); +} + +.activeMandate > .mandateContent { + border-left-color: var(--primary-color, #2563eb); +} + +/* Feature Group */ +.featureGroup { + margin-bottom: 0.25rem; +} + +.featureHeader { + display: flex; + align-items: center; + gap: 0.5rem; + width: 100%; + padding: 0.5rem 0.75rem; + border: none; + border-radius: 6px; + background: transparent; + cursor: pointer; + font-size: 0.8125rem; + color: var(--text-secondary, #666); + transition: background 0.15s ease; +} + +.featureHeader:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.04)); +} + +.featureIcon { + display: flex; + align-items: center; + font-size: 0.875rem; +} + +.featureLabel { + flex: 1; + text-align: left; + font-weight: 500; +} + +.instanceCount { + font-size: 0.6875rem; + padding: 0.125rem 0.375rem; + background: var(--surface-color, #f0f0f0); + border-radius: 9999px; + color: var(--text-tertiary, #888); +} + +.featureContent { + margin-left: 0.25rem; + padding-left: 0.75rem; +} + +.activeFeature > .featureHeader { + color: var(--primary-color, #2563eb); +} + +/* Instance Group */ +.instanceGroup { + margin-bottom: 0.125rem; +} + +.instanceHeader { + display: flex; + align-items: center; + gap: 0.375rem; + width: 100%; + padding: 0.375rem 0.5rem; + border: none; + border-radius: 6px; + background: transparent; + cursor: pointer; + font-size: 0.75rem; + color: var(--text-secondary, #666); + transition: background 0.15s ease; +} + +.instanceHeader:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.04)); +} + +.instanceLabel { + flex: 1; + text-align: left; + font-weight: 500; +} + +.roleBadge { + font-size: 0.625rem; + padding: 0.0625rem 0.375rem; + background: var(--surface-color, #f0f0f0); + border-radius: 9999px; + color: var(--text-tertiary, #888); + text-transform: uppercase; + letter-spacing: 0.025em; +} + +.instanceViews { + margin-left: 0.25rem; + padding-left: 1rem; +} + +.activeInstance > .instanceHeader { + color: var(--primary-color, #2563eb); + background: var(--primary-light, #e0e7ff); +} + +.activeInstance .roleBadge { + background: var(--primary-color, #2563eb); + color: white; +} + +/* View Item */ +.viewItem { + display: block; + padding: 0.375rem 0.5rem; + border-radius: 4px; + color: var(--text-secondary, #666); + text-decoration: none; + font-size: 0.75rem; + transition: all 0.15s ease; +} + +.viewItem:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.04)); + color: var(--text-primary, #1a1a1a); +} + +.viewItem.active { + background: var(--primary-light, #e0e7ff); + color: var(--primary-color, #2563eb); + font-weight: 500; +} + +/* Chevron */ +.chevron { + font-size: 0.625rem; + color: var(--text-tertiary, #888); + flex-shrink: 0; +} + +/* Empty State */ +.emptyState { + padding: 1.5rem 1rem; + text-align: center; + color: var(--text-secondary, #666); + font-size: 0.875rem; +} + +.emptyHint { + font-size: 0.75rem; + color: var(--text-tertiary, #888); + margin-top: 0.5rem; +} + +/* Dark Theme */ +:global(.dark-theme) .separator { + background: var(--border-dark, #333); +} + +:global(.dark-theme) .sectionTitle { + color: var(--text-tertiary-dark, #666); +} + +:global(.dark-theme) .navItem { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .navItem:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06)); + color: var(--text-primary-dark, #fff); +} + +:global(.dark-theme) .navItem.active { + background: var(--primary-dark-bg, #1e3a5f); + color: var(--primary-light, #93c5fd); +} + +:global(.dark-theme) .mandateHeader { + color: var(--text-primary-dark, #fff); +} + +:global(.dark-theme) .mandateHeader:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06)); +} + +:global(.dark-theme) .mandateContent { + border-left-color: var(--border-dark, #444); +} + +:global(.dark-theme) .activeMandate > .mandateContent { + border-left-color: var(--primary-light, #93c5fd); +} + +:global(.dark-theme) .featureHeader { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .featureHeader:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06)); +} + +:global(.dark-theme) .activeFeature > .featureHeader { + color: var(--primary-light, #93c5fd); +} + +:global(.dark-theme) .instanceCount, +:global(.dark-theme) .roleBadge { + background: var(--surface-dark, #2a2a2a); + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .instanceHeader { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .instanceHeader:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06)); +} + +:global(.dark-theme) .activeInstance > .instanceHeader { + color: var(--primary-light, #93c5fd); + background: var(--primary-dark-bg, #1e3a5f); +} + +:global(.dark-theme) .activeInstance .roleBadge { + background: var(--primary-color, #2563eb); + color: white; +} + +:global(.dark-theme) .viewItem { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .viewItem:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06)); + color: var(--text-primary-dark, #fff); +} + +:global(.dark-theme) .viewItem.active { + background: var(--primary-dark-bg, #1e3a5f); + color: var(--primary-light, #93c5fd); +} diff --git a/src/components/Navigation/MandateNavigation.tsx b/src/components/Navigation/MandateNavigation.tsx new file mode 100644 index 0000000..2986e70 --- /dev/null +++ b/src/components/Navigation/MandateNavigation.tsx @@ -0,0 +1,347 @@ +/** + * MandateNavigation + * + * Hierarchische Navigation für das Multi-Tenant-System. + * + * Struktur: + * - SYSTEM (immer verfügbar) + * - Mandant 1 + * - Feature A + * - Instanz 1 (mit Views) + * - Instanz 2 (mit Views) + * - Feature B + * - Instanz 3 (mit Views) + * - Mandant 2 + * - ... + * - ADMINISTRATION (nur für SysAdmin) + */ + +import React, { useState } from 'react'; +import { NavLink, useLocation } from 'react-router-dom'; +import { useMandates, useFeatureStore } from '../../stores/featureStore'; +import { FEATURE_REGISTRY, getLabel } from '../../types/mandate'; +import type { Mandate, MandateFeature, FeatureInstance } from '../../types/mandate'; +import { FaHome, FaCog, FaChevronDown, FaChevronRight, FaBriefcase, FaRobot, FaPlay } from 'react-icons/fa'; +import { RiAdminFill } from 'react-icons/ri'; +import styles from './MandateNavigation.module.css'; + +// ============================================================================= +// ICON MAPPING +// ============================================================================= + +const FEATURE_ICONS: Record = { + trustee: , + chatbot: , + chatworkflow: , +}; + +// ============================================================================= +// SYSTEM SECTION +// ============================================================================= + +const SystemSection: React.FC = () => { + const location = useLocation(); + + return ( +
+
+ SYSTEM +
+
+ + `${styles.navItem} ${isActive && location.pathname === '/' ? styles.active : ''}` + } + > + + Übersicht + + + `${styles.navItem} ${isActive ? styles.active : ''}` + } + > + + Einstellungen + +
+
+ ); +}; + +// ============================================================================= +// INSTANCE NAV GROUP +// ============================================================================= + +interface InstanceNavGroupProps { + instance: FeatureInstance; + mandateId: string; + featureCode: string; +} + +const InstanceNavGroup: React.FC = ({ + instance, + mandateId, + featureCode, +}) => { + const [isExpanded, setIsExpanded] = useState(false); + const location = useLocation(); + + // Prüfe ob wir in dieser Instanz sind + const basePath = `/mandates/${mandateId}/${featureCode}/${instance.id}`; + const isInInstance = location.pathname.startsWith(basePath); + + // Auto-expand wenn wir in der Instanz sind + React.useEffect(() => { + if (isInInstance && !isExpanded) { + setIsExpanded(true); + } + }, [isInInstance]); + + // Views aus Registry holen + const featureConfig = FEATURE_REGISTRY[featureCode]; + const views = featureConfig?.views || []; + + // Nur Views anzeigen für die der User Berechtigung hat + const visibleViews = views.filter(view => { + const viewCode = `${featureCode}-${view.code}`; + return instance.permissions?.views?.[viewCode] !== false; + }); + + return ( +
+ + + {isExpanded && ( +
+ {visibleViews.map(view => ( + + `${styles.viewItem} ${isActive ? styles.active : ''}` + } + > + {getLabel(view.label)} + + ))} +
+ )} +
+ ); +}; + +// ============================================================================= +// FEATURE NAV GROUP +// ============================================================================= + +interface FeatureNavGroupProps { + feature: MandateFeature; + mandateId: string; +} + +const FeatureNavGroup: React.FC = ({ feature, mandateId }) => { + const [isExpanded, setIsExpanded] = useState(false); + const location = useLocation(); + + // Prüfe ob wir in diesem Feature sind + const featurePath = `/mandates/${mandateId}/${feature.code}`; + const isInFeature = location.pathname.startsWith(featurePath); + + // Auto-expand wenn wir im Feature sind + React.useEffect(() => { + if (isInFeature && !isExpanded) { + setIsExpanded(true); + } + }, [isInFeature]); + + if (feature.instances.length === 0) { + return null; + } + + return ( +
+ + + {isExpanded && ( +
+ {feature.instances.map(instance => ( + + ))} +
+ )} +
+ ); +}; + +// ============================================================================= +// MANDATE NAV GROUP +// ============================================================================= + +interface MandateNavGroupProps { + mandate: Mandate; +} + +const MandateNavGroup: React.FC = ({ mandate }) => { + const [isExpanded, setIsExpanded] = useState(true); + const location = useLocation(); + + // Prüfe ob wir in diesem Mandanten sind + const mandatePath = `/mandates/${mandate.id}`; + const isInMandate = location.pathname.startsWith(mandatePath); + + if (mandate.features.length === 0) { + return null; + } + + return ( +
+ + + {isExpanded && ( +
+ {mandate.features.map(feature => ( + + ))} +
+ )} +
+ ); +}; + +// ============================================================================= +// ADMIN SECTION +// ============================================================================= + +interface AdminSectionProps { + isSysAdmin: boolean; +} + +const AdminSection: React.FC = ({ isSysAdmin }) => { + if (!isSysAdmin) { + return null; + } + + return ( +
+
+ ADMINISTRATION +
+
+ + `${styles.navItem} ${isActive ? styles.active : ''}` + } + > + + Mandanten + + + `${styles.navItem} ${isActive ? styles.active : ''}` + } + > + + Benutzer + + + `${styles.navItem} ${isActive ? styles.active : ''}` + } + > + + Globale Rollen + +
+
+ ); +}; + +// ============================================================================= +// EMPTY STATE +// ============================================================================= + +const EmptyState: React.FC = () => ( +
+

Keine Feature-Instanzen verfügbar.

+

+ Kontaktiere einen Administrator, um Zugriff zu erhalten. +

+
+); + +// ============================================================================= +// MAIN COMPONENT +// ============================================================================= + +export const MandateNavigation: React.FC = () => { + const mandates = useMandates(); + const { hasAnyInstance } = useFeatureStore(); + + // TODO: Aus Auth-Store holen + const isSysAdmin = false; + + return ( +
+ {/* System-Bereich (immer sichtbar) */} + + + {/* Separator */} +
+ + {/* Mandanten & Features */} + {hasAnyInstance() ? ( + mandates.map(mandate => ( + + )) + ) : ( + + )} + + {/* Separator vor Admin */} + {isSysAdmin &&
} + + {/* Admin-Bereich (nur für SysAdmin) */} + +
+ ); +}; + +export default MandateNavigation; diff --git a/src/components/Navigation/index.ts b/src/components/Navigation/index.ts new file mode 100644 index 0000000..f0d25c6 --- /dev/null +++ b/src/components/Navigation/index.ts @@ -0,0 +1,5 @@ +/** + * Navigation Components Export + */ + +export { MandateNavigation } from './MandateNavigation'; diff --git a/src/hooks/useCurrentInstance.ts b/src/hooks/useCurrentInstance.ts new file mode 100644 index 0000000..1efd0d6 --- /dev/null +++ b/src/hooks/useCurrentInstance.ts @@ -0,0 +1,137 @@ +/** + * useCurrentInstance Hook + * + * Liest die aktuelle Feature-Instanz aus den URL-Parametern. + * Die URL-Struktur ist: /mandates/:mandateId/:featureCode/:instanceId/... + * + * Dieser Hook ist die zentrale Stelle um den aktuellen Arbeitskontext zu ermitteln. + */ + +import { useParams } from 'react-router-dom'; +import { useFeatureStore } from '../stores/featureStore'; +import type { FeatureInstance, Mandate, MandateFeature } from '../types/mandate'; + +// ============================================================================= +// URL PARAMETER TYPES +// ============================================================================= + +export interface FeatureRouteParams { + mandateId?: string; + featureCode?: string; + instanceId?: string; + '*'?: string; // Wildcard für Sub-Pfade +} + +// ============================================================================= +// RETURN TYPES +// ============================================================================= + +export interface CurrentInstanceContext { + // Aus URL + mandateId: string | undefined; + featureCode: string | undefined; + instanceId: string | undefined; + + // Aufgelöste Objekte + mandate: Mandate | undefined; + feature: MandateFeature | undefined; + instance: FeatureInstance | undefined; + + // Hilfsfunktionen + isValid: boolean; + isLoading: boolean; +} + +// ============================================================================= +// HOOKS +// ============================================================================= + +/** + * Haupthook für den aktuellen Instanz-Kontext + * + * Verwendung: + * ```tsx + * function ContractList() { + * const { instance, isValid } = useCurrentInstance(); + * + * if (!isValid) { + * return ; + * } + * + * // Arbeite mit instance.permissions, etc. + * } + * ``` + */ +export function useCurrentInstance(): CurrentInstanceContext { + const params = useParams(); + const { getMandateById, getFeatureByCode, getInstanceById, loading } = useFeatureStore(); + + const mandateId = params.mandateId; + const featureCode = params.featureCode; + const instanceId = params.instanceId; + + // Objekte auflösen + const mandate = mandateId ? getMandateById(mandateId) : undefined; + const feature = mandateId && featureCode ? getFeatureByCode(mandateId, featureCode) : undefined; + const instance = instanceId ? getInstanceById(instanceId) : undefined; + + // Validierung: Alle drei müssen vorhanden und konsistent sein + const isValid = !!( + mandate && + feature && + instance && + instance.mandateId === mandateId && + instance.featureCode === featureCode + ); + + return { + mandateId, + featureCode, + instanceId, + mandate, + feature, + instance, + isValid, + isLoading: loading, + }; +} + +/** + * Vereinfachter Hook - gibt nur die Instanz zurück + */ +export function useInstance(): FeatureInstance | undefined { + const { instance } = useCurrentInstance(); + return instance; +} + +/** + * Hook für die Instanz-ID aus der URL + */ +export function useInstanceId(): string | undefined { + const params = useParams(); + return params.instanceId; +} + +/** + * Hook für den Feature-Code aus der URL + */ +export function useFeatureCode(): string | undefined { + const params = useParams(); + return params.featureCode; +} + +/** + * Hook für die Mandate-ID aus der URL + */ +export function useMandateId(): string | undefined { + const params = useParams(); + return params.mandateId; +} + +/** + * Hook der prüft ob wir in einem Feature-Kontext sind + */ +export function useIsInFeatureContext(): boolean { + const { isValid } = useCurrentInstance(); + return isValid; +} diff --git a/src/hooks/useInstancePermissions.ts b/src/hooks/useInstancePermissions.ts new file mode 100644 index 0000000..f16a219 --- /dev/null +++ b/src/hooks/useInstancePermissions.ts @@ -0,0 +1,299 @@ +/** + * Instance Permission Hooks + * + * Hooks für Berechtigungsprüfungen basierend auf der aktuellen Feature-Instanz. + * Die Berechtigungen werden summarisch pro Instanz geladen (kein einzelner API-Call pro Check). + */ + +import { useCallback, useMemo } from 'react'; +import { useCurrentInstance } from './useCurrentInstance'; +import type { + TablePermission, + FieldPermission, + AccessLevel, + InstancePermissions, +} from '../types/mandate'; +import { canAccessRecord, hasAccess } from '../types/mandate'; + +// ============================================================================= +// DEFAULT PERMISSIONS (Kein Zugriff) +// ============================================================================= + +const NO_ACCESS_TABLE: TablePermission = { + view: false, + read: 'n', + create: 'n', + update: 'n', + delete: 'n', +}; + +const NO_ACCESS_FIELD: FieldPermission = { + read: false, + write: false, +}; + +// ============================================================================= +// TABLE PERMISSION HOOKS +// ============================================================================= + +/** + * Hook für Tabellen-Berechtigungen + * + * Verwendung: + * ```tsx + * function ContractList() { + * const { canCreate, canUpdate, canDelete, read } = useTablePermission('TrusteeContract'); + * + * return ( + *
+ * {canCreate && } + * {contracts.map(c => ( + * + * {canUpdate(c) && } + * {canDelete(c) && } + * + * ))} + *
+ * ); + * } + * ``` + */ +export function useTablePermission(tableName: string) { + const { instance } = useCurrentInstance(); + + const permission = useMemo((): TablePermission => { + if (!instance?.permissions?.tables) { + return NO_ACCESS_TABLE; + } + return instance.permissions.tables[tableName] ?? NO_ACCESS_TABLE; + }, [instance, tableName]); + + // Kontext für Record-basierte Prüfungen + const userId = ''; // TODO: Aus Auth-Store holen + + return { + // Raw permission levels + view: permission.view, + read: permission.read, + create: permission.create, + update: permission.update, + delete: permission.delete, + + // Convenience Booleans + canView: permission.view, + canRead: hasAccess(permission.read), + canCreate: hasAccess(permission.create), + canUpdate: hasAccess(permission.update), + canDelete: hasAccess(permission.delete), + + // Record-basierte Prüfungen + canReadRecord: (record: { _createdBy?: string }) => + canAccessRecord(permission.read, record, userId), + canUpdateRecord: (record: { _createdBy?: string }) => + canAccessRecord(permission.update, record, userId), + canDeleteRecord: (record: { _createdBy?: string }) => + canAccessRecord(permission.delete, record, userId), + }; +} + +/** + * Vereinfachter Hook - prüft nur ob Tabelle sichtbar ist + */ +export function useCanViewTable(tableName: string): boolean { + const { canView } = useTablePermission(tableName); + return canView; +} + +// ============================================================================= +// VIEW PERMISSION HOOKS +// ============================================================================= + +/** + * Hook für View-Berechtigungen (Navigation) + * + * Verwendung: + * ```tsx + * function Navigation() { + * const canViewContracts = useCanViewFeatureView('trustee-contracts'); + * + * return ( + * + * ); + * } + * ``` + */ +export function useCanViewFeatureView(viewCode: string): boolean { + const { instance } = useCurrentInstance(); + + if (!instance?.permissions?.views) { + return false; + } + + return instance.permissions.views[viewCode] ?? false; +} + +/** + * Hook für mehrere View-Berechtigungen gleichzeitig + */ +export function useViewPermissions(viewCodes: string[]): Record { + const { instance } = useCurrentInstance(); + + return useMemo(() => { + const result: Record = {}; + + viewCodes.forEach(code => { + result[code] = instance?.permissions?.views?.[code] ?? false; + }); + + return result; + }, [instance, viewCodes]); +} + +// ============================================================================= +// FIELD PERMISSION HOOKS +// ============================================================================= + +/** + * Hook für Feld-Berechtigungen + * + * Verwendung: + * ```tsx + * function ContractForm() { + * const { canRead, canWrite } = useFieldPermission('TrusteeContract', 'salary'); + * + * return ( + *
+ * {canRead && ( + * + * )} + * + * ); + * } + * ``` + */ +export function useFieldPermission(tableName: string, fieldName: string): FieldPermission { + const { instance } = useCurrentInstance(); + + return useMemo(() => { + const fieldPermissions = instance?.permissions?.fields?.[tableName]; + if (!fieldPermissions) { + // Wenn keine Feld-Level Einschränkungen, erlaube alles + return { read: true, write: true }; + } + + return fieldPermissions[fieldName] ?? { read: true, write: true }; + }, [instance, tableName, fieldName]); +} + +// ============================================================================= +// GENERIC PERMISSION CHECK +// ============================================================================= + +/** + * Generischer Hook für beliebige Berechtigungsprüfungen + */ +export function useInstancePermissions(): InstancePermissions | undefined { + const { instance } = useCurrentInstance(); + return instance?.permissions; +} + +/** + * Hook der prüft ob ein Record bearbeitet werden darf + * Kombiniert Tabellen-Permission mit Record-Owner-Check + */ +export function useCanEditRecord( + tableName: string, + record: { _createdBy?: string } | undefined, + userId: string +): boolean { + const { update } = useTablePermission(tableName); + + if (!record) return false; + + return canAccessRecord(update, record, userId); +} + +/** + * Hook der prüft ob ein Record gelöscht werden darf + */ +export function useCanDeleteRecord( + tableName: string, + record: { _createdBy?: string } | undefined, + userId: string +): boolean { + const { delete: deleteLevel } = useTablePermission(tableName); + + if (!record) return false; + + return canAccessRecord(deleteLevel, record, userId); +} + +// ============================================================================= +// PERMISSION GATE COMPONENT +// ============================================================================= + +interface PermissionGateProps { + table?: string; + view?: string; + action?: 'view' | 'read' | 'create' | 'update' | 'delete'; + record?: { _createdBy?: string }; + children: React.ReactNode; + fallback?: React.ReactNode; +} + +/** + * Komponente für bedingte Anzeige basierend auf Berechtigungen + * + * Verwendung: + * ```tsx + * + * + * + * + * }> + * + * + * ``` + */ +export function PermissionGate({ + table, + view, + action = 'view', + record, + children, + fallback = null, +}: PermissionGateProps): React.ReactElement | null { + const { instance } = useCurrentInstance(); + const userId = ''; // TODO: Aus Auth-Store holen + + let hasPermission = false; + + if (view) { + // View-basierte Prüfung + hasPermission = instance?.permissions?.views?.[view] ?? false; + } else if (table) { + // Tabellen-basierte Prüfung + const tablePermission = instance?.permissions?.tables?.[table]; + + if (!tablePermission) { + hasPermission = false; + } else if (action === 'view') { + hasPermission = tablePermission.view; + } else { + const level = tablePermission[action] as AccessLevel; + + if (record) { + hasPermission = canAccessRecord(level, record, userId); + } else { + hasPermission = hasAccess(level); + } + } + } + + return hasPermission ? <>{children} : <>{fallback}; +} diff --git a/src/layouts/FeatureLayout.module.css b/src/layouts/FeatureLayout.module.css new file mode 100644 index 0000000..5cce883 --- /dev/null +++ b/src/layouts/FeatureLayout.module.css @@ -0,0 +1,174 @@ +/** + * FeatureLayout Styles + */ + +/* Loading Container */ +.loadingContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + min-height: 400px; + gap: 1rem; + color: var(--text-secondary, #666); +} + +.loadingSpinner { + width: 40px; + height: 40px; + border: 3px solid var(--border-color, #e0e0e0); + border-top-color: var(--primary-color, #2563eb); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* Error Container */ +.errorContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + min-height: 400px; + gap: 1rem; + padding: 2rem; + text-align: center; +} + +.errorIcon { + font-size: 3rem; +} + +.errorContainer h2 { + margin: 0; + color: var(--text-primary, #1a1a1a); + font-size: 1.5rem; + font-weight: 600; +} + +.errorContainer p { + margin: 0; + color: var(--text-secondary, #666); + max-width: 400px; +} + +.errorLink { + margin-top: 1rem; + padding: 0.75rem 1.5rem; + background: var(--primary-color, #2563eb); + color: white; + text-decoration: none; + border-radius: 6px; + font-weight: 500; + transition: background 0.2s; +} + +.errorLink:hover { + background: var(--primary-hover, #1d4ed8); +} + +/* Feature Layout */ +.featureLayout { + display: flex; + flex-direction: column; + height: 100%; + width: 100%; +} + +/* Feature Header */ +.featureHeader { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.75rem 1.5rem; + background: var(--surface-color, #f8f9fa); + border-bottom: 1px solid var(--border-color, #e0e0e0); + flex-shrink: 0; +} + +.breadcrumb { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.875rem; + color: var(--text-secondary, #666); +} + +.separator { + color: var(--border-color, #d0d0d0); +} + +.mandateName { + color: var(--text-tertiary, #888); +} + +.featureName { + color: var(--text-secondary, #666); + font-weight: 500; +} + +.instanceName { + color: var(--text-primary, #1a1a1a); + font-weight: 600; +} + +.roleIndicator { + display: flex; + align-items: center; +} + +.roleBadge { + padding: 0.25rem 0.75rem; + background: var(--primary-light, #e0e7ff); + color: var(--primary-color, #2563eb); + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.025em; +} + +/* Feature Content */ +.featureContent { + flex: 1; + overflow: auto; + padding: 1.5rem; +} + +/* Dark Theme */ +:global(.dark-theme) .featureHeader { + background: var(--surface-dark, #1e1e1e); + border-bottom-color: var(--border-dark, #333); +} + +:global(.dark-theme) .mandateName { + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .featureName { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .instanceName { + color: var(--text-primary-dark, #fff); +} + +:global(.dark-theme) .roleBadge { + background: var(--primary-dark-bg, #1e3a5f); + color: var(--primary-light, #93c5fd); +} + +:global(.dark-theme) .errorContainer h2 { + color: var(--text-primary-dark, #fff); +} + +:global(.dark-theme) .errorContainer p { + color: var(--text-secondary-dark, #aaa); +} diff --git a/src/layouts/FeatureLayout.tsx b/src/layouts/FeatureLayout.tsx new file mode 100644 index 0000000..406816b --- /dev/null +++ b/src/layouts/FeatureLayout.tsx @@ -0,0 +1,151 @@ +/** + * FeatureLayout + * + * Layout-Wrapper für Feature-Instanz-Seiten. + * Stellt den Instanz-Kontext bereit und rendert Sidebar + Content. + */ + +import React from 'react'; +import { Outlet, Navigate, useLocation } from 'react-router-dom'; +import { useCurrentInstance } from '../hooks/useCurrentInstance'; +import { useFeaturesInitialized, useFeaturesLoading } from '../stores/featureStore'; +import styles from './FeatureLayout.module.css'; + +// ============================================================================= +// LOADING COMPONENT +// ============================================================================= + +const LoadingScreen: React.FC = () => ( +
+
+

Lade Feature-Daten...

+
+); + +// ============================================================================= +// ERROR COMPONENT +// ============================================================================= + +interface ErrorScreenProps { + message: string; + returnPath?: string; +} + +const ErrorScreen: React.FC = ({ message, returnPath = '/' }) => ( +
+
⚠️
+

Zugriff nicht möglich

+

{message}

+ + Zurück zur Übersicht + +
+); + +// ============================================================================= +// FEATURE LAYOUT +// ============================================================================= + +/** + * FeatureLayout rendert den Inhalt einer Feature-Instanz. + * + * Prüft: + * 1. Ob Features geladen sind + * 2. Ob die Instanz existiert und gültig ist + * 3. Ob der User Zugriff hat + * + * Bei Erfolg: Rendert für die verschachtelten Routes + */ +export const FeatureLayout: React.FC = () => { + const location = useLocation(); + const initialized = useFeaturesInitialized(); + const loading = useFeaturesLoading(); + const { instance, mandate, feature, isValid, isLoading } = useCurrentInstance(); + + // Warten bis Features geladen sind + if (!initialized || loading || isLoading) { + return ; + } + + // Prüfen ob Instanz existiert und gültig ist + if (!isValid) { + console.warn('FeatureLayout: Invalid instance context', { + path: location.pathname, + hasMandate: !!mandate, + hasFeature: !!feature, + hasInstance: !!instance, + }); + + return ( + + ); + } + + // Alles OK - rendere Content + return ( +
+ {/* Header mit Instanz-Info */} +
+
+ {mandate?.name} + / + {feature?.label?.de || feature?.code} + / + {instance?.instanceLabel} +
+
+ {instance?.userRole} +
+
+ + {/* Content Area */} +
+ +
+
+ ); +}; + +// ============================================================================= +// PROTECTED FEATURE ROUTE +// ============================================================================= + +interface ProtectedFeatureRouteProps { + requiredView?: string; + children: React.ReactNode; +} + +/** + * Wrapper für geschützte Feature-Routes + * Prüft zusätzlich View-Berechtigungen + */ +export const ProtectedFeatureRoute: React.FC = ({ + requiredView, + children, +}) => { + const { instance, isValid } = useCurrentInstance(); + + if (!isValid) { + return ; + } + + // Prüfe View-Berechtigung wenn erforderlich + if (requiredView) { + const hasViewAccess = instance?.permissions?.views?.[requiredView] ?? false; + + if (!hasViewAccess) { + return ( + + ); + } + } + + return <>{children}; +}; + +export default FeatureLayout; diff --git a/src/layouts/MainLayout.module.css b/src/layouts/MainLayout.module.css new file mode 100644 index 0000000..63c802b --- /dev/null +++ b/src/layouts/MainLayout.module.css @@ -0,0 +1,132 @@ +/** + * MainLayout Styles + */ + +.mainLayout { + display: flex; + height: 100vh; + width: 100vw; + overflow: hidden; + background: var(--bg-primary, #ffffff); +} + +/* Sidebar */ +.sidebar { + display: flex; + flex-direction: column; + width: 280px; + min-width: 280px; + height: 100%; + background: var(--surface-color, #f8f9fa); + border-right: 1px solid var(--border-color, #e0e0e0); + overflow: hidden; +} + +/* Logo */ +.logoContainer { + display: flex; + align-items: center; + justify-content: center; + padding: 1.25rem 1rem; + border-bottom: 1px solid var(--border-color, #e0e0e0); +} + +.logoText { + font-size: 1.5rem; + font-weight: 700; + letter-spacing: -0.02em; +} + +.logoPower { + color: var(--text-primary, #1a1a1a); +} + +.logoOn { + color: var(--primary-color, #2563eb); +} + +/* Navigation */ +.navigation { + flex: 1; + overflow-y: auto; + overflow-x: hidden; + padding: 0.5rem 0; +} + +.loadingNav, +.errorNav { + padding: 1rem; + text-align: center; + color: var(--text-secondary, #666); + font-size: 0.875rem; +} + +.errorNav { + color: var(--error-color, #dc2626); +} + +/* User Section */ +.userSection { + padding: 1rem; + border-top: 1px solid var(--border-color, #e0e0e0); + flex-shrink: 0; +} + +/* Content */ +.content { + flex: 1; + overflow: auto; + background: var(--bg-primary, #ffffff); +} + +/* Dark Theme */ +:global(.dark-theme) .mainLayout { + background: var(--bg-dark, #0a0a0a); +} + +:global(.dark-theme) .sidebar { + background: var(--surface-dark, #1a1a1a); + border-right-color: var(--border-dark, #333); +} + +:global(.dark-theme) .logoContainer { + border-bottom-color: var(--border-dark, #333); +} + +:global(.dark-theme) .logoPower { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .userSection { + border-top-color: var(--border-dark, #333); +} + +:global(.dark-theme) .content { + background: var(--bg-dark, #0a0a0a); +} + +/* Scrollbar Styling */ +.navigation::-webkit-scrollbar { + width: 6px; +} + +.navigation::-webkit-scrollbar-track { + background: transparent; +} + +.navigation::-webkit-scrollbar-thumb { + background: var(--border-color, #d0d0d0); + border-radius: 3px; +} + +.navigation::-webkit-scrollbar-thumb:hover { + background: var(--text-tertiary, #888); +} + +:global(.dark-theme) .navigation::-webkit-scrollbar-thumb { + background: var(--border-dark, #444); +} + +:global(.dark-theme) .navigation::-webkit-scrollbar-thumb:hover { + background: var(--text-tertiary-dark, #666); +} diff --git a/src/layouts/MainLayout.tsx b/src/layouts/MainLayout.tsx new file mode 100644 index 0000000..42fdbe6 --- /dev/null +++ b/src/layouts/MainLayout.tsx @@ -0,0 +1,83 @@ +/** + * MainLayout + * + * Hauptlayout der Anwendung mit Sidebar und Content-Bereich. + * Enthält den FeatureProvider für das Multi-Tenant-System. + */ + +import React, { useEffect } from 'react'; +import { Outlet } from 'react-router-dom'; +import { FeatureProvider, useFeatureStore } from '../stores/featureStore'; +import { MandateNavigation } from '../components/Navigation/MandateNavigation'; +import styles from './MainLayout.module.css'; + +// ============================================================================= +// INNER LAYOUT (mit Zugriff auf Store) +// ============================================================================= + +const MainLayoutInner: React.FC = () => { + const { loadFeatures, initialized, loading, error } = useFeatureStore(); + + // Features laden beim Mount + useEffect(() => { + if (!initialized && !loading) { + loadFeatures(); + } + }, [initialized, loading, loadFeatures]); + + return ( +
+ {/* Sidebar */} + + + {/* Content */} +
+ +
+
+ ); +}; + +// ============================================================================= +// MAIN LAYOUT (mit Provider) +// ============================================================================= + +export const MainLayout: React.FC = () => { + return ( + + + + ); +}; + +export default MainLayout; diff --git a/src/layouts/index.ts b/src/layouts/index.ts new file mode 100644 index 0000000..ec8f5b7 --- /dev/null +++ b/src/layouts/index.ts @@ -0,0 +1,6 @@ +/** + * Layouts Export + */ + +export { MainLayout } from './MainLayout'; +export { FeatureLayout, ProtectedFeatureRoute } from './FeatureLayout'; diff --git a/src/pages/Dashboard.module.css b/src/pages/Dashboard.module.css new file mode 100644 index 0000000..f5dc49a --- /dev/null +++ b/src/pages/Dashboard.module.css @@ -0,0 +1,247 @@ +/** + * Dashboard Page Styles + */ + +.dashboard { + padding: 2rem; + max-width: 1200px; + margin: 0 auto; +} + +/* Header */ +.header { + margin-bottom: 2rem; +} + +.header h1 { + margin: 0; + font-size: 1.75rem; + font-weight: 700; + color: var(--text-primary, #1a1a1a); +} + +.subtitle { + margin: 0.5rem 0 0; + color: var(--text-secondary, #666); + font-size: 0.9375rem; +} + +/* Content */ +.content { + display: flex; + flex-direction: column; + gap: 2rem; +} + +/* Feature Section */ +.featureSection { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.sectionTitle { + display: flex; + align-items: center; + gap: 0.75rem; + margin: 0; + font-size: 1.125rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); +} + +/* Instance Grid */ +.instanceGrid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); + gap: 1rem; +} + +/* Instance Card */ +.instanceCard { + display: flex; + align-items: center; + gap: 1rem; + padding: 1.25rem; + background: var(--surface-color, #ffffff); + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 12px; + text-decoration: none; + transition: all 0.2s ease; +} + +.instanceCard:hover { + border-color: var(--primary-color, #2563eb); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + transform: translateY(-2px); +} + +.cardIcon { + display: flex; + align-items: center; + justify-content: center; + width: 48px; + height: 48px; + border-radius: 10px; + background: var(--primary-light, #e0e7ff); + color: var(--primary-color, #2563eb); + flex-shrink: 0; +} + +.cardContent { + flex: 1; + min-width: 0; +} + +.cardHeader { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.25rem; +} + +.featureLabel { + font-size: 0.75rem; + font-weight: 500; + color: var(--text-tertiary, #888); + text-transform: uppercase; + letter-spacing: 0.025em; +} + +.roleBadge { + font-size: 0.625rem; + padding: 0.125rem 0.375rem; + background: var(--surface-color, #f0f0f0); + border-radius: 9999px; + color: var(--text-tertiary, #888); + text-transform: uppercase; + letter-spacing: 0.025em; +} + +.instanceLabel { + margin: 0; + font-size: 1rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.mandateName { + margin: 0.25rem 0 0; + font-size: 0.8125rem; + color: var(--text-secondary, #666); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cardArrow { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: 50%; + background: var(--surface-color, #f5f5f5); + color: var(--text-tertiary, #888); + flex-shrink: 0; + transition: all 0.2s ease; +} + +.instanceCard:hover .cardArrow { + background: var(--primary-color, #2563eb); + color: white; +} + +/* Empty State */ +.emptyState { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 400px; + padding: 2rem; + text-align: center; +} + +.emptyIcon { + font-size: 4rem; + margin-bottom: 1rem; +} + +.emptyState h2 { + margin: 0; + font-size: 1.5rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); +} + +.emptyState p { + margin: 0.5rem 0 0; + color: var(--text-secondary, #666); + font-size: 0.9375rem; +} + +/* Dark Theme */ +:global(.dark-theme) .header h1 { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .subtitle { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .sectionTitle { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .instanceCard { + background: var(--surface-dark, #1a1a1a); + border-color: var(--border-dark, #333); +} + +:global(.dark-theme) .instanceCard:hover { + border-color: var(--primary-light, #93c5fd); +} + +:global(.dark-theme) .cardIcon { + background: var(--primary-dark-bg, #1e3a5f); + color: var(--primary-light, #93c5fd); +} + +:global(.dark-theme) .featureLabel { + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .roleBadge { + background: var(--surface-dark, #2a2a2a); + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .instanceLabel { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .mandateName { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .cardArrow { + background: var(--surface-dark, #2a2a2a); + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .instanceCard:hover .cardArrow { + background: var(--primary-color, #2563eb); + color: white; +} + +:global(.dark-theme) .emptyState h2 { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .emptyState p { + color: var(--text-secondary-dark, #aaa); +} diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx new file mode 100644 index 0000000..df54211 --- /dev/null +++ b/src/pages/Dashboard.tsx @@ -0,0 +1,139 @@ +/** + * Dashboard Page + * + * System-Übersicht für den User. + * Zeigt alle verfügbaren Feature-Instanzen als Karten an. + */ + +import React from 'react'; +import { Link } from 'react-router-dom'; +import { useMandates, useFeatureStore } from '../stores/featureStore'; +import { getLabel, FEATURE_REGISTRY } from '../types/mandate'; +import type { FeatureInstance } from '../types/mandate'; +import { FaBriefcase, FaRobot, FaPlay, FaArrowRight } from 'react-icons/fa'; +import styles from './Dashboard.module.css'; + +// ============================================================================= +// FEATURE ICONS +// ============================================================================= + +const FEATURE_ICONS: Record = { + trustee: , + chatbot: , + chatworkflow: , +}; + +// ============================================================================= +// INSTANCE CARD +// ============================================================================= + +interface InstanceCardProps { + instance: FeatureInstance; + featureLabel: string; +} + +const InstanceCard: React.FC = ({ instance, featureLabel }) => { + const basePath = `/mandates/${instance.mandateId}/${instance.featureCode}/${instance.id}`; + + // Ersten verfügbaren View finden + const featureConfig = FEATURE_REGISTRY[instance.featureCode]; + const firstView = featureConfig?.views?.[0]; + const targetPath = firstView ? `${basePath}/${firstView.path}` : basePath; + + return ( + +
+ {FEATURE_ICONS[instance.featureCode] || } +
+
+
+ {featureLabel} + {instance.userRole} +
+

{instance.instanceLabel}

+

{instance.mandateName}

+
+
+ +
+ + ); +}; + +// ============================================================================= +// EMPTY STATE +// ============================================================================= + +const EmptyState: React.FC = () => ( +
+
📋
+

Willkommen bei PowerOn

+

Du hast aktuell Zugriff auf keine Feature-Instanzen.

+

Kontaktiere einen Administrator, um Zugriff zu erhalten.

+
+); + +// ============================================================================= +// DASHBOARD PAGE +// ============================================================================= + +export const DashboardPage: React.FC = () => { + const mandates = useMandates(); + const { hasAnyInstance, getAllInstances } = useFeatureStore(); + + // Alle Instanzen sammeln für Übersicht + const allInstances = getAllInstances(); + + // Gruppiere nach Feature + const instancesByFeature = allInstances.reduce((acc, instance) => { + const featureCode = instance.featureCode; + if (!acc[featureCode]) { + acc[featureCode] = []; + } + acc[featureCode].push(instance); + return acc; + }, {} as Record); + + if (!hasAnyInstance()) { + return ; + } + + return ( +
+
+

Übersicht

+

+ Du hast Zugriff auf {allInstances.length} Feature-Instanz{allInstances.length !== 1 ? 'en' : ''} + in {mandates.length} Mandant{mandates.length !== 1 ? 'en' : ''}. +

+
+ +
+ {Object.entries(instancesByFeature).map(([featureCode, instances]) => { + const featureConfig = FEATURE_REGISTRY[featureCode]; + const featureLabel = featureConfig ? getLabel(featureConfig.label) : featureCode; + + return ( +
+

+ {FEATURE_ICONS[featureCode]} + {featureLabel} +

+
+ {instances.map(instance => ( + + ))} +
+
+ ); + })} +
+
+ ); +}; + +export default DashboardPage; diff --git a/src/pages/FeatureView.module.css b/src/pages/FeatureView.module.css new file mode 100644 index 0000000..9bbc145 --- /dev/null +++ b/src/pages/FeatureView.module.css @@ -0,0 +1,122 @@ +/** + * FeatureView Page Styles + */ + +.featureView { + display: flex; + flex-direction: column; + height: 100%; +} + +/* View Header */ +.viewHeader { + padding: 1rem 1.5rem; + border-bottom: 1px solid var(--border-color, #e0e0e0); + background: var(--bg-primary, #ffffff); +} + +.viewTitle { + margin: 0; + font-size: 1.25rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); +} + +/* View Content */ +.viewContent { + flex: 1; + overflow: auto; + padding: 1.5rem; +} + +/* Placeholder */ +.placeholder { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 300px; + padding: 2rem; + background: var(--surface-color, #f8f9fa); + border: 2px dashed var(--border-color, #e0e0e0); + border-radius: 12px; + text-align: center; +} + +.placeholder h2 { + margin: 0; + font-size: 1.25rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); +} + +.placeholder p { + margin: 0.5rem 0 0; + color: var(--text-secondary, #666); + font-size: 0.9375rem; +} + +/* Not Found */ +.notFound, +.accessDenied { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 300px; + padding: 2rem; + text-align: center; +} + +.notFound h2, +.accessDenied h2 { + margin: 0; + font-size: 1.25rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); +} + +.notFound p, +.accessDenied p { + margin: 0.5rem 0 0; + color: var(--text-secondary, #666); + font-size: 0.9375rem; +} + +.accessDenied { + background: var(--error-light, #fef2f2); + border-radius: 12px; +} + +.accessDenied h2 { + color: var(--error-color, #dc2626); +} + +/* Dark Theme */ +:global(.dark-theme) .viewHeader { + background: var(--surface-dark, #1a1a1a); + border-bottom-color: var(--border-dark, #333); +} + +:global(.dark-theme) .viewTitle { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .placeholder { + background: var(--surface-dark, #1a1a1a); + border-color: var(--border-dark, #444); +} + +:global(.dark-theme) .placeholder h2, +:global(.dark-theme) .notFound h2 { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .placeholder p, +:global(.dark-theme) .notFound p { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .accessDenied { + background: rgba(220, 38, 38, 0.1); +} diff --git a/src/pages/FeatureView.tsx b/src/pages/FeatureView.tsx new file mode 100644 index 0000000..99488d7 --- /dev/null +++ b/src/pages/FeatureView.tsx @@ -0,0 +1,202 @@ +/** + * FeatureView Page + * + * Generische Feature-View-Komponente. + * Rendert den entsprechenden Content basierend auf Feature-Code und View. + * + * Die Komponente ist Feature-agnostisch und delegiert an spezifische View-Komponenten. + */ + +import React from 'react'; +import { useCurrentInstance } from '../hooks/useCurrentInstance'; +import { useCanViewFeatureView } from '../hooks/useInstancePermissions'; +import { getLabel, FEATURE_REGISTRY } from '../types/mandate'; +import styles from './FeatureView.module.css'; + +// ============================================================================= +// VIEW COMPONENTS (Placeholders - werden später durch echte ersetzt) +// ============================================================================= + +// Trustee Views +const TrusteeDashboard: React.FC = () => ( +
+

Trustee Dashboard

+

Übersicht der Treuhand-Aktivitäten

+
+); + +const TrusteeOrganisations: React.FC = () => ( +
+

Organisationen

+

Verwaltung der Organisationen

+
+); + +const TrusteeContracts: React.FC = () => ( +
+

Verträge

+

Vertragsverwaltung

+
+); + +const TrusteeDocuments: React.FC = () => ( +
+

Dokumente

+

Dokumentenverwaltung

+
+); + +const TrusteePositions: React.FC = () => ( +
+

Positionen

+

Positionsverwaltung

+
+); + +const TrusteeRoles: React.FC = () => ( +
+

Rollen

+

Rollenverwaltung

+
+); + +const TrusteeAccess: React.FC = () => ( +
+

Zugriffe

+

Zugriffsverwaltung

+
+); + +// Chatworkflow Views +const ChatworkflowDashboard: React.FC = () => ( +
+

Workflow Dashboard

+

Übersicht der Workflows

+
+); + +const ChatworkflowRuns: React.FC = () => ( +
+

Runs

+

Workflow-Ausführungen

+
+); + +const ChatworkflowFiles: React.FC = () => ( +
+

Dateien

+

Workflow-Dateien

+
+); + +// Chatbot Views +const ChatbotConversations: React.FC = () => ( +
+

Konversationen

+

Chat-Konversationen

+
+); + +const ChatbotSettings: React.FC = () => ( +
+

Chatbot Einstellungen

+

Konfiguration des Chatbots

+
+); + +// Generic/Fallback +const NotFound: React.FC = () => ( +
+

Seite nicht gefunden

+

Diese View existiert nicht oder wurde noch nicht implementiert.

+
+); + +const AccessDenied: React.FC = () => ( +
+

Zugriff verweigert

+

Du hast keine Berechtigung für diese Ansicht.

+
+); + +// ============================================================================= +// VIEW REGISTRY +// ============================================================================= + +type ViewComponent = React.FC; + +const VIEW_COMPONENTS: Record> = { + trustee: { + dashboard: TrusteeDashboard, + organisations: TrusteeOrganisations, + contracts: TrusteeContracts, + documents: TrusteeDocuments, + positions: TrusteePositions, + roles: TrusteeRoles, + access: TrusteeAccess, + }, + chatworkflow: { + dashboard: ChatworkflowDashboard, + runs: ChatworkflowRuns, + files: ChatworkflowFiles, + }, + chatbot: { + conversations: ChatbotConversations, + settings: ChatbotSettings, + }, +}; + +// ============================================================================= +// FEATURE VIEW PAGE +// ============================================================================= + +interface FeatureViewPageProps { + view: string; +} + +export const FeatureViewPage: React.FC = ({ view }) => { + const { instance, featureCode, isValid } = useCurrentInstance(); + + // Berechtigungs-Check + const viewCode = `${featureCode}-${view}`; + const canView = useCanViewFeatureView(viewCode); + + // Nicht valider Kontext + if (!isValid || !featureCode || !instance) { + return ; + } + + // Keine Berechtigung + if (!canView && view !== 'not-found') { + return ; + } + + // View-Komponente finden + const featureViews = VIEW_COMPONENTS[featureCode]; + if (!featureViews) { + return ; + } + + const ViewComponent = featureViews[view]; + if (!ViewComponent) { + return ; + } + + // View-Info aus Registry + const featureConfig = FEATURE_REGISTRY[featureCode]; + const viewConfig = featureConfig?.views?.find(v => v.code === view); + const viewLabel = viewConfig ? getLabel(viewConfig.label) : view; + + return ( +
+
+

{viewLabel}

+
+
+ +
+
+ ); +}; + +export default FeatureViewPage; diff --git a/src/pages/Settings.module.css b/src/pages/Settings.module.css new file mode 100644 index 0000000..9d9e37e --- /dev/null +++ b/src/pages/Settings.module.css @@ -0,0 +1,267 @@ +/** + * Settings Page Styles + */ + +.settings { + padding: 2rem; + max-width: 800px; + margin: 0 auto; +} + +/* Header */ +.header { + margin-bottom: 2rem; +} + +.header h1 { + margin: 0; + font-size: 1.75rem; + font-weight: 700; + color: var(--text-primary, #1a1a1a); +} + +.subtitle { + margin: 0.5rem 0 0; + color: var(--text-secondary, #666); + font-size: 0.9375rem; +} + +/* Content */ +.content { + display: flex; + flex-direction: column; + gap: 2rem; +} + +/* Section */ +.section { + background: var(--surface-color, #ffffff); + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 12px; + padding: 1.5rem; +} + +.sectionTitle { + margin: 0 0 1rem; + font-size: 1rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); +} + +/* Setting Row */ +.settingRow { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1rem 0; + border-bottom: 1px solid var(--border-color, #e0e0e0); +} + +.settingRow:last-child { + border-bottom: none; + padding-bottom: 0; +} + +.settingRow:first-of-type { + padding-top: 0; +} + +.settingInfo { + flex: 1; +} + +.settingLabel { + display: block; + font-size: 0.9375rem; + font-weight: 500; + color: var(--text-primary, #1a1a1a); + margin-bottom: 0.25rem; +} + +.settingDescription { + margin: 0; + font-size: 0.8125rem; + color: var(--text-secondary, #666); +} + +.settingControl { + flex-shrink: 0; + margin-left: 1rem; +} + +/* Theme Toggle */ +.themeToggle { + display: flex; + background: var(--surface-color, #f5f5f5); + border-radius: 8px; + padding: 2px; +} + +.themeButton { + padding: 0.5rem 1rem; + border: none; + border-radius: 6px; + background: transparent; + font-size: 0.8125rem; + font-weight: 500; + color: var(--text-secondary, #666); + cursor: pointer; + transition: all 0.2s ease; +} + +.themeButton:hover { + color: var(--text-primary, #1a1a1a); +} + +.themeButton.active { + background: var(--bg-primary, #ffffff); + color: var(--text-primary, #1a1a1a); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* Select */ +.select { + padding: 0.5rem 2rem 0.5rem 0.75rem; + border: 1px solid var(--border-color, #d0d0d0); + border-radius: 6px; + background: var(--bg-primary, #ffffff); + font-size: 0.875rem; + color: var(--text-primary, #1a1a1a); + cursor: pointer; + appearance: none; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); + background-position: right 0.5rem center; + background-repeat: no-repeat; + background-size: 1.5em 1.5em; +} + +.select:focus { + outline: none; + border-color: var(--primary-color, #2563eb); + box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); +} + +/* Button */ +.button { + padding: 0.5rem 1rem; + border: 1px solid var(--border-color, #d0d0d0); + border-radius: 6px; + background: var(--bg-primary, #ffffff); + font-size: 0.875rem; + font-weight: 500; + color: var(--text-primary, #1a1a1a); + cursor: pointer; + transition: all 0.2s ease; +} + +.button:hover { + background: var(--surface-color, #f5f5f5); + border-color: var(--border-color, #c0c0c0); +} + +/* Info Card */ +.infoCard { + background: var(--surface-color, #f5f5f5); + border-radius: 8px; + padding: 1rem; +} + +.infoRow { + display: flex; + justify-content: space-between; + padding: 0.5rem 0; +} + +.infoRow:first-child { + padding-top: 0; +} + +.infoRow:last-child { + padding-bottom: 0; +} + +.infoLabel { + font-size: 0.8125rem; + color: var(--text-secondary, #666); +} + +.infoValue { + font-size: 0.8125rem; + font-weight: 500; + color: var(--text-primary, #1a1a1a); +} + +/* Dark Theme */ +:global(.dark-theme) .header h1 { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .subtitle { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .section { + background: var(--surface-dark, #1a1a1a); + border-color: var(--border-dark, #333); +} + +:global(.dark-theme) .sectionTitle { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .settingRow { + border-bottom-color: var(--border-dark, #333); +} + +:global(.dark-theme) .settingLabel { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .settingDescription { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .themeToggle { + background: var(--surface-dark, #2a2a2a); +} + +:global(.dark-theme) .themeButton { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .themeButton:hover { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .themeButton.active { + background: var(--bg-dark, #0a0a0a); + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .select { + background: var(--surface-dark, #1a1a1a); + border-color: var(--border-dark, #444); + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .button { + background: var(--surface-dark, #1a1a1a); + border-color: var(--border-dark, #444); + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .button:hover { + background: var(--surface-dark, #2a2a2a); +} + +:global(.dark-theme) .infoCard { + background: var(--surface-dark, #2a2a2a); +} + +:global(.dark-theme) .infoLabel { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .infoValue { + color: var(--text-primary-dark, #ffffff); +} diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx new file mode 100644 index 0000000..ad1923d --- /dev/null +++ b/src/pages/Settings.tsx @@ -0,0 +1,146 @@ +/** + * Settings Page + * + * Benutzer-Einstellungen (System-Level, ohne Instanz-Kontext). + */ + +import React, { useState } from 'react'; +import { useLanguage } from '../providers/language/LanguageContext'; +import styles from './Settings.module.css'; + +// ============================================================================= +// SETTINGS PAGE +// ============================================================================= + +export const SettingsPage: React.FC = () => { + const { t, language, setLanguage } = useLanguage(); + const [theme, setTheme] = useState<'light' | 'dark'>( + () => (localStorage.getItem('theme') as 'light' | 'dark') || 'light' + ); + + const handleThemeChange = (newTheme: 'light' | 'dark') => { + setTheme(newTheme); + localStorage.setItem('theme', newTheme); + + if (newTheme === 'dark') { + document.documentElement.classList.add('dark-theme'); + document.documentElement.classList.remove('light-theme'); + } else { + document.documentElement.classList.add('light-theme'); + document.documentElement.classList.remove('dark-theme'); + } + document.documentElement.setAttribute('data-theme', newTheme); + }; + + return ( +
+
+

Einstellungen

+

Persönliche Einstellungen und Präferenzen

+
+ +
+ {/* Darstellung */} +
+

Darstellung

+ +
+
+ +

+ Wähle zwischen hellem und dunklem Design. +

+
+
+
+ + +
+
+
+ +
+
+ +

+ Wähle die Anzeigesprache der Anwendung. +

+
+
+ +
+
+
+ + {/* Konto */} +
+

Konto

+ +
+
+ +

+ Ändere deinen Namen, E-Mail-Adresse und Profilbild. +

+
+
+ +
+
+ +
+
+ +

+ Aktualisiere dein Passwort für mehr Sicherheit. +

+
+
+ +
+
+
+ + {/* Info */} +
+

Über

+ +
+
+ Version + 2.0.0 +
+
+ Build + 2026.01.16 +
+
+
+
+
+ ); +}; + +export default SettingsPage; diff --git a/src/pages/index.ts b/src/pages/index.ts new file mode 100644 index 0000000..7738795 --- /dev/null +++ b/src/pages/index.ts @@ -0,0 +1,7 @@ +/** + * Pages Export + */ + +export { DashboardPage } from './Dashboard'; +export { SettingsPage } from './Settings'; +export { FeatureViewPage } from './FeatureView'; diff --git a/src/stores/featureStore.tsx b/src/stores/featureStore.tsx new file mode 100644 index 0000000..a080585 --- /dev/null +++ b/src/stores/featureStore.tsx @@ -0,0 +1,280 @@ +/** + * Feature Store + * + * Verwaltet alle Mandate → Features → Instanzen → Permissions + * Ein User gehört keinem Mandanten direkt an, sondern hat Zugriff auf Feature-Instanzen. + */ + +import React, { createContext, useContext, useState, useCallback, useRef, ReactNode } from 'react'; +import type { + Mandate, + MandateFeature, + FeatureInstance, + FeaturesMyResponse, +} from '../types/mandate'; + +// ============================================================================= +// STORE STATE +// ============================================================================= + +interface FeatureState { + mandates: Mandate[]; + loading: boolean; + error: string | null; + initialized: boolean; +} + +interface FeatureActions { + // Laden + loadFeatures: () => Promise; + setFeatures: (response: FeaturesMyResponse) => void; + + // Getters + getMandateById: (mandateId: string) => Mandate | undefined; + getFeatureByCode: (mandateId: string, featureCode: string) => MandateFeature | undefined; + getInstanceById: (instanceId: string) => FeatureInstance | undefined; + getInstancesByFeature: (mandateId: string, featureCode: string) => FeatureInstance[]; + + // Alle Instanzen flach + getAllInstances: () => FeatureInstance[]; + + // Prüfungen + hasAnyInstance: () => boolean; + + // Reset + reset: () => void; +} + +type FeatureStore = FeatureState & FeatureActions; + +// ============================================================================= +// INITIAL STATE +// ============================================================================= + +const initialState: FeatureState = { + mandates: [], + loading: false, + error: null, + initialized: false, +}; + +// ============================================================================= +// CONTEXT +// ============================================================================= + +const FeatureContext = createContext(undefined); + +// ============================================================================= +// PROVIDER +// ============================================================================= + +interface FeatureProviderProps { + children: ReactNode; +} + +export const FeatureProvider: React.FC = ({ children }) => { + const [state, setState] = useState(initialState); + + // Cache für schnellen Zugriff auf Instanzen + const instanceCacheRef = useRef>(new Map()); + + /** + * Lädt alle Features vom Backend + */ + const loadFeatures = useCallback(async () => { + setState(prev => ({ ...prev, loading: true, error: null })); + + try { + // Import dynamisch um zirkuläre Abhängigkeiten zu vermeiden + const { fetchMyFeatures } = await import('../api/featuresApi'); + const response = await fetchMyFeatures(); + + // Cache aufbauen + const cache = new Map(); + response.mandates.forEach(mandate => { + mandate.features.forEach(feature => { + feature.instances.forEach(instance => { + cache.set(instance.id, instance); + }); + }); + }); + instanceCacheRef.current = cache; + + setState({ + mandates: response.mandates, + loading: false, + error: null, + initialized: true, + }); + } catch (err) { + const errorMessage = err instanceof Error ? err.message : 'Failed to load features'; + console.error('FeatureStore: Error loading features:', err); + setState(prev => ({ + ...prev, + loading: false, + error: errorMessage, + initialized: true, + })); + } + }, []); + + /** + * Setzt Features direkt (z.B. nach Login) + */ + const setFeatures = useCallback((response: FeaturesMyResponse) => { + // Cache aufbauen + const cache = new Map(); + response.mandates.forEach(mandate => { + mandate.features.forEach(feature => { + feature.instances.forEach(instance => { + cache.set(instance.id, instance); + }); + }); + }); + instanceCacheRef.current = cache; + + setState({ + mandates: response.mandates, + loading: false, + error: null, + initialized: true, + }); + }, []); + + /** + * Holt einen Mandanten per ID + */ + const getMandateById = useCallback((mandateId: string): Mandate | undefined => { + return state.mandates.find(m => m.id === mandateId); + }, [state.mandates]); + + /** + * Holt ein Feature per Mandate-ID und Feature-Code + */ + const getFeatureByCode = useCallback((mandateId: string, featureCode: string): MandateFeature | undefined => { + const mandate = state.mandates.find(m => m.id === mandateId); + return mandate?.features.find(f => f.code === featureCode); + }, [state.mandates]); + + /** + * Holt eine Instanz per ID (schneller Cache-Zugriff) + */ + const getInstanceById = useCallback((instanceId: string): FeatureInstance | undefined => { + return instanceCacheRef.current.get(instanceId); + }, []); + + /** + * Holt alle Instanzen für ein Feature in einem Mandanten + */ + const getInstancesByFeature = useCallback((mandateId: string, featureCode: string): FeatureInstance[] => { + const feature = getFeatureByCode(mandateId, featureCode); + return feature?.instances || []; + }, [getFeatureByCode]); + + /** + * Holt alle Instanzen flach + */ + const getAllInstances = useCallback((): FeatureInstance[] => { + return Array.from(instanceCacheRef.current.values()); + }, []); + + /** + * Prüft ob der User mindestens eine Instanz hat + */ + const hasAnyInstance = useCallback((): boolean => { + return instanceCacheRef.current.size > 0; + }, []); + + /** + * Reset (z.B. bei Logout) + */ + const reset = useCallback(() => { + instanceCacheRef.current.clear(); + setState(initialState); + }, []); + + // Store zusammenbauen + const store: FeatureStore = { + ...state, + loadFeatures, + setFeatures, + getMandateById, + getFeatureByCode, + getInstanceById, + getInstancesByFeature, + getAllInstances, + hasAnyInstance, + reset, + }; + + return ( + + {children} + + ); +}; + +// ============================================================================= +// HOOKS +// ============================================================================= + +/** + * Hook für Zugriff auf den Feature Store + */ +export function useFeatureStore(): FeatureStore { + const context = useContext(FeatureContext); + if (!context) { + throw new Error('useFeatureStore must be used within a FeatureProvider'); + } + return context; +} + +/** + * Hook für alle Mandate + */ +export function useMandates(): Mandate[] { + const store = useFeatureStore(); + return store.mandates; +} + +/** + * Hook für einen spezifischen Mandanten + */ +export function useMandateById(mandateId: string | undefined): Mandate | undefined { + const store = useFeatureStore(); + if (!mandateId) return undefined; + return store.getMandateById(mandateId); +} + +/** + * Hook für eine spezifische Instanz + */ +export function useInstance(instanceId: string | undefined): FeatureInstance | undefined { + const store = useFeatureStore(); + if (!instanceId) return undefined; + return store.getInstanceById(instanceId); +} + +/** + * Hook für Loading-State + */ +export function useFeaturesLoading(): boolean { + const store = useFeatureStore(); + return store.loading; +} + +/** + * Hook für Error-State + */ +export function useFeaturesError(): string | null { + const store = useFeatureStore(); + return store.error; +} + +/** + * Hook für Initialized-State + */ +export function useFeaturesInitialized(): boolean { + const store = useFeatureStore(); + return store.initialized; +} diff --git a/src/types/mandate.ts b/src/types/mandate.ts new file mode 100644 index 0000000..4c00a0d --- /dev/null +++ b/src/types/mandate.ts @@ -0,0 +1,257 @@ +/** + * Multi-Tenant Mandate Types + * + * Hierarchie: Mandate → Feature → Instanz → Views/Permissions + * + * Ein User gehört KEINEM Mandanten direkt an. + * Er hat Zugriff auf Feature-Instanzen, die zu Mandanten gehören. + */ + +// ============================================================================= +// I18N +// ============================================================================= + +export interface I18nLabel { + de: string; + en: string; + fr?: string; +} + +// ============================================================================= +// ACCESS LEVELS +// ============================================================================= + +/** + * Access Level für CRUD-Operationen + * - 'n': None - Kein Zugriff + * - 'm': My - Nur eigene Datensätze + * - 'g': Group - Alle Datensätze der Instanz + * - 'a': All - Alle Datensätze (mandantenübergreifend) + */ +export type AccessLevel = 'n' | 'm' | 'g' | 'a'; + +// ============================================================================= +// PERMISSIONS +// ============================================================================= + +/** + * Tabellen-Berechtigungen + */ +export interface TablePermission { + view: boolean; + read: AccessLevel; + create: AccessLevel; + update: AccessLevel; + delete: AccessLevel; +} + +/** + * Feld-Berechtigungen (optional, nur wo eingeschränkt) + */ +export interface FieldPermission { + read: boolean; + write: boolean; +} + +/** + * Summarische Berechtigungen pro Feature-Instanz + * Werden einmalig beim Login/Refresh geladen + */ +export interface InstancePermissions { + // Tabellen-Level (CRUD pro Tabelle) + tables: Record; + + // Feld-Level (nur wo eingeschränkt) + fields?: Record>; + + // View-Level (Navigation) + views: Record; +} + +// ============================================================================= +// FEATURE INSTANCE +// ============================================================================= + +/** + * Eine Feature-Instanz ist die Arbeitseinheit für einen User + * z.B. "Trustee für PamoCreate AG bei Soha Treuhand" + */ +export interface FeatureInstance { + id: string; // UUID der Instanz + featureCode: string; // "trustee", "chatbot", "chatworkflow", etc. + mandateId: string; // Zugehöriger Mandant + mandateName: string; // Für Anzeige + instanceLabel: string; // z.B. "PamoCreate AG" + userRole: string; // Rolle des Users in dieser Instanz + permissions: InstancePermissions; +} + +// ============================================================================= +// MANDATE FEATURE +// ============================================================================= + +/** + * Ein Feature innerhalb eines Mandanten + * Gruppiert alle Instanzen eines Feature-Typs + */ +export interface MandateFeature { + code: string; // "trustee", "chatbot", "chatworkflow", etc. + label: I18nLabel; // { de: "Treuhand", en: "Trustee" } + icon: string; // Material/React Icon Name + instances: FeatureInstance[]; +} + +// ============================================================================= +// MANDATE +// ============================================================================= + +/** + * Ein Mandant (oberste Ebene) + * Enthält mehrere Features mit deren Instanzen + */ +export interface Mandate { + id: string; // mandateId + name: string; // Anzeige-Name + code?: string; // Optionaler Code + features: MandateFeature[]; +} + +// ============================================================================= +// API RESPONSE +// ============================================================================= + +/** + * Response von GET /features/my + * Enthält alle für den User sichtbaren Mandate + Features + Instanzen + Permissions + */ +export interface FeaturesMyResponse { + mandates: Mandate[]; +} + +// ============================================================================= +// USER (Ohne Mandant-Zugehörigkeit) +// ============================================================================= + +/** + * User-Daten nach Login + * KEIN mandateId mehr - User arbeitet mit Feature-Instanzen + */ +export interface User { + id: string; + username: string; + email: string; + fullName: string; + language: string; + enabled: boolean; + authenticationAuthority: string; + isSysAdmin: boolean; + roleLabels?: string[]; // System-weite Rollen (z.B. ["sysadmin"]) +} + +// ============================================================================= +// NAVIGATION +// ============================================================================= + +/** + * View-Definition für Feature-Navigation + */ +export interface FeatureView { + code: string; // z.B. "dashboard", "contracts", "documents" + label: I18nLabel; + icon?: string; + path: string; // Relativer Pfad innerhalb der Instanz +} + +/** + * Feature-Konfiguration für Navigation + * Definiert welche Views ein Feature hat + */ +export interface FeatureConfig { + code: string; + label: I18nLabel; + icon: string; + views: FeatureView[]; +} + +// ============================================================================= +// FEATURE REGISTRY +// ============================================================================= + +/** + * Registry aller verfügbaren Features mit ihren Views + * Wird verwendet um Navigation zu generieren + */ +export const FEATURE_REGISTRY: Record = { + trustee: { + code: 'trustee', + label: { de: 'Treuhand', en: 'Trustee' }, + icon: 'briefcase', + views: [ + { code: 'dashboard', label: { de: 'Übersicht', en: 'Dashboard' }, path: 'dashboard' }, + { code: 'organisations', label: { de: 'Organisationen', en: 'Organisations' }, path: 'organisations' }, + { code: 'contracts', label: { de: 'Verträge', en: 'Contracts' }, path: 'contracts' }, + { code: 'documents', label: { de: 'Dokumente', en: 'Documents' }, path: 'documents' }, + { code: 'positions', label: { de: 'Positionen', en: 'Positions' }, path: 'positions' }, + { code: 'roles', label: { de: 'Rollen', en: 'Roles' }, path: 'roles' }, + { code: 'access', label: { de: 'Zugriffe', en: 'Access' }, path: 'access' }, + ] + }, + chatworkflow: { + code: 'chatworkflow', + label: { de: 'Workflow', en: 'Workflow' }, + icon: 'play_circle', + views: [ + { code: 'dashboard', label: { de: 'Übersicht', en: 'Dashboard' }, path: 'dashboard' }, + { code: 'runs', label: { de: 'Runs', en: 'Runs' }, path: 'runs' }, + { code: 'files', label: { de: 'Dateien', en: 'Files' }, path: 'files' }, + ] + }, + chatbot: { + code: 'chatbot', + label: { de: 'Chatbot', en: 'Chatbot' }, + icon: 'chat', + views: [ + { code: 'conversations', label: { de: 'Konversationen', en: 'Conversations' }, path: 'conversations' }, + { code: 'settings', label: { de: 'Einstellungen', en: 'Settings' }, path: 'settings' }, + ] + }, +}; + +// ============================================================================= +// HELPERS +// ============================================================================= + +/** + * Prüft ob ein AccessLevel Zugriff gewährt (nicht 'n') + */ +export function hasAccess(level: AccessLevel): boolean { + return level !== 'n'; +} + +/** + * Prüft ob ein User einen Datensatz bearbeiten darf basierend auf AccessLevel + */ +export function canAccessRecord( + level: AccessLevel, + record: { _createdBy?: string }, + userId: string +): boolean { + switch (level) { + case 'n': + return false; + case 'm': + return record._createdBy === userId; + case 'g': + case 'a': + return true; + default: + return false; + } +} + +/** + * Holt das Label für die aktuelle Sprache + */ +export function getLabel(label: I18nLabel, lang: 'de' | 'en' | 'fr' = 'de'): string { + return label[lang] || label.de || label.en || ''; +} diff --git a/src/utils/userCache.ts b/src/utils/userCache.ts index 9b461c8..4ec71c5 100644 --- a/src/utils/userCache.ts +++ b/src/utils/userCache.ts @@ -19,7 +19,9 @@ export interface CachedUserData { fullName: string; privilege?: string; // Deprecated - use roleLabels instead roleLabels?: string[]; // Array of role labels from backend (e.g., ["user"]) - mandateId: string; + // mandateId entfernt - User gehört keinem Mandanten direkt an + // Stattdessen hat er Zugriff auf Feature-Instanzen (siehe featureStore) + isSysAdmin?: boolean; // System-Administrator Flag language: string; enabled: boolean; authenticationAuthority: string; From 70c84dd89722442d7c99c103e579c62999303e3c Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Tue, 20 Jan 2026 00:56:00 +0100 Subject: [PATCH 02/19] revised ui components --- index.html | 6 +- public/favicon.png | Bin 0 -> 47007 bytes public/logos/Frame 43.png | Bin 178836 -> 0 bytes public/logos/PowerOn Details.PNG | Bin 40428 -> 0 bytes public/logos/PowerOn.png | Bin 61568 -> 0 bytes public/logos/PowerOn_transparent.png | Bin 72631 -> 0 bytes public/logos/poweron-logo.png | Bin 0 -> 63420 bytes public/logos/spitch-logo.svg | 1 - public/poweron-home.html | 192 +++++++++ public/poweron-privacy.html | 290 +++++++++++++ public/poweron-terms.html | 333 +++++++++++++++ src/App.tsx | 7 +- src/api/authApi.ts | 13 +- src/api/featuresApi.ts | 2 +- src/api/promptApi.ts | 5 +- src/api/trusteeApi.ts | 144 +++++-- src/api/userApi.ts | 6 +- .../EditActionButton/EditActionButton.tsx | 18 +- .../Navigation/MandateNavigation.tsx | 402 +++++++----------- .../TreeNavigation/TreeNavigation.module.css | 303 +++++++++++++ .../TreeNavigation/TreeNavigation.tsx | 378 ++++++++++++++++ .../Navigation/TreeNavigation/index.ts | 8 + .../Navigation/UserSection.module.css | 324 ++++++++++++++ src/components/Navigation/UserSection.tsx | 155 +++++++ src/components/Sidebar/SidebarUser.tsx | 4 +- src/hooks/useCurrentInstance.ts | 16 +- ...missions.ts => useInstancePermissions.tsx} | 6 +- src/hooks/useMandates.ts | 235 ++++++++++ src/hooks/usePrompts.ts | 16 +- src/hooks/useRoles.ts | 235 ++++++++++ src/hooks/useTrustee.ts | 108 +++-- src/hooks/useUsers.ts | 108 ++--- src/index.css | 2 + src/layouts/MainLayout.module.css | 10 + src/layouts/MainLayout.tsx | 14 +- src/pages/FeatureView.module.css | 52 +-- src/pages/FeatureView.tsx | 102 ++--- src/pages/Settings.tsx | 4 +- src/pages/admin/Admin.module.css | 286 +++++++++++++ src/pages/admin/AdminMandatesPage.tsx | 246 +++++++++++ src/pages/admin/AdminRolesPage.tsx | 277 ++++++++++++ src/pages/admin/AdminUsersPage.tsx | 325 ++++++++++++++ src/pages/admin/index.ts | 9 + src/pages/views/trustee/TrusteeAccessView.tsx | 97 +++++ .../views/trustee/TrusteeContractsView.tsx | 99 +++++ .../views/trustee/TrusteeDashboardView.tsx | 73 ++++ .../views/trustee/TrusteeDocumentsView.tsx | 98 +++++ .../trustee/TrusteeOrganisationsView.tsx | 97 +++++ .../views/trustee/TrusteePositionsView.tsx | 103 +++++ src/pages/views/trustee/TrusteeRolesView.tsx | 93 ++++ .../views/trustee/TrusteeViews.module.css | 312 ++++++++++++++ src/pages/views/trustee/index.ts | 11 + src/styles/themes/light.css | 85 +++- vite.config.ts | 49 ++- 54 files changed, 5159 insertions(+), 600 deletions(-) create mode 100644 public/favicon.png delete mode 100644 public/logos/Frame 43.png delete mode 100644 public/logos/PowerOn Details.PNG delete mode 100644 public/logos/PowerOn.png delete mode 100644 public/logos/PowerOn_transparent.png create mode 100644 public/logos/poweron-logo.png delete mode 100644 public/logos/spitch-logo.svg create mode 100644 public/poweron-home.html create mode 100644 public/poweron-privacy.html create mode 100644 public/poweron-terms.html create mode 100644 src/components/Navigation/TreeNavigation/TreeNavigation.module.css create mode 100644 src/components/Navigation/TreeNavigation/TreeNavigation.tsx create mode 100644 src/components/Navigation/TreeNavigation/index.ts create mode 100644 src/components/Navigation/UserSection.module.css create mode 100644 src/components/Navigation/UserSection.tsx rename src/hooks/{useInstancePermissions.ts => useInstancePermissions.tsx} (98%) create mode 100644 src/hooks/useMandates.ts create mode 100644 src/hooks/useRoles.ts create mode 100644 src/pages/admin/Admin.module.css create mode 100644 src/pages/admin/AdminMandatesPage.tsx create mode 100644 src/pages/admin/AdminRolesPage.tsx create mode 100644 src/pages/admin/AdminUsersPage.tsx create mode 100644 src/pages/admin/index.ts create mode 100644 src/pages/views/trustee/TrusteeAccessView.tsx create mode 100644 src/pages/views/trustee/TrusteeContractsView.tsx create mode 100644 src/pages/views/trustee/TrusteeDashboardView.tsx create mode 100644 src/pages/views/trustee/TrusteeDocumentsView.tsx create mode 100644 src/pages/views/trustee/TrusteeOrganisationsView.tsx create mode 100644 src/pages/views/trustee/TrusteePositionsView.tsx create mode 100644 src/pages/views/trustee/TrusteeRolesView.tsx create mode 100644 src/pages/views/trustee/TrusteeViews.module.css create mode 100644 src/pages/views/trustee/index.ts diff --git a/index.html b/index.html index 54bed19..8ca96ed 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,13 @@ - + <%- VITE_APP_NAME %> + + + +
diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..9d36f528dc8c48512c49b52887a2ee9158c34743 GIT binary patch literal 47007 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%0A_wUG4vHRKTpj68erD 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 TF!KZfKiAA`E?1k}dHDYT;vXy# literal 0 HcmV?d00001 diff --git a/public/logos/Frame 43.png b/public/logos/Frame 43.png deleted file mode 100644 index 309d1342c856685b95b9df17ea35e25077a1a3cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178836 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 k6#B3TC=C8eYZneF-fjPICtV$wdhWuJ^yg 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 diff --git a/public/logos/PowerOn Details.PNG b/public/logos/PowerOn Details.PNG deleted file mode 100644 index d35eb4f0c41868f560c4c6ea06f9534d01c1c286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40428 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 diff --git a/public/logos/PowerOn.png b/public/logos/PowerOn.png deleted file mode 100644 index ec1658a93753b4719fb3d5391022ddad40ee55a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61568 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 diff --git a/public/logos/PowerOn_transparent.png b/public/logos/PowerOn_transparent.png deleted file mode 100644 index e8d4904f9a81e4f87e46b2c40762e9791d5b94ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72631 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≶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 R6BdFbJYD@<);T3K0RVdBCMW;^ diff --git a/public/logos/poweron-logo.png b/public/logos/poweron-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7aea3199f9bdeca08e7c2b7bb171de99fcaae7 GIT binary patch literal 63420 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 literal 0 HcmV?d00001 diff --git a/public/logos/spitch-logo.svg b/public/logos/spitch-logo.svg deleted file mode 100644 index ea0f59c..0000000 --- a/public/logos/spitch-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/poweron-home.html b/public/poweron-home.html new file mode 100644 index 0000000..0a3c92a --- /dev/null +++ b/public/poweron-home.html @@ -0,0 +1,192 @@ + + + + + + + PowerOn AI Platform - Home + + + + +
    +
    +

    PowerOn AI Platform

    +

    Intelligent Workflow Automation & Multi-Agent Collaboration

    +
    + +
    +

    What is PowerOn?

    +

    + PowerOn is an advanced AI-powered platform that revolutionizes how businesses manage workflows, + collaborate with AI agents, and automate complex processes. Our platform combines cutting-edge + artificial intelligence with intuitive workflow design tools to help organizations work smarter, + not harder. +

    +
    + +
    +

    Core Capabilities

    +
    +
    +

    AI Agent Management

    +

    Create, configure, and manage multiple AI agents for different business tasks and workflows.

    +
    +
    +

    Workflow Automation

    +

    Design and execute complex business processes with drag-and-drop workflow builder.

    +
    +
    +

    Document Processing

    +

    Intelligent document extraction, analysis, and generation powered by AI.

    +
    +
    +

    Multi-Platform Integration

    +

    Seamlessly connect with Microsoft 365, SharePoint, Outlook, and web services.

    +
    +
    +
    + +
    +

    Who Benefits from PowerOn?

    +

    + PowerOn is designed for businesses of all sizes that want to leverage AI to streamline operations, + improve productivity, and reduce manual workload. Whether you're managing customer relationships, + processing documents, or coordinating team workflows, PowerOn provides the tools you need to succeed + in the AI-powered future. +

    +
    + +
    +

    Key Benefits

    +
      +
    • Reduce manual work by up to 80% through intelligent automation
    • +
    • Improve accuracy and consistency in business processes
    • +
    • Enable 24/7 operation with AI agents that never sleep
    • +
    • Scale operations without proportional increase in human resources
    • +
    • Gain insights from AI-powered analytics and reporting
    • +
    +
    + +
    + + +
    + + diff --git a/public/poweron-privacy.html b/public/poweron-privacy.html new file mode 100644 index 0000000..1045b30 --- /dev/null +++ b/public/poweron-privacy.html @@ -0,0 +1,290 @@ + + + + + + PowerOn AI Platform - Privacy Policy + + + + +
    +
    +

    Privacy Policy

    +

    PowerOn AI Platform - Data Protection & Privacy

    +
    + +
    + Last Updated: August 2025 +
    + +
    +

    Introduction

    +

    + PowerOn AI Platform ("we," "our," or "us") is committed to protecting your privacy and ensuring + the security of your personal information. This Privacy Policy explains how we collect, use, + disclose, and safeguard your information when you use our AI-powered workflow automation platform. +

    +
    + +
    +

    Information We Collect

    + +

    Personal Information

    +

    We may collect the following types of personal information:

    +
      +
    • Name and contact information (email address, phone number)
    • +
    • Company and job title information
    • +
    • Authentication credentials and account settings
    • +
    • Payment and billing information
    • +
    + +

    Usage Information

    +

    We automatically collect information about how you use our platform:

    +
      +
    • Workflow creation and execution data
    • +
    • AI agent interactions and configurations
    • +
    • Document processing activities
    • +
    • Platform access logs and performance metrics
    • +
    + +

    Technical Information

    +

    We collect technical information to ensure platform functionality:

    +
      +
    • Device and browser information
    • +
    • IP address and location data
    • +
    • Cookies and similar tracking technologies
    • +
    • System performance and error logs
    • +
    +
    + +
    +

    How We Use Your Information

    +

    We use the collected information for the following purposes:

    +
      +
    • Provide and maintain our AI platform services
    • +
    • Process and execute your workflow automations
    • +
    • Improve platform performance and user experience
    • +
    • Send important service updates and notifications
    • +
    • Provide customer support and technical assistance
    • +
    • Ensure platform security and prevent fraud
    • +
    • Comply with legal obligations and regulations
    • +
    +
    + +
    +

    Data Sharing and Disclosure

    +

    We do not sell, trade, or rent your personal information to third parties. We may share your information only in the following circumstances:

    + +
    +

    Service Providers

    +

    We work with trusted third-party service providers who assist us in operating our platform, such as cloud hosting services, payment processors, and AI model providers. These providers are contractually obligated to protect your information.

    +
    + +
    +

    Legal Requirements

    +

    We may disclose your information if required by law, court order, or government regulation, or to protect our rights, property, or safety.

    +
    + +
    +

    Business Transfers

    +

    In the event of a merger, acquisition, or sale of assets, your information may be transferred as part of the business transaction.

    +
    +
    + +
    +

    Data Security

    +

    We implement comprehensive security measures to protect your information:

    +
      +
    • Encryption of data in transit and at rest
    • +
    • Regular security audits and vulnerability assessments
    • +
    • Access controls and authentication mechanisms
    • +
    • Secure data centers and infrastructure
    • +
    • Employee training on data protection practices
    • +
    +
    + +
    +

    Your Rights and Choices

    +

    You have the following rights regarding your personal information:

    +
      +
    • Access: Request a copy of your personal information
    • +
    • Correction: Update or correct inaccurate information
    • +
    • Deletion: Request deletion of your personal information
    • +
    • Portability: Receive your data in a portable format
    • +
    • Opt-out: Unsubscribe from marketing communications
    • +
    +
    + +
    +

    Data Retention

    +

    We retain your personal information only as long as necessary to:

    +
      +
    • Provide our services to you
    • +
    • Comply with legal obligations
    • +
    • Resolve disputes and enforce agreements
    • +
    • Improve our platform and services
    • +
    +

    When we no longer need your information, we securely delete or anonymize it.

    +
    + +
    +

    International Data Transfers

    +

    Your information may be transferred to and processed in countries other than your own. We ensure that such transfers comply with applicable data protection laws and implement appropriate safeguards to protect your information.

    +
    + +
    +

    Children's Privacy

    +

    Our platform is not intended for use by children under the age of 13. We do not knowingly collect personal information from children under 13. If you believe we have collected such information, please contact us immediately.

    +
    + +
    +

    Changes to This Policy

    +

    We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the new policy on our platform and updating the "Last Updated" date. Your continued use of our platform after such changes constitutes acceptance of the updated policy.

    +
    + +
    +

    Contact Us

    +

    If you have any questions about this Privacy Policy or our data practices, please contact us:

    +
    +

    Email: privacy@poweron-ai.com

    +

    Address: PowerOn AI Platform, Privacy Team

    +
    +
    + + + + +
    + + diff --git a/public/poweron-terms.html b/public/poweron-terms.html new file mode 100644 index 0000000..c9e057d --- /dev/null +++ b/public/poweron-terms.html @@ -0,0 +1,333 @@ + + + + + + PowerOn AI Platform - Terms of Service + + + + +
    +
    +

    Terms of Service

    +

    PowerOn AI Platform - Service Agreement & User Terms

    +
    + +
    + Last Updated: August 2025 +
    + +
    +

    Acceptance of Terms

    +

    + By accessing or using the PowerOn AI Platform ("Platform"), you agree to be bound by these Terms of Service + ("Terms"). If you do not agree to these Terms, you must not use our Platform. These Terms constitute a + legally binding agreement between you and PowerOn AI Platform ("we," "our," or "us"). +

    +
    + +
    +

    Description of Service

    +

    + PowerOn AI Platform is an AI-powered workflow automation and multi-agent collaboration platform that enables + users to create, manage, and execute automated business processes using artificial intelligence agents. +

    +

    Our Platform includes the following services:

    +
      +
    • AI agent creation and management
    • +
    • Workflow design and automation tools
    • +
    • Document processing and analysis capabilities
    • +
    • Integration with third-party services and platforms
    • +
    • Analytics and reporting features
    • +
    +
    + +
    +

    User Accounts and Registration

    + +

    Account Creation

    +

    To use our Platform, you must create an account by providing accurate, current, and complete information. You are responsible for maintaining the confidentiality of your account credentials.

    + +

    Account Security

    +

    You are responsible for all activities that occur under your account. You must immediately notify us of any unauthorized use of your account or any other security breach.

    + +

    Account Termination

    +

    We reserve the right to terminate or suspend your account at any time for violation of these Terms or for any other reason at our sole discretion.

    +
    + +
    +

    Acceptable Use Policy

    +

    You agree to use our Platform only for lawful purposes and in accordance with these Terms. You agree not to:

    + +
    +

    Prohibited Activities

    +
      +
    • Use the Platform for any illegal or unauthorized purpose
    • +
    • Violate any applicable laws or regulations
    • +
    • Infringe upon the intellectual property rights of others
    • +
    • Attempt to gain unauthorized access to our systems
    • +
    • Interfere with or disrupt the Platform's operation
    • +
    • Use the Platform to transmit harmful or malicious code
    • +
    • Harass, abuse, or harm other users
    • +
    +
    +
    + +
    +

    User Content and Data

    + +

    Content Ownership

    +

    You retain ownership of any content, data, or information you upload, create, or process through our Platform ("User Content").

    + +

    Content License

    +

    By using our Platform, you grant us a limited, non-exclusive license to use your User Content solely for the purpose of providing our services to you.

    + +

    Content Responsibility

    +

    You are solely responsible for the accuracy, legality, and appropriateness of your User Content. We do not review or monitor User Content and are not responsible for its content.

    +
    + +
    +

    Service Availability and Limitations

    + +
    +

    Service Availability

    +

    We strive to maintain high service availability but do not guarantee uninterrupted access to our Platform. We may perform maintenance, updates, or modifications that may temporarily affect service availability.

    +
    + +
    +

    Service Limitations

    +

    Our Platform is subject to reasonable usage limits and technical constraints. We reserve the right to implement usage limits, rate limiting, or other restrictions to ensure fair usage and system stability.

    +
    +
    + +
    +

    Intellectual Property Rights

    +

    + The Platform, including its software, design, content, and functionality, is owned by PowerOn AI Platform + and is protected by intellectual property laws. You may not copy, modify, distribute, or create derivative + works based on our Platform without our express written consent. +

    +
    + +
    +

    Third-Party Services and Integrations

    +

    + Our Platform may integrate with third-party services, applications, or platforms. We are not responsible + for the availability, accuracy, or content of these third-party services. Your use of third-party services + is subject to their respective terms of service and privacy policies. +

    +
    + +
    +

    Payment Terms

    + +

    Pricing and Billing

    +

    Service pricing is available on our Platform and may be subject to change. We will provide reasonable notice of any price changes.

    + +

    Payment Obligations

    +

    You agree to pay all fees associated with your use of our Platform. Failure to pay may result in service suspension or termination.

    + +

    Refunds

    +

    Refund policies are determined by your subscription plan and are subject to our discretion and applicable laws.

    +
    + +
    +

    Disclaimers and Limitations of Liability

    + +
    +

    Service Disclaimers

    +

    Our Platform is provided "as is" and "as available" without warranties of any kind. We disclaim all warranties, express or implied, including but not limited to warranties of merchantability, fitness for a particular purpose, and non-infringement.

    +
    + +
    +

    Limitation of Liability

    +

    In no event shall PowerOn AI Platform be liable for any indirect, incidental, special, consequential, or punitive damages, including but not limited to loss of profits, data, or use, arising out of or relating to your use of our Platform.

    +
    +
    + +
    +

    Indemnification

    +

    + You agree to indemnify, defend, and hold harmless PowerOn AI Platform and its officers, directors, + employees, and agents from and against any claims, damages, losses, liabilities, costs, and expenses + arising out of or relating to your use of our Platform or violation of these Terms. +

    +
    + +
    +

    Governing Law and Dispute Resolution

    +

    + These Terms are governed by and construed in accordance with the laws of the jurisdiction where + PowerOn AI Platform is incorporated. Any disputes arising from these Terms or your use of our Platform + shall be resolved through binding arbitration in accordance with applicable arbitration rules. +

    +
    + +
    +

    Changes to Terms

    +

    + We reserve the right to modify these Terms at any time. We will notify you of any material changes + by posting the updated Terms on our Platform. Your continued use of our Platform after such changes + constitutes acceptance of the updated Terms. +

    +
    + +
    +

    Contact Information

    +

    If you have any questions about these Terms of Service, please contact us:

    +
    +

    Email: legal@poweron-ai.com

    +

    Address: PowerOn AI Platform, Legal Department

    +
    +
    + + + + +
    + + diff --git a/src/App.tsx b/src/App.tsx index 51b89f3..ecf97b9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -35,6 +35,7 @@ import { FeatureLayout } from './layouts/FeatureLayout'; import { DashboardPage } from './pages/Dashboard'; import { SettingsPage } from './pages/Settings'; import { FeatureViewPage } from './pages/FeatureView'; +import { AdminMandatesPage, AdminUsersPage, AdminRolesPage } from './pages/admin'; function App() { // Load saved theme preference and set app name on app mount @@ -115,9 +116,9 @@ function App() { {/* ADMIN ROUTES (nur SysAdmin) */} {/* ============================================== */} - Admin: Mandanten (TODO)
} /> - Admin: Benutzer (TODO)
} /> - Admin: Globale Rollen (TODO)
} /> + } /> + } /> + } /> diff --git a/src/api/authApi.ts b/src/api/authApi.ts index 05075f4..8343584 100644 --- a/src/api/authApi.ts +++ b/src/api/authApi.ts @@ -85,15 +85,18 @@ export interface UsernameAvailabilityResponse { message: string; } -export interface User { +// User-Typ wird aus userApi.ts importiert +// Hier nur für Rückwärtskompatibilität +export interface AuthUser { id: string; username: string; email: string; fullName: string; language: string; enabled: boolean; - privilege: string; - mandateId: string; + roleLabels?: string[]; + authenticationAuthority: string; + isSysAdmin?: boolean; [key: string]: any; } @@ -138,7 +141,7 @@ export async function loginApi(loginData: LoginRequest): Promise * Fetch current user data * Endpoint: GET /api/local/me | /api/msft/me | /api/google/me */ -export async function fetchCurrentUserApi(authAuthority?: string): Promise { +export async function fetchCurrentUserApi(authAuthority?: string): Promise { let endpoint = '/api/local/me'; if (authAuthority === 'msft') { @@ -147,7 +150,7 @@ export async function fetchCurrentUserApi(authAuthority?: string): Promise endpoint = '/api/google/me'; } - const response = await api.get(endpoint); + const response = await api.get(endpoint); return response.data; } diff --git a/src/api/featuresApi.ts b/src/api/featuresApi.ts index 2ea691f..8ee75fc 100644 --- a/src/api/featuresApi.ts +++ b/src/api/featuresApi.ts @@ -144,7 +144,7 @@ const MOCK_RESPONSE: FeaturesMyResponse = { }; // Flag für Mock-Modus (auf false setzen wenn Backend bereit) -const USE_MOCK = true; +const USE_MOCK = false; // ============================================================================= // API FUNCTIONS diff --git a/src/api/promptApi.ts b/src/api/promptApi.ts index 6204f51..3b5a000 100644 --- a/src/api/promptApi.ts +++ b/src/api/promptApi.ts @@ -62,15 +62,16 @@ export interface PaginatedResponse { } export interface CreatePromptData { - mandateId: string; name: string; content: string; + // mandateId wird nicht mehr vom Client gesendet + // Das Backend bestimmt den Kontext über die instanceId } export interface UpdatePromptData { - mandateId: string; name: string; content: string; + // mandateId wird nicht mehr vom Client gesendet } // Type for the request function passed to API functions diff --git a/src/api/trusteeApi.ts b/src/api/trusteeApi.ts index 013eeb6..bd97bf6 100644 --- a/src/api/trusteeApi.ts +++ b/src/api/trusteeApi.ts @@ -1,3 +1,12 @@ +/** + * Trustee API + * + * API-Funktionen für das Trustee-Feature. + * Alle Endpunkte erfordern eine instanceId für den Feature-Instanz-Kontext. + * + * URL-Struktur: /api/trustee/{instanceId}/{entity} + */ + import { ApiRequestOptions } from '../hooks/useApi'; // ============================================================================ @@ -60,7 +69,7 @@ export interface TrusteeDocument { contractId: string; documentName: string; documentMimeType: string; - documentData?: any; // Binary data, typically not included in list responses + documentData?: any; mandateId?: string; _createdAt?: number; _modifiedAt?: number; @@ -150,16 +159,24 @@ function _buildPaginationParams(params?: PaginationParams): Record return requestParams; } +/** + * Erstellt die Basis-URL für Trustee-Endpunkte + */ +function _getTrusteeBaseUrl(instanceId: string): string { + return `/api/trustee/${instanceId}`; +} + // ============================================================================ // ORGANISATION API // ============================================================================ export async function fetchOrganisations( request: ApiRequestFunction, + instanceId: string, params?: PaginationParams ): Promise | TrusteeOrganisation[]> { return await request({ - url: '/api/trustee/organisations', + url: `${_getTrusteeBaseUrl(instanceId)}/organisations`, method: 'get', params: _buildPaginationParams(params) }); @@ -167,11 +184,12 @@ export async function fetchOrganisations( export async function fetchOrganisationById( request: ApiRequestFunction, + instanceId: string, orgId: string ): Promise { try { return await request({ - url: `/api/trustee/organisations/${orgId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/organisations/${orgId}`, method: 'get' }); } catch (error: any) { @@ -182,10 +200,11 @@ export async function fetchOrganisationById( export async function createOrganisation( request: ApiRequestFunction, + instanceId: string, data: Partial ): Promise { return await request({ - url: '/api/trustee/organisations', + url: `${_getTrusteeBaseUrl(instanceId)}/organisations`, method: 'post', data }); @@ -193,11 +212,12 @@ export async function createOrganisation( export async function updateOrganisation( request: ApiRequestFunction, + instanceId: string, orgId: string, data: Partial ): Promise { return await request({ - url: `/api/trustee/organisations/${orgId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/organisations/${orgId}`, method: 'put', data }); @@ -205,10 +225,11 @@ export async function updateOrganisation( export async function deleteOrganisation( request: ApiRequestFunction, + instanceId: string, orgId: string ): Promise { await request({ - url: `/api/trustee/organisations/${orgId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/organisations/${orgId}`, method: 'delete' }); } @@ -219,10 +240,11 @@ export async function deleteOrganisation( export async function fetchRoles( request: ApiRequestFunction, + instanceId: string, params?: PaginationParams ): Promise | TrusteeRole[]> { return await request({ - url: '/api/trustee/roles', + url: `${_getTrusteeBaseUrl(instanceId)}/roles`, method: 'get', params: _buildPaginationParams(params) }); @@ -230,11 +252,12 @@ export async function fetchRoles( export async function fetchRoleById( request: ApiRequestFunction, + instanceId: string, roleId: string ): Promise { try { return await request({ - url: `/api/trustee/roles/${roleId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/roles/${roleId}`, method: 'get' }); } catch (error: any) { @@ -245,10 +268,11 @@ export async function fetchRoleById( export async function createRole( request: ApiRequestFunction, + instanceId: string, data: Partial ): Promise { return await request({ - url: '/api/trustee/roles', + url: `${_getTrusteeBaseUrl(instanceId)}/roles`, method: 'post', data }); @@ -256,11 +280,12 @@ export async function createRole( export async function updateRole( request: ApiRequestFunction, + instanceId: string, roleId: string, data: Partial ): Promise { return await request({ - url: `/api/trustee/roles/${roleId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/roles/${roleId}`, method: 'put', data }); @@ -268,10 +293,11 @@ export async function updateRole( export async function deleteRole( request: ApiRequestFunction, + instanceId: string, roleId: string ): Promise { await request({ - url: `/api/trustee/roles/${roleId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/roles/${roleId}`, method: 'delete' }); } @@ -282,10 +308,11 @@ export async function deleteRole( export async function fetchAccess( request: ApiRequestFunction, + instanceId: string, params?: PaginationParams ): Promise | TrusteeAccess[]> { return await request({ - url: '/api/trustee/access', + url: `${_getTrusteeBaseUrl(instanceId)}/access`, method: 'get', params: _buildPaginationParams(params) }); @@ -293,11 +320,12 @@ export async function fetchAccess( export async function fetchAccessById( request: ApiRequestFunction, + instanceId: string, accessId: string ): Promise { try { return await request({ - url: `/api/trustee/access/${accessId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/access/${accessId}`, method: 'get' }); } catch (error: any) { @@ -308,30 +336,33 @@ export async function fetchAccessById( export async function fetchAccessByOrganisation( request: ApiRequestFunction, + instanceId: string, orgId: string ): Promise { return await request({ - url: `/api/trustee/access/organisation/${orgId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/access/organisation/${orgId}`, method: 'get' }); } export async function fetchAccessByUser( request: ApiRequestFunction, + instanceId: string, userId: string ): Promise { return await request({ - url: `/api/trustee/access/user/${userId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/access/user/${userId}`, method: 'get' }); } export async function createAccess( request: ApiRequestFunction, + instanceId: string, data: Partial ): Promise { return await request({ - url: '/api/trustee/access', + url: `${_getTrusteeBaseUrl(instanceId)}/access`, method: 'post', data }); @@ -339,11 +370,12 @@ export async function createAccess( export async function updateAccess( request: ApiRequestFunction, + instanceId: string, accessId: string, data: Partial ): Promise { return await request({ - url: `/api/trustee/access/${accessId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/access/${accessId}`, method: 'put', data }); @@ -351,10 +383,11 @@ export async function updateAccess( export async function deleteAccess( request: ApiRequestFunction, + instanceId: string, accessId: string ): Promise { await request({ - url: `/api/trustee/access/${accessId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/access/${accessId}`, method: 'delete' }); } @@ -365,10 +398,11 @@ export async function deleteAccess( export async function fetchContracts( request: ApiRequestFunction, + instanceId: string, params?: PaginationParams ): Promise | TrusteeContract[]> { return await request({ - url: '/api/trustee/contracts', + url: `${_getTrusteeBaseUrl(instanceId)}/contracts`, method: 'get', params: _buildPaginationParams(params) }); @@ -376,11 +410,12 @@ export async function fetchContracts( export async function fetchContractById( request: ApiRequestFunction, + instanceId: string, contractId: string ): Promise { try { return await request({ - url: `/api/trustee/contracts/${contractId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/contracts/${contractId}`, method: 'get' }); } catch (error: any) { @@ -391,20 +426,22 @@ export async function fetchContractById( export async function fetchContractsByOrganisation( request: ApiRequestFunction, + instanceId: string, orgId: string ): Promise { return await request({ - url: `/api/trustee/contracts/organisation/${orgId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/contracts/organisation/${orgId}`, method: 'get' }); } export async function createContract( request: ApiRequestFunction, + instanceId: string, data: Partial ): Promise { return await request({ - url: '/api/trustee/contracts', + url: `${_getTrusteeBaseUrl(instanceId)}/contracts`, method: 'post', data }); @@ -412,11 +449,12 @@ export async function createContract( export async function updateContract( request: ApiRequestFunction, + instanceId: string, contractId: string, data: Partial ): Promise { return await request({ - url: `/api/trustee/contracts/${contractId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/contracts/${contractId}`, method: 'put', data }); @@ -424,10 +462,11 @@ export async function updateContract( export async function deleteContract( request: ApiRequestFunction, + instanceId: string, contractId: string ): Promise { await request({ - url: `/api/trustee/contracts/${contractId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/contracts/${contractId}`, method: 'delete' }); } @@ -438,10 +477,11 @@ export async function deleteContract( export async function fetchDocuments( request: ApiRequestFunction, + instanceId: string, params?: PaginationParams ): Promise | TrusteeDocument[]> { return await request({ - url: '/api/trustee/documents', + url: `${_getTrusteeBaseUrl(instanceId)}/documents`, method: 'get', params: _buildPaginationParams(params) }); @@ -449,11 +489,12 @@ export async function fetchDocuments( export async function fetchDocumentById( request: ApiRequestFunction, + instanceId: string, documentId: string ): Promise { try { return await request({ - url: `/api/trustee/documents/${documentId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/documents/${documentId}`, method: 'get' }); } catch (error: any) { @@ -464,20 +505,22 @@ export async function fetchDocumentById( export async function fetchDocumentsByContract( request: ApiRequestFunction, + instanceId: string, contractId: string ): Promise { return await request({ - url: `/api/trustee/documents/contract/${contractId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/documents/contract/${contractId}`, method: 'get' }); } export async function createDocument( request: ApiRequestFunction, + instanceId: string, data: Partial ): Promise { return await request({ - url: '/api/trustee/documents', + url: `${_getTrusteeBaseUrl(instanceId)}/documents`, method: 'post', data }); @@ -485,11 +528,12 @@ export async function createDocument( export async function updateDocument( request: ApiRequestFunction, + instanceId: string, documentId: string, data: Partial ): Promise { return await request({ - url: `/api/trustee/documents/${documentId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/documents/${documentId}`, method: 'put', data }); @@ -497,10 +541,11 @@ export async function updateDocument( export async function deleteDocument( request: ApiRequestFunction, + instanceId: string, documentId: string ): Promise { await request({ - url: `/api/trustee/documents/${documentId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/documents/${documentId}`, method: 'delete' }); } @@ -511,10 +556,11 @@ export async function deleteDocument( export async function fetchPositions( request: ApiRequestFunction, + instanceId: string, params?: PaginationParams ): Promise | TrusteePosition[]> { return await request({ - url: '/api/trustee/positions', + url: `${_getTrusteeBaseUrl(instanceId)}/positions`, method: 'get', params: _buildPaginationParams(params) }); @@ -522,11 +568,12 @@ export async function fetchPositions( export async function fetchPositionById( request: ApiRequestFunction, + instanceId: string, positionId: string ): Promise { try { return await request({ - url: `/api/trustee/positions/${positionId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/positions/${positionId}`, method: 'get' }); } catch (error: any) { @@ -537,30 +584,33 @@ export async function fetchPositionById( export async function fetchPositionsByContract( request: ApiRequestFunction, + instanceId: string, contractId: string ): Promise { return await request({ - url: `/api/trustee/positions/contract/${contractId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/positions/contract/${contractId}`, method: 'get' }); } export async function fetchPositionsByOrganisation( request: ApiRequestFunction, + instanceId: string, orgId: string ): Promise { return await request({ - url: `/api/trustee/positions/organisation/${orgId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/positions/organisation/${orgId}`, method: 'get' }); } export async function createPosition( request: ApiRequestFunction, + instanceId: string, data: Partial ): Promise { return await request({ - url: '/api/trustee/positions', + url: `${_getTrusteeBaseUrl(instanceId)}/positions`, method: 'post', data }); @@ -568,11 +618,12 @@ export async function createPosition( export async function updatePosition( request: ApiRequestFunction, + instanceId: string, positionId: string, data: Partial ): Promise { return await request({ - url: `/api/trustee/positions/${positionId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/positions/${positionId}`, method: 'put', data }); @@ -580,10 +631,11 @@ export async function updatePosition( export async function deletePosition( request: ApiRequestFunction, + instanceId: string, positionId: string ): Promise { await request({ - url: `/api/trustee/positions/${positionId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/positions/${positionId}`, method: 'delete' }); } @@ -594,10 +646,11 @@ export async function deletePosition( export async function fetchPositionDocuments( request: ApiRequestFunction, + instanceId: string, params?: PaginationParams ): Promise | TrusteePositionDocument[]> { return await request({ - url: '/api/trustee/position-documents', + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents`, method: 'get', params: _buildPaginationParams(params) }); @@ -605,11 +658,12 @@ export async function fetchPositionDocuments( export async function fetchPositionDocumentById( request: ApiRequestFunction, + instanceId: string, linkId: string ): Promise { try { return await request({ - url: `/api/trustee/position-documents/${linkId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents/${linkId}`, method: 'get' }); } catch (error: any) { @@ -620,30 +674,33 @@ export async function fetchPositionDocumentById( export async function fetchDocumentsForPosition( request: ApiRequestFunction, + instanceId: string, positionId: string ): Promise { return await request({ - url: `/api/trustee/position-documents/position/${positionId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents/position/${positionId}`, method: 'get' }); } export async function fetchPositionsForDocument( request: ApiRequestFunction, + instanceId: string, documentId: string ): Promise { return await request({ - url: `/api/trustee/position-documents/document/${documentId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents/document/${documentId}`, method: 'get' }); } export async function createPositionDocument( request: ApiRequestFunction, + instanceId: string, data: Partial ): Promise { return await request({ - url: '/api/trustee/position-documents', + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents`, method: 'post', data }); @@ -651,10 +708,11 @@ export async function createPositionDocument( export async function deletePositionDocument( request: ApiRequestFunction, + instanceId: string, linkId: string ): Promise { await request({ - url: `/api/trustee/position-documents/${linkId}`, + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents/${linkId}`, method: 'delete' }); } diff --git a/src/api/userApi.ts b/src/api/userApi.ts index 6cf36e6..0ba5f24 100644 --- a/src/api/userApi.ts +++ b/src/api/userApi.ts @@ -13,8 +13,10 @@ export interface User { enabled: boolean; roleLabels?: string[]; // Array of role labels from backend (e.g., ["user"]) authenticationAuthority: string; - mandateId: string; - [key: string]: any; // Allow additional properties (may include deprecated 'privilege' from backend) + isSysAdmin?: boolean; // System-Administrator Flag + // mandateId ist nicht mehr Teil des User-Objekts (Multi-Tenant-Konzept) + // Der Mandant-Kontext wird über Feature-Instanzen bestimmt + [key: string]: any; // Allow additional properties } export type UserUpdateData = Partial>; diff --git a/src/components/FormGenerator/ActionButtons/EditActionButton/EditActionButton.tsx b/src/components/FormGenerator/ActionButtons/EditActionButton/EditActionButton.tsx index 3555125..af2e030 100644 --- a/src/components/FormGenerator/ActionButtons/EditActionButton/EditActionButton.tsx +++ b/src/components/FormGenerator/ActionButtons/EditActionButton/EditActionButton.tsx @@ -84,15 +84,23 @@ export function EditActionButton({ const handleClick = async (e: React.MouseEvent) => { e.stopPropagation(); if (!isDisabled && !loading && !isEditing && !internalLoading && !fetchingData && !isPopupOpen) { + // If onEdit callback is provided, call it and return early (custom handling) + // The page will handle opening its own modal/form + if (onEdit) { + setInternalLoading(true); + try { + await onEdit(row); + } finally { + setInternalLoading(false); + } + return; // Don't open the built-in popup when custom onEdit is provided + } + + // Otherwise, use the built-in popup form setInternalLoading(true); setFetchingData(true); try { - // Call the onEdit callback if provided - if (onEdit) { - await onEdit(row); - } - const itemId = (row as any)[idField]; // Fetch current item data - use generic fetch function from hookData diff --git a/src/components/Navigation/MandateNavigation.tsx b/src/components/Navigation/MandateNavigation.tsx index 2986e70..159cd60 100644 --- a/src/components/Navigation/MandateNavigation.tsx +++ b/src/components/Navigation/MandateNavigation.tsx @@ -2,6 +2,7 @@ * MandateNavigation * * Hierarchische Navigation für das Multi-Tenant-System. + * Verwendet TreeNavigation für flexible Baumstruktur. * * Struktur: * - SYSTEM (immer verfügbar) @@ -16,13 +17,13 @@ * - ADMINISTRATION (nur für SysAdmin) */ -import React, { useState } from 'react'; -import { NavLink, useLocation } from 'react-router-dom'; +import React, { useMemo } from 'react'; import { useMandates, useFeatureStore } from '../../stores/featureStore'; +import { useCurrentUser } from '../../hooks/useUsers'; import { FEATURE_REGISTRY, getLabel } from '../../types/mandate'; import type { Mandate, MandateFeature, FeatureInstance } from '../../types/mandate'; -import { FaHome, FaCog, FaChevronDown, FaChevronRight, FaBriefcase, FaRobot, FaPlay } from 'react-icons/fa'; -import { RiAdminFill } from 'react-icons/ri'; +import { FaHome, FaCog, FaBriefcase, FaRobot, FaPlay, FaBuilding, FaUsers, FaUserShield } from 'react-icons/fa'; +import { TreeNavigation, type TreeItem, type TreeNodeItem } from './TreeNavigation'; import styles from './MandateNavigation.module.css'; // ============================================================================= @@ -36,263 +37,93 @@ const FEATURE_ICONS: Record = { }; // ============================================================================= -// SYSTEM SECTION +// HELPER FUNCTIONS // ============================================================================= -const SystemSection: React.FC = () => { - const location = useLocation(); - - return ( -
-
- SYSTEM -
-
- - `${styles.navItem} ${isActive && location.pathname === '/' ? styles.active : ''}` - } - > - - Übersicht - - - `${styles.navItem} ${isActive ? styles.active : ''}` - } - > - - Einstellungen - -
-
- ); -}; - -// ============================================================================= -// INSTANCE NAV GROUP -// ============================================================================= - -interface InstanceNavGroupProps { - instance: FeatureInstance; - mandateId: string; - featureCode: string; -} - -const InstanceNavGroup: React.FC = ({ - instance, - mandateId, - featureCode, -}) => { - const [isExpanded, setIsExpanded] = useState(false); - const location = useLocation(); - - // Prüfe ob wir in dieser Instanz sind +/** + * Convert a FeatureInstance to TreeNodeItem + */ +function instanceToTreeNode( + instance: FeatureInstance, + mandateId: string, + featureCode: string +): TreeNodeItem { const basePath = `/mandates/${mandateId}/${featureCode}/${instance.id}`; - const isInInstance = location.pathname.startsWith(basePath); - // Auto-expand wenn wir in der Instanz sind - React.useEffect(() => { - if (isInInstance && !isExpanded) { - setIsExpanded(true); - } - }, [isInInstance]); - - // Views aus Registry holen + // Get views from registry const featureConfig = FEATURE_REGISTRY[featureCode]; const views = featureConfig?.views || []; - // Nur Views anzeigen für die der User Berechtigung hat + // Filter views based on permissions const visibleViews = views.filter(view => { const viewCode = `${featureCode}-${view.code}`; return instance.permissions?.views?.[viewCode] !== false; }); - return ( -
- - - {isExpanded && ( -
- {visibleViews.map(view => ( - - `${styles.viewItem} ${isActive ? styles.active : ''}` - } - > - {getLabel(view.label)} - - ))} -
- )} -
- ); -}; - -// ============================================================================= -// FEATURE NAV GROUP -// ============================================================================= - -interface FeatureNavGroupProps { - feature: MandateFeature; - mandateId: string; + // Convert views to children + const children: TreeNodeItem[] = visibleViews.map(view => ({ + id: `${instance.id}-${view.code}`, + label: getLabel(view.label), + path: `${basePath}/${view.path}`, + })); + + return { + id: instance.id, + label: instance.instanceLabel, + badge: instance.userRole, + children, + defaultExpanded: false, + }; } -const FeatureNavGroup: React.FC = ({ feature, mandateId }) => { - const [isExpanded, setIsExpanded] = useState(false); - const location = useLocation(); - - // Prüfe ob wir in diesem Feature sind - const featurePath = `/mandates/${mandateId}/${feature.code}`; - const isInFeature = location.pathname.startsWith(featurePath); - - // Auto-expand wenn wir im Feature sind - React.useEffect(() => { - if (isInFeature && !isExpanded) { - setIsExpanded(true); - } - }, [isInFeature]); - +/** + * Convert a MandateFeature to TreeNodeItem + */ +function featureToTreeNode( + feature: MandateFeature, + mandateId: string +): TreeNodeItem | null { if (feature.instances.length === 0) { return null; } - return ( -
- - - {isExpanded && ( -
- {feature.instances.map(instance => ( - - ))} -
- )} -
+ const children = feature.instances.map(instance => + instanceToTreeNode(instance, mandateId, feature.code) ); -}; - -// ============================================================================= -// MANDATE NAV GROUP -// ============================================================================= - -interface MandateNavGroupProps { - mandate: Mandate; + + return { + id: `${mandateId}-${feature.code}`, + label: getLabel(feature.label), + icon: FEATURE_ICONS[feature.code] || , + badge: feature.instances.length, + children, + defaultExpanded: false, + }; } -const MandateNavGroup: React.FC = ({ mandate }) => { - const [isExpanded, setIsExpanded] = useState(true); - const location = useLocation(); - - // Prüfe ob wir in diesem Mandanten sind - const mandatePath = `/mandates/${mandate.id}`; - const isInMandate = location.pathname.startsWith(mandatePath); - +/** + * Convert a Mandate to TreeNodeItem + */ +function mandateToTreeNode(mandate: Mandate): TreeNodeItem | null { if (mandate.features.length === 0) { return null; } - return ( -
- - - {isExpanded && ( -
- {mandate.features.map(feature => ( - - ))} -
- )} -
- ); -}; - -// ============================================================================= -// ADMIN SECTION -// ============================================================================= - -interface AdminSectionProps { - isSysAdmin: boolean; -} - -const AdminSection: React.FC = ({ isSysAdmin }) => { - if (!isSysAdmin) { + const children = mandate.features + .map(feature => featureToTreeNode(feature, mandate.id)) + .filter((node): node is TreeNodeItem => node !== null); + + if (children.length === 0) { return null; } - return ( -
-
- ADMINISTRATION -
-
- - `${styles.navItem} ${isActive ? styles.active : ''}` - } - > - - Mandanten - - - `${styles.navItem} ${isActive ? styles.active : ''}` - } - > - - Benutzer - - - `${styles.navItem} ${isActive ? styles.active : ''}` - } - > - - Globale Rollen - -
-
- ); -}; + return { + id: mandate.id, + label: mandate.name, + children, + defaultExpanded: true, + }; +} // ============================================================================= // EMPTY STATE @@ -314,32 +145,97 @@ const EmptyState: React.FC = () => ( export const MandateNavigation: React.FC = () => { const mandates = useMandates(); const { hasAnyInstance } = useFeatureStore(); + const { user } = useCurrentUser(); - // TODO: Aus Auth-Store holen - const isSysAdmin = false; + // Get isSysAdmin from user data + const isSysAdmin = user?.isSysAdmin ?? false; + + // Build navigation items using TreeNavigation structure + const navigationItems: TreeItem[] = useMemo(() => { + const items: TreeItem[] = []; + + // System section (always visible) + items.push({ + type: 'section', + title: 'SYSTEM', + children: [ + { + id: 'home', + label: 'Übersicht', + icon: , + path: '/', + }, + { + id: 'settings', + label: 'Einstellungen', + icon: , + path: '/settings', + }, + ], + }); + + // Separator + items.push({ type: 'separator' }); + + // Mandate nodes (if user has instances) + if (hasAnyInstance()) { + const mandateNodes = mandates + .map(mandate => mandateToTreeNode(mandate)) + .filter((node): node is TreeNodeItem => node !== null); + + if (mandateNodes.length > 0) { + items.push(...mandateNodes); + } + } + + // Admin section (only for SysAdmin) + if (isSysAdmin) { + items.push({ type: 'separator' }); + items.push({ + type: 'section', + title: 'ADMINISTRATION', + children: [ + { + id: 'admin-mandates', + label: 'Mandanten', + icon: , + path: '/admin/mandates', + }, + { + id: 'admin-users', + label: 'Benutzer', + icon: , + path: '/admin/users', + }, + { + id: 'admin-roles', + label: 'Globale Rollen', + icon: , + path: '/admin/roles', + }, + ], + }); + } + + return items; + }, [mandates, hasAnyInstance, isSysAdmin]); return (
- {/* System-Bereich (immer sichtbar) */} - - - {/* Separator */} -
- - {/* Mandanten & Features */} - {hasAnyInstance() ? ( - mandates.map(mandate => ( - - )) + {hasAnyInstance() || isSysAdmin ? ( + ) : ( - + <> + + + )} - - {/* Separator vor Admin */} - {isSysAdmin &&
} - - {/* Admin-Bereich (nur für SysAdmin) */} -
); }; diff --git a/src/components/Navigation/TreeNavigation/TreeNavigation.module.css b/src/components/Navigation/TreeNavigation/TreeNavigation.module.css new file mode 100644 index 0000000..477fc06 --- /dev/null +++ b/src/components/Navigation/TreeNavigation/TreeNavigation.module.css @@ -0,0 +1,303 @@ +/** + * TreeNavigation Styles + * + * Flexible hierarchical navigation with support for: + * - Dynamic sublevels + * - Sections and separators + * - Various visual states (active, disabled, hover) + */ + +.treeNavigation { + display: flex; + flex-direction: column; + gap: 0.25rem; + padding: 0 0.5rem; +} + +/* ============================================ */ +/* SEPARATOR */ +/* ============================================ */ + +.separator { + height: 1px; + background: var(--border-color, #e0e0e0); + margin: 0.75rem 0.5rem; +} + +/* ============================================ */ +/* SECTION */ +/* ============================================ */ + +.treeSection { + margin-bottom: 0.5rem; +} + +.sectionHeader { + padding: 0.5rem 0.75rem; +} + +.sectionTitle { + font-size: 0.65rem; + font-weight: 600; + letter-spacing: 0.1em; + color: var(--text-tertiary, #888); + text-transform: uppercase; +} + +.sectionContent { + display: flex; + flex-direction: column; + gap: 2px; +} + +/* ============================================ */ +/* TREE NODE */ +/* ============================================ */ + +.treeNodeContainer { + display: flex; + flex-direction: column; +} + +.treeNode { + display: flex; + align-items: center; + gap: 0.5rem; + width: 100%; + padding: 0.5rem 0.75rem; + border: none; + border-radius: 6px; + background: transparent; + cursor: pointer; + text-decoration: none; + font-family: inherit; + text-align: left; + color: var(--text-secondary, #666); + font-size: 0.875rem; + transition: all 0.15s ease; +} + +.treeNode:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.04)); + color: var(--text-primary, #1a1a1a); +} + +.treeNode.active { + background: var(--primary-light, #e0e7ff); + color: var(--primary-color, #2563eb); + font-weight: 500; +} + +.treeNode.disabled { + opacity: 0.5; + cursor: not-allowed; + pointer-events: none; +} + +/* ============================================ */ +/* LEVEL-SPECIFIC STYLES */ +/* ============================================ */ + +/* Root level (level 0) */ +.levelRoot { + font-size: 0.875rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); + padding: 0.625rem 0.75rem; +} + +.levelRoot .nodeLabel { + flex: 1; +} + +/* Level 1 */ +.levelOne { + font-size: 0.8125rem; + font-weight: 500; + color: var(--text-secondary, #666); + padding: 0.5rem 0.75rem; +} + +/* Level 2 */ +.levelTwo { + font-size: 0.75rem; + font-weight: 500; + color: var(--text-secondary, #666); + padding: 0.375rem 0.5rem; +} + +/* Level 3 */ +.levelThree { + font-size: 0.75rem; + color: var(--text-secondary, #666); + padding: 0.375rem 0.5rem; +} + +/* Deep levels (4+) */ +.levelDeep { + font-size: 0.6875rem; + color: var(--text-tertiary, #888); + padding: 0.25rem 0.5rem; +} + +/* ============================================ */ +/* NODE CHILDREN (INDENTATION) */ +/* ============================================ */ + +.treeNodeChildren { + margin-left: 0.25rem; + padding-left: 0.75rem; + border-left: 2px solid var(--border-color, #e0e0e0); +} + +/* Active parent highlights the border */ +.treeNodeContainer:has(> .treeNode.active) > .treeNodeChildren { + border-left-color: var(--primary-color, #2563eb); +} + +/* Also highlight if any descendant is active */ +.treeNodeContainer:has(.treeNode.active) > .treeNodeChildren { + border-left-color: var(--primary-light, #93c5fd); +} + +/* ============================================ */ +/* NODE ELEMENTS */ +/* ============================================ */ + +.chevron { + display: flex; + align-items: center; + justify-content: center; + width: 1rem; + height: 1rem; + font-size: 0.625rem; + color: var(--text-tertiary, #888); + flex-shrink: 0; + cursor: pointer; + border-radius: 3px; + transition: background 0.1s ease; +} + +.chevron:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.06)); +} + +.chevronSpacer { + width: 1rem; + flex-shrink: 0; +} + +.nodeIcon { + display: flex; + align-items: center; + justify-content: center; + font-size: 1rem; + flex-shrink: 0; + color: inherit; +} + +.nodeLabel { + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.nodeBadge { + font-size: 0.625rem; + padding: 0.0625rem 0.375rem; + background: var(--surface-color, #f0f0f0); + border-radius: 9999px; + color: var(--text-tertiary, #888); + text-transform: uppercase; + letter-spacing: 0.025em; + flex-shrink: 0; +} + +/* Badge variants */ +.badgePrimary { + background: var(--primary-color, #2563eb); + color: white; +} + +.badgeSuccess { + background: var(--success-color, #22c55e); + color: white; +} + +.badgeWarning { + background: var(--warning-color, #f59e0b); + color: white; +} + +/* Active node badge */ +.treeNode.active .nodeBadge { + background: var(--primary-color, #2563eb); + color: white; +} + +/* ============================================ */ +/* DARK THEME */ +/* ============================================ */ + +:global(.dark-theme) .separator { + background: var(--border-dark, #333); +} + +:global(.dark-theme) .sectionTitle { + color: var(--text-tertiary-dark, #666); +} + +:global(.dark-theme) .treeNode { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .treeNode:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06)); + color: var(--text-primary-dark, #fff); +} + +:global(.dark-theme) .treeNode.active { + background: var(--primary-dark-bg, #1e3a5f); + color: var(--primary-light, #93c5fd); +} + +:global(.dark-theme) .levelRoot { + color: var(--text-primary-dark, #fff); +} + +:global(.dark-theme) .levelOne, +:global(.dark-theme) .levelTwo, +:global(.dark-theme) .levelThree { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .levelDeep { + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .treeNodeChildren { + border-left-color: var(--border-dark, #444); +} + +:global(.dark-theme) .treeNodeContainer:has(.treeNode.active) > .treeNodeChildren { + border-left-color: var(--primary-light, #93c5fd); +} + +:global(.dark-theme) .nodeBadge { + background: var(--surface-dark, #2a2a2a); + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .chevron { + color: var(--text-tertiary-dark, #666); +} + +:global(.dark-theme) .chevron:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.1)); +} + +:global(.dark-theme) .treeNode.active .nodeBadge { + background: var(--primary-color, #2563eb); + color: white; +} diff --git a/src/components/Navigation/TreeNavigation/TreeNavigation.tsx b/src/components/Navigation/TreeNavigation/TreeNavigation.tsx new file mode 100644 index 0000000..0e1af84 --- /dev/null +++ b/src/components/Navigation/TreeNavigation/TreeNavigation.tsx @@ -0,0 +1,378 @@ +/** + * TreeNavigation + * + * A flexible, recursive tree navigation component that supports: + * - Dynamic sublevels of any depth + * - Expandable/collapsible nodes + * - Auto-expand based on active path + * - Customizable icons and badges + * - Section headers + * - NavLink integration with React Router + */ + +import React, { useState, useEffect, ReactNode } from 'react'; +import { NavLink, useLocation } from 'react-router-dom'; +import { FaChevronDown, FaChevronRight } from 'react-icons/fa'; +import styles from './TreeNavigation.module.css'; + +// ============================================================================= +// TYPES +// ============================================================================= + +export interface TreeNodeItem { + /** Unique identifier for this node */ + id: string; + /** Display label */ + label: string; + /** Icon to display (React component or element) */ + icon?: ReactNode; + /** Badge content (e.g., count, role) */ + badge?: string | number; + /** Optional badge style variant */ + badgeVariant?: 'default' | 'primary' | 'success' | 'warning'; + /** Path for navigation (if this is a link) */ + path?: string; + /** Child nodes */ + children?: TreeNodeItem[]; + /** Whether this node is expanded by default */ + defaultExpanded?: boolean; + /** Whether this node can be expanded/collapsed (default: true if has children) */ + expandable?: boolean; + /** Custom onClick handler (overrides navigation) */ + onClick?: () => void; + /** Whether this node is disabled */ + disabled?: boolean; + /** Additional CSS class */ + className?: string; + /** Indent level (auto-calculated) */ + level?: number; + /** Data attribute for testing/identification */ + dataId?: string; +} + +export interface TreeSectionItem { + /** Section type */ + type: 'section'; + /** Section title */ + title: string; + /** Child nodes in this section */ + children: TreeNodeItem[]; + /** Whether this section is initially visible */ + visible?: boolean; +} + +export interface TreeSeparatorItem { + /** Separator type */ + type: 'separator'; +} + +export type TreeItem = TreeNodeItem | TreeSectionItem | TreeSeparatorItem; + +export interface TreeNavigationProps { + /** Array of tree items to render */ + items: TreeItem[]; + /** Whether to auto-expand nodes when their path is active */ + autoExpandActive?: boolean; + /** Callback when a node is clicked */ + onNodeClick?: (node: TreeNodeItem) => void; + /** Maximum depth to render (0 = unlimited) */ + maxDepth?: number; + /** Additional CSS class for the container */ + className?: string; +} + +// ============================================================================= +// HELPER FUNCTIONS +// ============================================================================= + +/** + * Check if a node or any of its descendants has the active path + */ +function hasActivePath(node: TreeNodeItem, currentPath: string): boolean { + if (node.path && currentPath.startsWith(node.path)) { + return true; + } + if (node.children) { + return node.children.some(child => hasActivePath(child, currentPath)); + } + return false; +} + +/** + * Type guard to check if item is a TreeNodeItem + */ +function isTreeNode(item: TreeItem): item is TreeNodeItem { + return !('type' in item); +} + +/** + * Type guard to check if item is a TreeSectionItem + */ +function isTreeSection(item: TreeItem): item is TreeSectionItem { + return 'type' in item && item.type === 'section'; +} + +/** + * Type guard to check if item is a TreeSeparatorItem + */ +function isTreeSeparator(item: TreeItem): item is TreeSeparatorItem { + return 'type' in item && item.type === 'separator'; +} + +// ============================================================================= +// TREE NODE COMPONENT +// ============================================================================= + +interface TreeNodeProps { + node: TreeNodeItem; + level: number; + autoExpandActive: boolean; + currentPath: string; + onNodeClick?: (node: TreeNodeItem) => void; + maxDepth: number; +} + +const TreeNode: React.FC = ({ + node, + level, + autoExpandActive, + currentPath, + onNodeClick, + maxDepth, +}) => { + const hasChildren = node.children && node.children.length > 0; + const isExpandable = node.expandable !== false && hasChildren; + const shouldAutoExpand = autoExpandActive && hasActivePath(node, currentPath); + + const [isExpanded, setIsExpanded] = useState( + node.defaultExpanded ?? shouldAutoExpand ?? false + ); + + // Auto-expand when path becomes active + useEffect(() => { + if (autoExpandActive && hasActivePath(node, currentPath) && !isExpanded) { + setIsExpanded(true); + } + }, [currentPath, autoExpandActive, node]); + + // Check if this exact node is active + const isActive = node.path ? currentPath === node.path || currentPath.startsWith(node.path + '/') : false; + + // Handle click + const handleClick = (e: React.MouseEvent) => { + if (node.disabled) { + e.preventDefault(); + return; + } + + if (node.onClick) { + e.preventDefault(); + node.onClick(); + return; + } + + if (isExpandable && !node.path) { + // If only expandable (no path), toggle expand + setIsExpanded(!isExpanded); + } else if (isExpandable && node.path) { + // If both expandable and has path, expand on click but allow navigation + if (!isExpanded) { + setIsExpanded(true); + } + } + + if (onNodeClick) { + onNodeClick(node); + } + }; + + // Handle chevron click separately + const handleChevronClick = (e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + setIsExpanded(!isExpanded); + }; + + // Get level-specific styles + const getLevelClass = () => { + switch (level) { + case 0: return styles.levelRoot; + case 1: return styles.levelOne; + case 2: return styles.levelTwo; + case 3: return styles.levelThree; + default: return styles.levelDeep; + } + }; + + // Render the node content + const nodeContent = ( + <> + {isExpandable && ( + + {isExpanded ? : } + + )} + {!isExpandable && hasChildren === false && ( + + )} + {node.icon && {node.icon}} + {node.label} + {node.badge !== undefined && ( + + {node.badge} + + )} + + ); + + // Determine if we should render as NavLink or button + const nodeClasses = `${styles.treeNode} ${getLevelClass()} ${isActive ? styles.active : ''} ${node.disabled ? styles.disabled : ''} ${node.className || ''}`; + + const nodeElement = node.path ? ( + + {nodeContent} + + ) : ( + + ); + + // Check max depth + const canRenderChildren = maxDepth === 0 || level < maxDepth; + + return ( +
+ {nodeElement} + {isExpanded && hasChildren && canRenderChildren && ( +
+ {node.children!.map((child, index) => ( + + ))} +
+ )} +
+ ); +}; + +// ============================================================================= +// TREE SECTION COMPONENT +// ============================================================================= + +interface TreeSectionProps { + section: TreeSectionItem; + autoExpandActive: boolean; + currentPath: string; + onNodeClick?: (node: TreeNodeItem) => void; + maxDepth: number; +} + +const TreeSection: React.FC = ({ + section, + autoExpandActive, + currentPath, + onNodeClick, + maxDepth, +}) => { + if (section.visible === false) { + return null; + } + + return ( +
+
+ {section.title} +
+
+ {section.children.map((node, index) => ( + + ))} +
+
+ ); +}; + +// ============================================================================= +// MAIN COMPONENT +// ============================================================================= + +export const TreeNavigation: React.FC = ({ + items, + autoExpandActive = true, + onNodeClick, + maxDepth = 0, + className = '', +}) => { + const location = useLocation(); + const currentPath = location.pathname; + + return ( + + ); +}; + +export default TreeNavigation; diff --git a/src/components/Navigation/TreeNavigation/index.ts b/src/components/Navigation/TreeNavigation/index.ts new file mode 100644 index 0000000..a39ae4d --- /dev/null +++ b/src/components/Navigation/TreeNavigation/index.ts @@ -0,0 +1,8 @@ +/** + * TreeNavigation Component Index + * + * Export all tree navigation related types and components + */ + +export { TreeNavigation, type TreeNavigationProps, type TreeItem, type TreeNodeItem, type TreeSectionItem, type TreeSeparatorItem } from './TreeNavigation'; +export { default } from './TreeNavigation'; diff --git a/src/components/Navigation/UserSection.module.css b/src/components/Navigation/UserSection.module.css new file mode 100644 index 0000000..33da0be --- /dev/null +++ b/src/components/Navigation/UserSection.module.css @@ -0,0 +1,324 @@ +/** + * UserSection Styles + */ + +.userSection { + position: relative; + padding: 0.5rem; + border-top: 1px solid var(--border-color, #e0e0e0); +} + +.userButton { + display: flex; + align-items: center; + gap: 0.75rem; + width: 100%; + padding: 0.5rem; + border: none; + border-radius: 8px; + background: transparent; + cursor: pointer; + transition: background 0.2s; + text-align: left; +} + +.userButton:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.05)); +} + +.avatar { + flex-shrink: 0; + width: 36px; + height: 36px; + border-radius: 50%; + background: var(--primary-color, #2563eb); + color: white; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.75rem; + font-weight: 600; +} + +.userInfo { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; +} + +.userName { + font-size: 0.875rem; + font-weight: 500; + color: var(--text-primary, #1a1a1a); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.userEmail { + font-size: 0.75rem; + color: var(--text-secondary, #666); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.chevron { + flex-shrink: 0; + font-size: 0.625rem; + color: var(--text-tertiary, #888); +} + +/* Menu */ +.menu { + position: absolute; + bottom: 100%; + left: 0.5rem; + right: 0.5rem; + margin-bottom: 0.25rem; + padding: 0.25rem; + background: var(--bg-primary, #ffffff); + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + z-index: 100; +} + +.menuItem { + display: flex; + align-items: center; + gap: 0.5rem; + width: 100%; + padding: 0.5rem 0.75rem; + border: none; + border-radius: 6px; + background: transparent; + font-size: 0.875rem; + color: var(--text-primary, #1a1a1a); + cursor: pointer; + transition: background 0.2s; + text-align: left; +} + +.menuItem:hover { + background: var(--hover-bg, rgba(0, 0, 0, 0.05)); +} + +.menuItem:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.menuIcon { + font-size: 1rem; +} + +.menuDivider { + height: 1px; + margin: 0.25rem 0; + background: var(--border-color, #e0e0e0); +} + +/* Dark Theme */ +:global(.dark-theme) .userSection { + border-top-color: var(--border-dark, #333); +} + +:global(.dark-theme) .userButton:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.05)); +} + +:global(.dark-theme) .userName { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .userEmail { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .chevron { + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .menu { + background: var(--surface-dark, #1a1a1a); + border-color: var(--border-dark, #444); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); +} + +:global(.dark-theme) .menuItem { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .menuItem:hover { + background: var(--hover-bg-dark, rgba(255, 255, 255, 0.1)); +} + +:global(.dark-theme) .menuDivider { + background: var(--border-dark, #444); +} + +/* Modal Overlay */ +.modalOverlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + padding: 1rem; +} + +.modal { + background: var(--bg-primary, #ffffff); + border-radius: 12px; + max-width: 700px; + width: 100%; + max-height: 80vh; + overflow: hidden; + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2); +} + +.modalHeader { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem 1.5rem; + border-bottom: 1px solid var(--border-color, #e0e0e0); +} + +.modalHeader h2 { + margin: 0; + font-size: 1.25rem; + font-weight: 600; + color: var(--text-primary, #1a1a1a); +} + +.modalClose { + background: transparent; + border: none; + font-size: 1.25rem; + cursor: pointer; + color: var(--text-tertiary, #888); + padding: 0.25rem; + line-height: 1; +} + +.modalClose:hover { + color: var(--text-primary, #1a1a1a); +} + +.modalContent { + padding: 1.5rem; + overflow-y: auto; + max-height: calc(80vh - 60px); +} + +.legalSection { + margin-bottom: 1.5rem; +} + +.legalSection h3 { + color: var(--text-primary, #1a1a1a); + font-size: 1.125rem; + font-weight: 600; + margin: 0 0 1rem 0; + padding-bottom: 0.5rem; + border-bottom: 2px solid var(--primary-color, #F25843); +} + +.legalSection h4 { + color: var(--text-primary, #1a1a1a); + font-size: 0.9375rem; + font-weight: 600; + margin: 1rem 0 0.5rem 0; +} + +.legalSection p { + color: var(--text-secondary, #666); + font-size: 0.875rem; + line-height: 1.6; + margin: 0 0 0.75rem 0; +} + +.legalSection ul { + margin: 0 0 0.75rem 1.5rem; + padding: 0; +} + +.legalSection li { + color: var(--text-secondary, #666); + font-size: 0.875rem; + line-height: 1.6; + margin-bottom: 0.5rem; +} + +.legalLinks { + display: flex; + flex-wrap: wrap; + gap: 1rem; + padding-top: 1rem; + border-top: 1px solid var(--border-color, #e0e0e0); +} + +.legalLinks a { + color: var(--primary-color, #F25843); + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; + padding: 0.5rem 1rem; + border-radius: 6px; + background: var(--primary-dark-bg, rgba(242, 88, 67, 0.1)); + transition: background 0.2s; +} + +.legalLinks a:hover { + background: var(--primary-light, rgba(242, 88, 67, 0.2)); +} + +/* Dark Theme Modal */ +:global(.dark-theme) .modal { + background: var(--surface-dark, #1a1a1a); +} + +:global(.dark-theme) .modalHeader { + border-bottom-color: var(--border-dark, #333); +} + +:global(.dark-theme) .modalHeader h2 { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .modalClose { + color: var(--text-tertiary-dark, #888); +} + +:global(.dark-theme) .modalClose:hover { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .legalSection h3 { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .legalSection h4 { + color: var(--text-primary-dark, #ffffff); +} + +:global(.dark-theme) .legalSection p, +:global(.dark-theme) .legalSection li { + color: var(--text-secondary-dark, #aaa); +} + +:global(.dark-theme) .legalLinks { + border-top-color: var(--border-dark, #333); +} + +:global(.dark-theme) .legalLinks a { + color: var(--primary-light, #FF9A8A); +} diff --git a/src/components/Navigation/UserSection.tsx b/src/components/Navigation/UserSection.tsx new file mode 100644 index 0000000..3fd0c7c --- /dev/null +++ b/src/components/Navigation/UserSection.tsx @@ -0,0 +1,155 @@ +/** + * UserSection Component + * + * Zeigt Benutzerinformationen und Logout-Button in der Sidebar. + */ + +import React, { useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useCurrentUser } from '../../hooks/useUsers'; +import { useMsal } from '@azure/msal-react'; +import styles from './UserSection.module.css'; + +export const UserSection: React.FC = () => { + const { user, logout } = useCurrentUser(); + const { instance: msalInstance } = useMsal(); + const navigate = useNavigate(); + const [isLoggingOut, setIsLoggingOut] = useState(false); + const [showMenu, setShowMenu] = useState(false); + const [showLegalModal, setShowLegalModal] = useState(false); + + const handleLogout = async () => { + setIsLoggingOut(true); + try { + await logout(msalInstance); + } catch (error) { + console.error('Logout failed:', error); + setIsLoggingOut(false); + } + }; + + const handleSettings = () => { + navigate('/settings'); + setShowMenu(false); + }; + + const handleLegal = () => { + setShowLegalModal(true); + setShowMenu(false); + }; + + if (!user) { + return null; + } + + // Initialen für Avatar + const initials = user.fullName + ? user.fullName.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2) + : user.username.slice(0, 2).toUpperCase(); + + return ( +
+ + + {showMenu && ( +
+ + + + +
+ + +
+ )} + + {/* Legal Modal */} + {showLegalModal && ( +
setShowLegalModal(false)}> +
e.stopPropagation()}> +
+

Rechtliche Hinweise

+ +
+
+
+

Datenverarbeitung und KI-Nutzung

+ +

1. Einwilligung zur Datenverarbeitung

+

Mit der Nutzung dieser Anwendung stimmen Sie zu und erklären sich mit den folgenden Bedingungen zur Verarbeitung Ihrer Daten durch künstliche Intelligenz einverstanden:

+
    +
  • Sie autorisieren die Erfassung, Verarbeitung, Übertragung und Speicherung aller Daten, die Sie bei der Nutzung unserer Dienste bereitstellen.
  • +
  • Nutzerdaten können an Drittanbieter von künstlicher Intelligenz übertragen werden (z.B. OpenAI).
  • +
  • Diese Einwilligung erstreckt sich auf alle Inhalte, einschließlich Text, Bilder, Dokumente und Gesprächsverläufe.
  • +
+ +

2. Anerkennung der KI-Verarbeitungsrisiken

+
    +
  • KI-Systeme können unerwartete oder ungenaue Ausgaben erzeugen.
  • +
  • KI-Dienste können Daten gemäß ihren eigenen Nutzungsbedingungen speichern oder daraus lernen.
  • +
  • Trotz Sicherheitsmaßnahmen können Daten anfällig für unbefugten Zugriff sein.
  • +
+ +

3. Haftungsausschluss

+

Im größtmöglichen Umfang verzichten Sie auf Ansprüche, die sich aus der KI-Verarbeitung ergeben, einschließlich Datenverletzungen und unbeabsichtigter Offenlegung.

+
+ + +
+
+
+ )} +
+ ); +}; + +export default UserSection; diff --git a/src/components/Sidebar/SidebarUser.tsx b/src/components/Sidebar/SidebarUser.tsx index 68aa4dd..cc4ae9d 100644 --- a/src/components/Sidebar/SidebarUser.tsx +++ b/src/components/Sidebar/SidebarUser.tsx @@ -70,7 +70,7 @@ const SidebarUser: React.FC = ({ isMinimized = false }) => { enabled: cached.enabled ?? true, // Assume enabled if logged in roleLabels: cached.roleLabels || [], authenticationAuthority: cached.authenticationAuthority || 'local', - mandateId: cached.mandateId || '' + isSysAdmin: cached.isSysAdmin || false }; setUser(userData); setUserError(null); @@ -99,7 +99,7 @@ const SidebarUser: React.FC = ({ isMinimized = false }) => { enabled: cached.enabled ?? true, roleLabels: cached.roleLabels || [], authenticationAuthority: cached.authenticationAuthority || 'local', - mandateId: cached.mandateId || '' + isSysAdmin: cached.isSysAdmin || false }; setUser(userData); setUserError(null); diff --git a/src/hooks/useCurrentInstance.ts b/src/hooks/useCurrentInstance.ts index 1efd0d6..d752521 100644 --- a/src/hooks/useCurrentInstance.ts +++ b/src/hooks/useCurrentInstance.ts @@ -15,12 +15,8 @@ import type { FeatureInstance, Mandate, MandateFeature } from '../types/mandate' // URL PARAMETER TYPES // ============================================================================= -export interface FeatureRouteParams { - mandateId?: string; - featureCode?: string; - instanceId?: string; - '*'?: string; // Wildcard für Sub-Pfade -} +// Route-Parameter werden als Record erwartet +// Wir verwenden daher einen einfachen Typ-Alias // ============================================================================= // RETURN TYPES @@ -63,7 +59,7 @@ export interface CurrentInstanceContext { * ``` */ export function useCurrentInstance(): CurrentInstanceContext { - const params = useParams(); + const params = useParams(); const { getMandateById, getFeatureByCode, getInstanceById, loading } = useFeatureStore(); const mandateId = params.mandateId; @@ -108,7 +104,7 @@ export function useInstance(): FeatureInstance | undefined { * Hook für die Instanz-ID aus der URL */ export function useInstanceId(): string | undefined { - const params = useParams(); + const params = useParams(); return params.instanceId; } @@ -116,7 +112,7 @@ export function useInstanceId(): string | undefined { * Hook für den Feature-Code aus der URL */ export function useFeatureCode(): string | undefined { - const params = useParams(); + const params = useParams(); return params.featureCode; } @@ -124,7 +120,7 @@ export function useFeatureCode(): string | undefined { * Hook für die Mandate-ID aus der URL */ export function useMandateId(): string | undefined { - const params = useParams(); + const params = useParams(); return params.mandateId; } diff --git a/src/hooks/useInstancePermissions.ts b/src/hooks/useInstancePermissions.tsx similarity index 98% rename from src/hooks/useInstancePermissions.ts rename to src/hooks/useInstancePermissions.tsx index f16a219..c048d73 100644 --- a/src/hooks/useInstancePermissions.ts +++ b/src/hooks/useInstancePermissions.tsx @@ -5,7 +5,7 @@ * Die Berechtigungen werden summarisch pro Instanz geladen (kein einzelner API-Call pro Check). */ -import { useCallback, useMemo } from 'react'; +import { useMemo } from 'react'; import { useCurrentInstance } from './useCurrentInstance'; import type { TablePermission, @@ -27,10 +27,6 @@ const NO_ACCESS_TABLE: TablePermission = { delete: 'n', }; -const NO_ACCESS_FIELD: FieldPermission = { - read: false, - write: false, -}; // ============================================================================= // TABLE PERMISSION HOOKS diff --git a/src/hooks/useMandates.ts b/src/hooks/useMandates.ts new file mode 100644 index 0000000..e3848fe --- /dev/null +++ b/src/hooks/useMandates.ts @@ -0,0 +1,235 @@ +/** + * useMandates Hook + * + * Hook für die Verwaltung von Mandanten (Mandates) im Admin-Bereich. + * Folgt dem gleichen Pattern wie useOrgUsers. + */ + +import { useState, useEffect, useCallback } from 'react'; +import { useApiRequest } from './useApi'; +import api from '../api'; +import { usePermissions, type UserPermissions } from './usePermissions'; +import { + fetchMandates as fetchMandatesApi, + fetchMandateById as fetchMandateByIdApi, + createMandate as createMandateApi, + updateMandate as updateMandateApi, + deleteMandate as deleteMandateApi, + type Mandate, + type MandateUpdateData, + type PaginationParams +} from '../api/mandateApi'; + +// Re-export types +export type { Mandate, MandateUpdateData, PaginationParams }; + +export interface AttributeDefinition { + name: string; + type: string; + label: string; + description?: string; + required?: boolean; + default?: any; + options?: Array<{ value: string | number; label: string | { [key: string]: string } }> | string; + sortable?: boolean; + filterable?: boolean; + searchable?: boolean; + width?: number; + minWidth?: number; + maxWidth?: number; + readonly?: boolean; + editable?: boolean; +} + +/** + * Hook for managing mandates in admin panel + */ +export function useAdminMandates() { + const [mandates, setMandates] = useState([]); + const [attributes, setAttributes] = useState([]); + const [permissions, setPermissions] = useState(null); + const [pagination, setPagination] = useState<{ + currentPage: number; + pageSize: number; + totalItems: number; + totalPages: number; + } | null>(null); + const { request, isLoading: loading, error } = useApiRequest(); + const { checkPermission } = usePermissions(); + + // Fetch attributes from backend + const fetchAttributes = useCallback(async () => { + try { + const response = await api.get('/api/attributes/Mandate'); + + let attrs: AttributeDefinition[] = []; + if (response.data?.attributes && Array.isArray(response.data.attributes)) { + attrs = response.data.attributes; + } else if (Array.isArray(response.data)) { + attrs = response.data; + } else if (response.data && typeof response.data === 'object') { + const keys = Object.keys(response.data); + for (const key of keys) { + if (Array.isArray(response.data[key])) { + attrs = response.data[key]; + break; + } + } + } + + setAttributes(attrs); + return attrs; + } catch (error: any) { + if (error.response?.status === 429) { + console.warn('Rate limit exceeded while fetching mandate attributes.'); + } else if (error.response?.status !== 401) { + console.error('Error fetching mandate attributes:', error); + } + setAttributes([]); + return []; + } + }, []); + + // Fetch permissions + const fetchPermissions = useCallback(async () => { + try { + const perms = await checkPermission('DATA', 'Mandate'); + setPermissions(perms); + return perms; + } catch (error: any) { + console.error('Error fetching mandate permissions:', error); + const defaultPerms: UserPermissions = { + view: false, + read: 'n', + create: 'n', + update: 'n', + delete: 'n', + }; + setPermissions(defaultPerms); + return defaultPerms; + } + }, [checkPermission]); + + // Fetch mandates + const fetchMandates = useCallback(async (params?: PaginationParams) => { + try { + const data = await fetchMandatesApi(request, params); + + if (data && typeof data === 'object' && 'items' in data) { + const items = Array.isArray(data.items) ? data.items : []; + setMandates(items); + if (data.pagination) { + setPagination(data.pagination); + } + } else { + const items = Array.isArray(data) ? data : []; + setMandates(items); + setPagination(null); + } + } catch (error: any) { + setMandates([]); + setPagination(null); + } + }, [request]); + + // Optimistic updates + const removeOptimistically = (mandateId: string) => { + setMandates(prev => prev.filter(m => m.id !== mandateId)); + }; + + const updateOptimistically = (mandateId: string, updateData: Partial) => { + setMandates(prev => + prev.map(m => m.id === mandateId ? { ...m, ...updateData } : m) + ); + }; + + // Fetch single mandate + const fetchMandateById = useCallback(async (mandateId: string): Promise => { + return await fetchMandateByIdApi(request, mandateId); + }, [request]); + + // Generate columns from attributes + const columns = attributes.map(attr => ({ + key: attr.name, + label: attr.label || attr.name, + type: attr.type as any, + sortable: attr.sortable !== false, + filterable: attr.filterable !== false, + searchable: attr.searchable !== false, + width: attr.width || 150, + minWidth: attr.minWidth || 100, + maxWidth: attr.maxWidth || 400, + })); + + // Create mandate + const handleCreate = useCallback(async (mandateData: Partial): Promise => { + try { + await createMandateApi(request, mandateData); + await fetchMandates(); + return true; + } catch (error: any) { + console.error('Error creating mandate:', error); + return false; + } + }, [request, fetchMandates]); + + // Update mandate + const handleUpdate = useCallback(async (mandateId: string, updateData: MandateUpdateData): Promise => { + try { + updateOptimistically(mandateId, updateData); + await updateMandateApi(request, mandateId, updateData); + return true; + } catch (error: any) { + console.error('Error updating mandate:', error); + await fetchMandates(); + return false; + } + }, [request, fetchMandates]); + + // Delete mandate + const handleDelete = useCallback(async (mandateId: string): Promise => { + try { + removeOptimistically(mandateId); + await deleteMandateApi(request, mandateId); + return true; + } catch (error: any) { + console.error('Error deleting mandate:', error); + await fetchMandates(); + return false; + } + }, [request, fetchMandates]); + + // Inline update + const handleInlineUpdate = useCallback(async ( + mandateId: string, + updateData: Partial + ): Promise => { + await handleUpdate(mandateId, updateData); + }, [handleUpdate]); + + // Load data on mount + useEffect(() => { + fetchAttributes(); + fetchPermissions(); + fetchMandates(); + }, []); + + return { + mandates, + attributes, + columns, + permissions, + pagination, + loading, + error, + refetch: fetchMandates, + fetchMandateById, + handleCreate, + handleUpdate, + handleDelete, + handleInlineUpdate, + updateOptimistically, + }; +} + +export default useAdminMandates; diff --git a/src/hooks/usePrompts.ts b/src/hooks/usePrompts.ts index dbd8bb7..6d0cabb 100644 --- a/src/hooks/usePrompts.ts +++ b/src/hooks/usePrompts.ts @@ -1,6 +1,5 @@ import { useState, useEffect, useCallback } from 'react'; import { useApiRequest } from './useApi'; -import { getUserDataCache } from '../utils/userCache'; import api from '../api'; import { usePermissions, type UserPermissions } from './usePermissions'; import { @@ -507,13 +506,9 @@ export function usePromptOperations() { setCreatingPrompt(true); try { - // Get mandateId from currentUser in sessionStorage cache - const currentUserData = getUserDataCache(); - const mandateId = currentUserData?.mandateId || ''; - - // Structure the request body as required by the API + // mandateId wird nicht mehr vom Client gesendet + // Das Backend bestimmt den Kontext über die instanceId im Request const requestBody = { - mandateId: mandateId, name: promptData.name, content: promptData.content }; @@ -533,13 +528,8 @@ export function usePromptOperations() { setUpdateError(null); try { - // Get mandateId from currentUser in sessionStorage cache - const currentUserData = getUserDataCache(); - const mandateId = currentUserData?.mandateId || ''; - - // Structure the request body as required by the API + // mandateId wird nicht mehr vom Client gesendet const requestBody = { - mandateId: mandateId, name: updateData.name, content: updateData.content }; diff --git a/src/hooks/useRoles.ts b/src/hooks/useRoles.ts new file mode 100644 index 0000000..014778e --- /dev/null +++ b/src/hooks/useRoles.ts @@ -0,0 +1,235 @@ +/** + * useRoles Hook + * + * Hook für die Verwaltung von globalen RBAC-Rollen im Admin-Bereich. + * Folgt dem gleichen Pattern wie useOrgUsers. + */ + +import { useState, useEffect, useCallback } from 'react'; +import { useApiRequest } from './useApi'; +import api from '../api'; +import { usePermissions, type UserPermissions } from './usePermissions'; +import { + fetchRoles as fetchRolesApi, + fetchRoleById as fetchRoleByIdApi, + createRole as createRoleApi, + updateRole as updateRoleApi, + deleteRole as deleteRoleApi, + type Role, + type RoleUpdateData, + type PaginationParams +} from '../api/roleApi'; + +// Re-export types +export type { Role, RoleUpdateData, PaginationParams }; + +export interface AttributeDefinition { + name: string; + type: string; + label: string; + description?: string; + required?: boolean; + default?: any; + options?: Array<{ value: string | number; label: string | { [key: string]: string } }> | string; + sortable?: boolean; + filterable?: boolean; + searchable?: boolean; + width?: number; + minWidth?: number; + maxWidth?: number; + readonly?: boolean; + editable?: boolean; +} + +/** + * Hook for managing RBAC roles in admin panel + */ +export function useAdminRoles() { + const [roles, setRoles] = useState([]); + const [attributes, setAttributes] = useState([]); + const [permissions, setPermissions] = useState(null); + const [pagination, setPagination] = useState<{ + currentPage: number; + pageSize: number; + totalItems: number; + totalPages: number; + } | null>(null); + const { request, isLoading: loading, error } = useApiRequest(); + const { checkPermission } = usePermissions(); + + // Fetch attributes from backend + const fetchAttributes = useCallback(async () => { + try { + const response = await api.get('/api/attributes/Role'); + + let attrs: AttributeDefinition[] = []; + if (response.data?.attributes && Array.isArray(response.data.attributes)) { + attrs = response.data.attributes; + } else if (Array.isArray(response.data)) { + attrs = response.data; + } else if (response.data && typeof response.data === 'object') { + const keys = Object.keys(response.data); + for (const key of keys) { + if (Array.isArray(response.data[key])) { + attrs = response.data[key]; + break; + } + } + } + + setAttributes(attrs); + return attrs; + } catch (error: any) { + if (error.response?.status === 429) { + console.warn('Rate limit exceeded while fetching role attributes.'); + } else if (error.response?.status !== 401) { + console.error('Error fetching role attributes:', error); + } + setAttributes([]); + return []; + } + }, []); + + // Fetch permissions + const fetchPermissions = useCallback(async () => { + try { + const perms = await checkPermission('DATA', 'Role'); + setPermissions(perms); + return perms; + } catch (error: any) { + console.error('Error fetching role permissions:', error); + const defaultPerms: UserPermissions = { + view: false, + read: 'n', + create: 'n', + update: 'n', + delete: 'n', + }; + setPermissions(defaultPerms); + return defaultPerms; + } + }, [checkPermission]); + + // Fetch roles + const fetchRoles = useCallback(async (params?: PaginationParams) => { + try { + const data = await fetchRolesApi(request, params); + + if (data && typeof data === 'object' && 'items' in data) { + const items = Array.isArray(data.items) ? data.items : []; + setRoles(items); + if (data.pagination) { + setPagination(data.pagination); + } + } else { + const items = Array.isArray(data) ? data : []; + setRoles(items); + setPagination(null); + } + } catch (error: any) { + setRoles([]); + setPagination(null); + } + }, [request]); + + // Optimistic updates + const removeOptimistically = (roleId: string) => { + setRoles(prev => prev.filter(r => r.id !== roleId)); + }; + + const updateOptimistically = (roleId: string, updateData: Partial) => { + setRoles(prev => + prev.map(r => r.id === roleId ? { ...r, ...updateData } : r) + ); + }; + + // Fetch single role + const fetchRoleById = useCallback(async (roleId: string): Promise => { + return await fetchRoleByIdApi(request, roleId); + }, [request]); + + // Generate columns from attributes + const columns = attributes.map(attr => ({ + key: attr.name, + label: attr.label || attr.name, + type: attr.type as any, + sortable: attr.sortable !== false, + filterable: attr.filterable !== false, + searchable: attr.searchable !== false, + width: attr.width || 150, + minWidth: attr.minWidth || 100, + maxWidth: attr.maxWidth || 400, + })); + + // Create role + const handleCreate = useCallback(async (roleData: Partial): Promise => { + try { + await createRoleApi(request, roleData); + await fetchRoles(); + return true; + } catch (error: any) { + console.error('Error creating role:', error); + return false; + } + }, [request, fetchRoles]); + + // Update role + const handleUpdate = useCallback(async (roleId: string, updateData: RoleUpdateData): Promise => { + try { + updateOptimistically(roleId, updateData); + await updateRoleApi(request, roleId, updateData); + return true; + } catch (error: any) { + console.error('Error updating role:', error); + await fetchRoles(); + return false; + } + }, [request, fetchRoles]); + + // Delete role + const handleDelete = useCallback(async (roleId: string): Promise => { + try { + removeOptimistically(roleId); + await deleteRoleApi(request, roleId); + return true; + } catch (error: any) { + console.error('Error deleting role:', error); + await fetchRoles(); + return false; + } + }, [request, fetchRoles]); + + // Inline update + const handleInlineUpdate = useCallback(async ( + roleId: string, + updateData: Partial + ): Promise => { + await handleUpdate(roleId, updateData); + }, [handleUpdate]); + + // Load data on mount + useEffect(() => { + fetchAttributes(); + fetchPermissions(); + fetchRoles(); + }, []); + + return { + roles, + attributes, + columns, + permissions, + pagination, + loading, + error, + refetch: fetchRoles, + fetchRoleById, + handleCreate, + handleUpdate, + handleDelete, + handleInlineUpdate, + updateOptimistically, + }; +} + +export default useAdminRoles; diff --git a/src/hooks/useTrustee.ts b/src/hooks/useTrustee.ts index 490d69b..55f1aea 100644 --- a/src/hooks/useTrustee.ts +++ b/src/hooks/useTrustee.ts @@ -1,7 +1,15 @@ +/** + * Trustee Hooks + * + * Hooks für das Trustee-Feature mit Instanz-Kontext. + * Die instanceId wird automatisch aus der URL gelesen. + */ + import { useState, useEffect, useCallback } from 'react'; import { useApiRequest } from './useApi'; import api from '../api'; import { usePermissions, type UserPermissions } from './usePermissions'; +import { useInstanceId } from './useCurrentInstance'; import { // Types type TrusteeOrganisation, @@ -94,15 +102,18 @@ export interface AttributeDefinition { interface TrusteeEntityConfig { entityName: string; - fetchAll: (request: any, params?: PaginationParams) => Promise; - fetchById: (request: any, id: string) => Promise; - create: (request: any, data: Partial) => Promise; - update: (request: any, id: string, data: Partial) => Promise; - deleteItem: (request: any, id: string) => Promise; + fetchAll: (request: any, instanceId: string, params?: PaginationParams) => Promise; + fetchById: (request: any, instanceId: string, id: string) => Promise; + create: (request: any, instanceId: string, data: Partial) => Promise; + update: (request: any, instanceId: string, id: string, data: Partial) => Promise; + deleteItem: (request: any, instanceId: string, id: string) => Promise; } function _createTrusteeEntityHook(config: TrusteeEntityConfig) { return function useTrusteeEntity() { + // Hole instanceId aus URL-Kontext + const instanceId = useInstanceId(); + const [items, setItems] = useState([]); const [attributes, setAttributes] = useState([]); const [permissions, setPermissions] = useState(null); @@ -116,8 +127,10 @@ function _createTrusteeEntityHook(config: TrusteeEntit const { checkPermission } = usePermissions(); const fetchAttributes = useCallback(async () => { + if (!instanceId) return []; + try { - const response = await api.get(`/api/attributes/${config.entityName}`); + const response = await api.get(`/api/trustee/${instanceId}/attributes/${config.entityName}`); let attrs: AttributeDefinition[] = []; if (response.data?.attributes && Array.isArray(response.data.attributes)) { attrs = response.data.attributes; @@ -131,7 +144,7 @@ function _createTrusteeEntityHook(config: TrusteeEntit setAttributes([]); return []; } - }, []); + }, [instanceId]); const fetchPermissions = useCallback(async () => { try { @@ -153,8 +166,13 @@ function _createTrusteeEntityHook(config: TrusteeEntit }, [checkPermission]); const fetchItems = useCallback(async (params?: PaginationParams) => { + if (!instanceId) { + setItems([]); + return; + } + try { - const data = await config.fetchAll(request, params); + const data = await config.fetchAll(request, instanceId, params); if (data && typeof data === 'object' && 'items' in data) { const fetchedItems = Array.isArray(data.items) ? data.items : []; @@ -171,7 +189,7 @@ function _createTrusteeEntityHook(config: TrusteeEntit setItems([]); setPagination(null); } - }, [request]); + }, [request, instanceId]); const removeOptimistically = (itemId: string) => { setItems(prev => prev.filter(item => item.id !== itemId)); @@ -188,8 +206,9 @@ function _createTrusteeEntityHook(config: TrusteeEntit }; const fetchById = useCallback(async (itemId: string): Promise => { - return await config.fetchById(request, itemId); - }, [request]); + if (!instanceId) return null; + return await config.fetchById(request, instanceId, itemId); + }, [request, instanceId]); const generateEditFieldsFromAttributes = useCallback(() => { if (!attributes || attributes.length === 0) { @@ -198,11 +217,9 @@ function _createTrusteeEntityHook(config: TrusteeEntit return attributes .filter(attr => { - // For EDIT mode: filter out readonly fields and system fields if (attr.readonly === true || attr.editable === false) { return false; } - // Also filter out 'id' for edit mode (id cannot be changed) if (attr.name === 'id') { return false; } @@ -265,7 +282,6 @@ function _createTrusteeEntityHook(config: TrusteeEntit }); }, [attributes]); - // Generate fields for CREATE forms - includes all required fields like 'id' const generateCreateFieldsFromAttributes = useCallback(() => { if (!attributes || attributes.length === 0) { return []; @@ -273,8 +289,6 @@ function _createTrusteeEntityHook(config: TrusteeEntit return attributes .filter(attr => { - // For CREATE mode: include all user-editable fields including 'id' - // Only filter out system-generated fields const systemFields = ['_createdBy', '_createdAt', '_modifiedBy', '_modifiedAt', 'mandateId']; return !systemFields.includes(attr.name); }) @@ -325,7 +339,7 @@ function _createTrusteeEntityHook(config: TrusteeEntit key: attr.name, label: attr.label || attr.name, type: fieldType, - editable: true, // All fields are editable in create mode + editable: true, required: attr.required === true, options, optionsReference, @@ -341,14 +355,14 @@ function _createTrusteeEntityHook(config: TrusteeEntit return await fetchAttributes(); }, [attributes, fetchAttributes]); + // Lade Daten wenn instanceId verfügbar useEffect(() => { - fetchAttributes(); - fetchPermissions(); - }, [fetchAttributes, fetchPermissions]); - - useEffect(() => { - fetchItems(); - }, [fetchItems]); + if (instanceId) { + fetchAttributes(); + fetchPermissions(); + fetchItems(); + } + }, [instanceId, fetchAttributes, fetchPermissions, fetchItems]); return { items, @@ -363,13 +377,17 @@ function _createTrusteeEntityHook(config: TrusteeEntit fetchById, generateEditFieldsFromAttributes, generateCreateFieldsFromAttributes, - ensureAttributesLoaded + ensureAttributesLoaded, + instanceId // Auch instanceId zurückgeben für Operations-Hook }; }; } function _createTrusteeOperationsHook(config: TrusteeEntityConfig) { return function useTrusteeEntityOperations() { + // Hole instanceId aus URL-Kontext + const instanceId = useInstanceId(); + const [deletingItems, setDeletingItems] = useState>(new Set()); const [creatingItem, setCreatingItem] = useState(false); const { request, isLoading } = useApiRequest(); @@ -377,12 +395,17 @@ function _createTrusteeOperationsHook(config: TrusteeE const [createError, setCreateError] = useState(null); const [updateError, setUpdateError] = useState(null); - const handleDelete = async (itemId: string) => { + const handleDelete = useCallback(async (itemId: string) => { + if (!instanceId) { + setDeleteError('No instance context'); + return false; + } + setDeleteError(null); setDeletingItems(prev => new Set(prev).add(itemId)); try { - await config.deleteItem(request, itemId); + await config.deleteItem(request, instanceId, itemId); await new Promise(resolve => setTimeout(resolve, 300)); return true; } catch (error: any) { @@ -395,20 +418,23 @@ function _createTrusteeOperationsHook(config: TrusteeE return newSet; }); } - }; + }, [request, instanceId]); - const handleCreate = async (itemData: Partial) => { + const handleCreate = useCallback(async (itemData: Partial) => { + if (!instanceId) { + setCreateError('No instance context'); + return { success: false, error: 'No instance context' }; + } + setCreateError(null); setCreatingItem(true); - // Debug: Log what data is being sent to the backend console.warn('🔧 handleCreate called with itemData:', itemData); try { - const newItem = await config.create(request, itemData); + const newItem = await config.create(request, instanceId, itemData); return { success: true, data: newItem }; } catch (error: any) { - // Debug: Log full error details console.error('🔧 handleCreate error:', { message: error.message, response: error.response?.data, @@ -420,13 +446,18 @@ function _createTrusteeOperationsHook(config: TrusteeE } finally { setCreatingItem(false); } - }; + }, [request, instanceId]); - const handleUpdate = async (itemId: string, updateData: Partial) => { + const handleUpdate = useCallback(async (itemId: string, updateData: Partial) => { + if (!instanceId) { + setUpdateError('No instance context'); + return { success: false, error: 'No instance context' }; + } + setUpdateError(null); try { - const updatedItem = await config.update(request, itemId, updateData); + const updatedItem = await config.update(request, instanceId, itemId, updateData); return { success: true, data: updatedItem }; } catch (error: any) { const errorMessage = error.response?.data?.message || error.message || 'Failed to update'; @@ -439,7 +470,7 @@ function _createTrusteeOperationsHook(config: TrusteeE isValidationError: error.response?.status === 400 }; } - }; + }, [request, instanceId]); return { deletingItems, @@ -450,7 +481,8 @@ function _createTrusteeOperationsHook(config: TrusteeE handleDelete, handleCreate, handleUpdate, - isLoading + isLoading, + instanceId }; }; } @@ -558,7 +590,7 @@ export const useTrusteePositionOperations = _createTrusteeOperationsHook(positio const positionDocumentConfig: TrusteeEntityConfig = { entityName: 'TrusteePositionDocument', fetchAll: fetchPositionDocumentsApi, - fetchById: async () => null, // Not typically needed + fetchById: async () => null, create: createPositionDocumentApi, update: async () => { throw new Error('Update not supported for position-document links'); }, deleteItem: deletePositionDocumentApi diff --git a/src/hooks/useUsers.ts b/src/hooks/useUsers.ts index 263bba7..91823dc 100644 --- a/src/hooks/useUsers.ts +++ b/src/hooks/useUsers.ts @@ -31,25 +31,14 @@ export function useCurrentUser() { // Check if we already have user data in sessionStorage cache const cachedUser = getUserDataCache(); if (cachedUser && cachedUser.username) { - // Check if cached user has roleLabels - if empty, refetch from API - const hasRoleLabels = Array.isArray(cachedUser.roleLabels) && cachedUser.roleLabels.length > 0; - - if (!hasRoleLabels) { - console.warn('⚠️ Cached user data has no roleLabels, refetching from API:', { - username: cachedUser.username, - roleLabels: cachedUser.roleLabels - }); - // Clear cache and continue to fetch from API - clearUserDataCache(); - } else { - // Use cached user data - permissions are checked via RBAC API, not client-side - setUser(cachedUser); - console.log('✅ Using cached user data from sessionStorage (persists during session):', { - username: cachedUser.username, - roleLabels: cachedUser.roleLabels - }); - return; - } + // Use cached user data - permissions are checked via RBAC API, not client-side + // Note: roleLabels is deprecated in Multi-Tenant architecture - use isSysAdmin flag instead + setUser(cachedUser); + console.log('✅ Using cached user data from sessionStorage (persists during session):', { + username: cachedUser.username, + isSysAdmin: cachedUser.isSysAdmin + }); + return; } // JWT tokens are now stored in httpOnly cookies, so we fetch user data from API @@ -79,49 +68,28 @@ export function useCurrentUser() { const data = await fetchCurrentUserApi(request, authAuthority || undefined); - // Log full response for debugging + // Log response for debugging console.log('📦 User data received from API:', { username: data?.username, - roleLabels: data?.roleLabels, - hasRoleLabels: !!data?.roleLabels, - roleLabelsLength: Array.isArray(data?.roleLabels) ? data.roleLabels.length : 0, - roleLabelsContent: Array.isArray(data?.roleLabels) ? data.roleLabels : 'not an array', - allKeys: data ? Object.keys(data) : [], - fullData: JSON.stringify(data, null, 2) + isSysAdmin: data?.isSysAdmin, + allKeys: data ? Object.keys(data) : [] }); - // Always cache user data - permissions are checked via RBAC API, not client-side - // roleLabels are optional metadata for display/logging purposes + // Validate user data if (!data || !data.username) { console.error('❌ User data from API is invalid:', { username: data?.username, - dataKeys: data ? Object.keys(data) : [], - fullResponse: data + dataKeys: data ? Object.keys(data) : [] }); throw new Error('Invalid user data received from API'); } - // Check if API returned roleLabels - if not, log warning but still cache - const hasRoleLabels = Array.isArray(data.roleLabels) && data.roleLabels.length > 0; - - if (!hasRoleLabels) { - console.warn('⚠️ User data from API has no roleLabels - this may cause RBAC issues:', { - username: data.username, - roleLabels: data.roleLabels, - allKeys: Object.keys(data), - fullResponse: JSON.stringify(data, null, 2) - }); - // Still cache it, but log the issue - backend RBAC should handle permissions - // However, if backend expects roleLabels, this will cause problems - } - // Cache user data (permissions are checked via RBAC API) + // Note: roleLabels is deprecated - use isSysAdmin flag for admin checks setUserDataCache(data); - console.log('✅ User data fetched from API and cached in sessionStorage (secure):', { + console.log('✅ User data fetched from API and cached:', { username: data.username, - roleLabels: data.roleLabels, - roleLabelsLength: Array.isArray(data.roleLabels) ? data.roleLabels.length : 0, - hasRoleLabels + isSysAdmin: data.isSysAdmin }); setUser(data); } catch (error: any) { @@ -292,25 +260,12 @@ export function useCurrentUser() { // Try to load user from sessionStorage cache first for faster initial load const cachedUser = getUserDataCache(); if (cachedUser && cachedUser.username) { - // Check if cached user has roleLabels - if empty, refetch from API - const hasRoleLabels = Array.isArray(cachedUser.roleLabels) && cachedUser.roleLabels.length > 0; - - if (!hasRoleLabels) { - console.warn('⚠️ Cached user data has no roleLabels, refetching from API:', { - username: cachedUser.username, - roleLabels: cachedUser.roleLabels - }); - // Clear cache and refetch - clearUserDataCache(); - fetchCurrentUser(); - return; - } - // Use cached user data - permissions are checked via RBAC API + // Note: roleLabels is deprecated in Multi-Tenant architecture - use isSysAdmin flag instead setUser(cachedUser); - console.log('✅ Using cached user data from sessionStorage on mount (persists during session):', { + console.log('✅ Using cached user data from sessionStorage on mount:', { username: cachedUser.username, - roleLabels: cachedUser.roleLabels + isSysAdmin: cachedUser.isSysAdmin }); } @@ -835,20 +790,14 @@ export function useUserOperations() { } }; - const handleUserCreate = async (userData: Omit) => { + const handleUserCreate = async (userData: Omit) => { setCreateError(null); setCreatingUser(true); try { - const currentUserData = getUserDataCache(); - const mandateId = currentUserData?.mandateId || ''; - - const requestBody = { - mandateId: mandateId, - ...userData - }; - - const newUser = await createUserApi(request, requestBody); + // mandateId wird nicht mehr vom Client gesendet + // Das Backend bestimmt den Kontext über die instanceId im Request + const newUser = await createUserApi(request, userData); return { success: true, userData: newUser }; } catch (error: any) { @@ -889,15 +838,8 @@ export function useUserOperations() { setEditingUsers(prev => new Set(prev).add(userId)); try { - const currentUserData = getUserDataCache(); - const mandateId = currentUserData?.mandateId || ''; - - const requestBody = { - mandateId: mandateId, - ...updateData - }; - - const updatedUser = await updateUserApi(request, userId, requestBody); + // mandateId wird nicht mehr vom Client gesendet + const updatedUser = await updateUserApi(request, userId, updateData); return { success: true, userData: updatedUser }; } catch (error: any) { diff --git a/src/index.css b/src/index.css index 34d6aee..c07a664 100644 --- a/src/index.css +++ b/src/index.css @@ -8,6 +8,7 @@ html, body { padding: 0; height: 100%; overflow: hidden; + font-family: var(--font-family, "DM Sans", sans-serif); } #root { @@ -15,4 +16,5 @@ html, body { width: 100vw; margin: 0; padding: 0; + font-family: var(--font-family, "DM Sans", sans-serif); } \ No newline at end of file diff --git a/src/layouts/MainLayout.module.css b/src/layouts/MainLayout.module.css index 63c802b..35f7dd9 100644 --- a/src/layouts/MainLayout.module.css +++ b/src/layouts/MainLayout.module.css @@ -31,6 +31,12 @@ border-bottom: 1px solid var(--border-color, #e0e0e0); } +.logoImage { + height: 40px; + width: auto; + object-fit: contain; +} + .logoText { font-size: 1.5rem; font-weight: 700; @@ -93,6 +99,10 @@ border-bottom-color: var(--border-dark, #333); } +:global(.dark-theme) .logoImage { + filter: brightness(0) invert(1); +} + :global(.dark-theme) .logoPower { color: var(--text-primary-dark, #ffffff); } diff --git a/src/layouts/MainLayout.tsx b/src/layouts/MainLayout.tsx index 42fdbe6..c19321b 100644 --- a/src/layouts/MainLayout.tsx +++ b/src/layouts/MainLayout.tsx @@ -9,6 +9,7 @@ import React, { useEffect } from 'react'; import { Outlet } from 'react-router-dom'; import { FeatureProvider, useFeatureStore } from '../stores/featureStore'; import { MandateNavigation } from '../components/Navigation/MandateNavigation'; +import { UserSection } from '../components/Navigation/UserSection'; import styles from './MainLayout.module.css'; // ============================================================================= @@ -30,10 +31,11 @@ const MainLayoutInner: React.FC = () => { {/* Sidebar */} {/* Content */} diff --git a/src/pages/FeatureView.module.css b/src/pages/FeatureView.module.css index 9bbc145..035a081 100644 --- a/src/pages/FeatureView.module.css +++ b/src/pages/FeatureView.module.css @@ -6,10 +6,11 @@ display: flex; flex-direction: column; height: 100%; + overflow: hidden; } -/* View Header */ .viewHeader { + flex-shrink: 0; padding: 1rem 1.5rem; border-bottom: 1px solid var(--border-color, #e0e0e0); background: var(--bg-primary, #ffffff); @@ -22,38 +23,33 @@ color: var(--text-primary, #1a1a1a); } -/* View Content */ .viewContent { flex: 1; overflow: auto; padding: 1.5rem; } -/* Placeholder */ +/* Placeholder View */ .placeholder { display: flex; flex-direction: column; align-items: center; justify-content: center; - min-height: 300px; - padding: 2rem; - background: var(--surface-color, #f8f9fa); - border: 2px dashed var(--border-color, #e0e0e0); - border-radius: 12px; + min-height: 400px; text-align: center; + padding: 2rem; } .placeholder h2 { - margin: 0; - font-size: 1.25rem; + margin: 0 0 0.5rem; + font-size: 1.5rem; font-weight: 600; color: var(--text-primary, #1a1a1a); } .placeholder p { - margin: 0.5rem 0 0; + margin: 0; color: var(--text-secondary, #666); - font-size: 0.9375rem; } /* Not Found */ @@ -63,29 +59,22 @@ flex-direction: column; align-items: center; justify-content: center; - min-height: 300px; - padding: 2rem; + min-height: 400px; text-align: center; + padding: 2rem; } .notFound h2, .accessDenied h2 { - margin: 0; + margin: 0 0 0.5rem; font-size: 1.25rem; font-weight: 600; - color: var(--text-primary, #1a1a1a); } .notFound p, .accessDenied p { - margin: 0.5rem 0 0; + margin: 0; color: var(--text-secondary, #666); - font-size: 0.9375rem; -} - -.accessDenied { - background: var(--error-light, #fef2f2); - border-radius: 12px; } .accessDenied h2 { @@ -98,25 +87,14 @@ border-bottom-color: var(--border-dark, #333); } -:global(.dark-theme) .viewTitle { - color: var(--text-primary-dark, #ffffff); -} - -:global(.dark-theme) .placeholder { - background: var(--surface-dark, #1a1a1a); - border-color: var(--border-dark, #444); -} - +:global(.dark-theme) .viewTitle, :global(.dark-theme) .placeholder h2, :global(.dark-theme) .notFound h2 { color: var(--text-primary-dark, #ffffff); } :global(.dark-theme) .placeholder p, -:global(.dark-theme) .notFound p { +:global(.dark-theme) .notFound p, +:global(.dark-theme) .accessDenied p { color: var(--text-secondary-dark, #aaa); } - -:global(.dark-theme) .accessDenied { - background: rgba(220, 38, 38, 0.1); -} diff --git a/src/pages/FeatureView.tsx b/src/pages/FeatureView.tsx index 99488d7..76780ee 100644 --- a/src/pages/FeatureView.tsx +++ b/src/pages/FeatureView.tsx @@ -3,105 +3,55 @@ * * Generische Feature-View-Komponente. * Rendert den entsprechenden Content basierend auf Feature-Code und View. - * - * Die Komponente ist Feature-agnostisch und delegiert an spezifische View-Komponenten. */ import React from 'react'; import { useCurrentInstance } from '../hooks/useCurrentInstance'; import { useCanViewFeatureView } from '../hooks/useInstancePermissions'; import { getLabel, FEATURE_REGISTRY } from '../types/mandate'; + +// Trustee Views +import { TrusteeContractsView } from './views/trustee/TrusteeContractsView'; +import { TrusteeOrganisationsView } from './views/trustee/TrusteeOrganisationsView'; +import { TrusteeDocumentsView } from './views/trustee/TrusteeDocumentsView'; +import { TrusteePositionsView } from './views/trustee/TrusteePositionsView'; +import { TrusteeRolesView } from './views/trustee/TrusteeRolesView'; +import { TrusteeAccessView } from './views/trustee/TrusteeAccessView'; +import { TrusteeDashboardView } from './views/trustee/TrusteeDashboardView'; + import styles from './FeatureView.module.css'; // ============================================================================= -// VIEW COMPONENTS (Placeholders - werden später durch echte ersetzt) +// PLACEHOLDER VIEWS (für nicht implementierte Features) // ============================================================================= -// Trustee Views -const TrusteeDashboard: React.FC = () => ( +const PlaceholderView: React.FC<{ title: string; description: string }> = ({ title, description }) => (
-

Trustee Dashboard

-

Übersicht der Treuhand-Aktivitäten

-
-); - -const TrusteeOrganisations: React.FC = () => ( -
-

Organisationen

-

Verwaltung der Organisationen

-
-); - -const TrusteeContracts: React.FC = () => ( -
-

Verträge

-

Vertragsverwaltung

-
-); - -const TrusteeDocuments: React.FC = () => ( -
-

Dokumente

-

Dokumentenverwaltung

-
-); - -const TrusteePositions: React.FC = () => ( -
-

Positionen

-

Positionsverwaltung

-
-); - -const TrusteeRoles: React.FC = () => ( -
-

Rollen

-

Rollenverwaltung

-
-); - -const TrusteeAccess: React.FC = () => ( -
-

Zugriffe

-

Zugriffsverwaltung

+

{title}

+

{description}

); // Chatworkflow Views const ChatworkflowDashboard: React.FC = () => ( -
-

Workflow Dashboard

-

Übersicht der Workflows

-
+ ); const ChatworkflowRuns: React.FC = () => ( -
-

Runs

-

Workflow-Ausführungen

-
+ ); const ChatworkflowFiles: React.FC = () => ( -
-

Dateien

-

Workflow-Dateien

-
+ ); // Chatbot Views const ChatbotConversations: React.FC = () => ( -
-

Konversationen

-

Chat-Konversationen

-
+ ); const ChatbotSettings: React.FC = () => ( -
-

Chatbot Einstellungen

-

Konfiguration des Chatbots

-
+ ); // Generic/Fallback @@ -127,13 +77,13 @@ type ViewComponent = React.FC; const VIEW_COMPONENTS: Record> = { trustee: { - dashboard: TrusteeDashboard, - organisations: TrusteeOrganisations, - contracts: TrusteeContracts, - documents: TrusteeDocuments, - positions: TrusteePositions, - roles: TrusteeRoles, - access: TrusteeAccess, + dashboard: TrusteeDashboardView, + organisations: TrusteeOrganisationsView, + contracts: TrusteeContractsView, + documents: TrusteeDocumentsView, + positions: TrusteePositionsView, + roles: TrusteeRolesView, + access: TrusteeAccessView, }, chatworkflow: { dashboard: ChatworkflowDashboard, diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index ad1923d..ff4b1cf 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -13,7 +13,7 @@ import styles from './Settings.module.css'; // ============================================================================= export const SettingsPage: React.FC = () => { - const { t, language, setLanguage } = useLanguage(); + const { currentLanguage, setLanguage } = useLanguage(); const [theme, setTheme] = useState<'light' | 'dark'>( () => (localStorage.getItem('theme') as 'light' | 'dark') || 'light' ); @@ -79,7 +79,7 @@ export const SettingsPage: React.FC = () => {
onChange(e.target.value as AccessLevel)} + disabled={disabled} + className={styles.accessLevelDropdown} + style={{ + borderColor: currentColor, + color: currentColor, + }} + > + {ACCESS_LEVEL_OPTIONS.map(option => ( + + ))} + +
+ ); +}; + +export default AccessLevelSelect; diff --git a/src/components/AccessRules/AccessRules.module.css b/src/components/AccessRules/AccessRules.module.css new file mode 100644 index 0000000..2b36518 --- /dev/null +++ b/src/components/AccessRules/AccessRules.module.css @@ -0,0 +1,535 @@ +/* ============================================================================= + * AccessRules Components Styles + * ============================================================================= */ + +/* ============================================================================= + * Access Level Select + * ============================================================================= */ + +.accessLevelSelect { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.accessLevelSelect.compact { + gap: 0; +} + +.accessLevelLabel { + font-size: 0.75rem; + color: var(--text-secondary); + font-weight: 500; +} + +.accessLevelDropdown { + padding: 0.375rem 0.5rem; + border: 2px solid var(--border-color); + border-radius: 4px; + background: var(--bg-primary); + font-size: 0.875rem; + font-weight: 600; + cursor: pointer; + min-width: 80px; + transition: border-color 0.2s, box-shadow 0.2s; +} + +.accessLevelDropdown:hover:not(:disabled) { + box-shadow: 0 0 0 2px var(--primary-color-light); +} + +.accessLevelDropdown:focus { + outline: none; + box-shadow: 0 0 0 2px var(--primary-color); +} + +.accessLevelDropdown:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +/* ============================================================================= + * Access Rules Editor + * ============================================================================= */ + +.accessRulesEditor { + display: flex; + flex-direction: column; + gap: 1rem; + padding: 1rem; + background: var(--bg-primary); + border-radius: 8px; + border: 1px solid var(--border-color); +} + +.editorHeader { + display: flex; + justify-content: space-between; + align-items: center; + padding-bottom: 0.75rem; + border-bottom: 1px solid var(--border-color); +} + +.editorTitle { + font-size: 1.125rem; + font-weight: 600; + color: var(--text-primary); + margin: 0; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.templateBadge { + background: var(--info-color); + color: white; + font-size: 0.625rem; + padding: 0.125rem 0.375rem; + border-radius: 4px; + text-transform: uppercase; + font-weight: 700; +} + +.headerActions { + display: flex; + gap: 0.5rem; +} + +/* ============================================================================= + * Tabs + * ============================================================================= */ + +.tabsContainer { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.tabList { + display: flex; + gap: 0.25rem; + border-bottom: 2px solid var(--border-color); + padding-bottom: -2px; +} + +.tab { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.625rem 1rem; + background: none; + border: none; + border-bottom: 2px solid transparent; + margin-bottom: -2px; + cursor: pointer; + font-size: 0.875rem; + font-weight: 500; + color: var(--text-secondary); + transition: all 0.2s; +} + +.tab:hover { + color: var(--text-primary); + background: var(--bg-secondary); +} + +.tab.active { + color: var(--primary-color); + border-bottom-color: var(--primary-color); +} + +.tabIcon { + font-size: 1rem; +} + +.tabBadge { + background: var(--bg-tertiary); + color: var(--text-secondary); + font-size: 0.75rem; + padding: 0.125rem 0.375rem; + border-radius: 10px; + min-width: 20px; + text-align: center; +} + +.tab.active .tabBadge { + background: var(--primary-color); + color: white; +} + +.tabContent { + min-height: 200px; +} + +/* ============================================================================= + * Rules Section + * ============================================================================= */ + +.rulesSection { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.sectionHeader { + display: flex; + justify-content: space-between; + align-items: center; +} + +.sectionTitle { + font-size: 0.875rem; + font-weight: 600; + color: var(--text-secondary); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.addButton { + display: flex; + align-items: center; + gap: 0.375rem; + padding: 0.375rem 0.75rem; + background: var(--primary-color); + color: white; + border: none; + border-radius: 4px; + font-size: 0.8125rem; + font-weight: 500; + cursor: pointer; + transition: background 0.2s; +} + +.addButton:hover { + background: var(--primary-color-dark); +} + +.addButton:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +/* ============================================================================= + * Rule Card + * ============================================================================= */ + +.ruleCard { + display: flex; + flex-direction: column; + gap: 0.75rem; + padding: 0.875rem; + background: var(--bg-secondary); + border-radius: 6px; + border: 1px solid var(--border-color); +} + +.ruleHeader { + display: flex; + justify-content: space-between; + align-items: center; +} + +.ruleItem { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.ruleItemIcon { + color: var(--text-tertiary); + font-size: 0.875rem; +} + +.ruleItemName { + font-weight: 500; + color: var(--text-primary); + font-family: 'Monaco', 'Menlo', monospace; + font-size: 0.875rem; +} + +.ruleActions { + display: flex; + gap: 0.25rem; +} + +.iconButton { + display: flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + background: none; + border: 1px solid transparent; + border-radius: 4px; + cursor: pointer; + color: var(--text-tertiary); + transition: all 0.2s; +} + +.iconButton:hover { + background: var(--bg-tertiary); + color: var(--text-primary); + border-color: var(--border-color); +} + +.iconButton.danger:hover { + background: #fed7d7; + color: #c53030; + border-color: #fc8181; +} + +/* ============================================================================= + * Permissions Grid + * ============================================================================= */ + +.permissionsGrid { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 0.5rem; +} + +.permissionItem { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.25rem; +} + +.permissionLabel { + font-size: 0.6875rem; + color: var(--text-tertiary); + text-transform: uppercase; + font-weight: 500; +} + +/* View Toggle */ +.viewToggle { + display: flex; + align-items: center; + justify-content: center; + width: 100%; +} + +.viewCheckbox { + width: 18px; + height: 18px; + cursor: pointer; + accent-color: var(--primary-color); +} + +/* ============================================================================= + * Empty State + * ============================================================================= */ + +.emptyState { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 2rem; + color: var(--text-tertiary); + text-align: center; +} + +.emptyIcon { + font-size: 2rem; + margin-bottom: 0.75rem; + opacity: 0.5; +} + +.emptyText { + font-size: 0.875rem; + margin: 0; +} + +.emptyHint { + font-size: 0.75rem; + margin-top: 0.25rem; +} + +/* ============================================================================= + * Add Rule Modal + * ============================================================================= */ + +.addRuleForm { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.formGroup { + display: flex; + flex-direction: column; + gap: 0.375rem; +} + +.formLabel { + font-size: 0.8125rem; + font-weight: 500; + color: var(--text-primary); +} + +.formInput { + padding: 0.5rem 0.75rem; + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 0.875rem; + background: var(--bg-primary); + color: var(--text-primary); +} + +.formInput:focus { + outline: none; + border-color: var(--primary-color); + box-shadow: 0 0 0 2px var(--primary-color-light); +} + +.formSelect { + padding: 0.5rem 0.75rem; + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 0.875rem; + background: var(--bg-primary); + color: var(--text-primary); + cursor: pointer; +} + +.formHint { + font-size: 0.75rem; + color: var(--text-tertiary); +} + +.formActions { + display: flex; + justify-content: flex-end; + gap: 0.5rem; + margin-top: 0.5rem; +} + +/* ============================================================================= + * Action Bar + * ============================================================================= */ + +.actionBar { + display: flex; + justify-content: flex-end; + gap: 0.5rem; + padding-top: 1rem; + border-top: 1px solid var(--border-color); +} + +.secondaryButton { + display: flex; + align-items: center; + gap: 0.375rem; + padding: 0.5rem 1rem; + background: var(--bg-secondary); + color: var(--text-primary); + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; +} + +.secondaryButton:hover { + background: var(--bg-tertiary); +} + +.secondaryButton:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.primaryButton { + display: flex; + align-items: center; + gap: 0.375rem; + padding: 0.5rem 1rem; + background: var(--primary-color); + color: white; + border: none; + border-radius: 4px; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; +} + +.primaryButton:hover { + background: var(--primary-color-dark); +} + +.primaryButton:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +/* ============================================================================= + * Loading State + * ============================================================================= */ + +.loadingContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 3rem; + gap: 1rem; +} + +.spinner { + width: 32px; + height: 32px; + border: 3px solid var(--border-color); + border-top-color: var(--primary-color); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +/* ============================================================================= + * JSON Editor Tab + * ============================================================================= */ + +.jsonEditor { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.jsonTextarea { + width: 100%; + min-height: 300px; + padding: 0.75rem; + border: 1px solid var(--border-color); + border-radius: 4px; + font-family: 'Monaco', 'Menlo', monospace; + font-size: 0.8125rem; + line-height: 1.5; + background: var(--bg-secondary); + color: var(--text-primary); + resize: vertical; +} + +.jsonTextarea:focus { + outline: none; + border-color: var(--primary-color); +} + +.jsonError { + color: #c53030; + font-size: 0.8125rem; + padding: 0.5rem; + background: #fed7d7; + border-radius: 4px; +} + +.jsonHint { + font-size: 0.75rem; + color: var(--text-tertiary); +} diff --git a/src/components/AccessRules/AccessRulesEditor.tsx b/src/components/AccessRules/AccessRulesEditor.tsx new file mode 100644 index 0000000..4614027 --- /dev/null +++ b/src/components/AccessRules/AccessRulesEditor.tsx @@ -0,0 +1,626 @@ +/** + * AccessRulesEditor + * + * Main component for editing RBAC access rules for a role. + * Provides tabbed interface for DATA, UI, and RESOURCE rules. + */ + +import React, { useState, useEffect, useCallback } from 'react'; +import { + FaTable, + FaDesktop, + FaServer, + FaCode, + FaPlus, + FaTrash, + FaSave, + FaUndo, + FaSpinner, +} from 'react-icons/fa'; +import { + useAccessRules, + type AccessRule, + type RuleContext, + type AccessLevel, + type AccessRuleCreate, +} from '../../hooks/useAccessRules'; +import { AccessLevelSelect } from './AccessLevelSelect'; +import styles from './AccessRules.module.css'; + +// ============================================================================= +// TYPES +// ============================================================================= + +interface AccessRulesEditorProps { + roleId: string; + roleName?: string; + isTemplate?: boolean; + readOnly?: boolean; + onSave?: () => void; +} + +type TabType = 'DATA' | 'UI' | 'RESOURCE' | 'JSON'; + +// ============================================================================= +// RULE CARD COMPONENT +// ============================================================================= + +interface RuleCardProps { + rule: AccessRule; + readOnly?: boolean; + onUpdate: (ruleId: string, updates: Partial) => void; + onDelete: (ruleId: string) => void; +} + +const RuleCard: React.FC = ({ rule, readOnly, onUpdate, onDelete }) => { + const isDataRule = rule.context === 'DATA'; + + return ( +
+
+
+ + {rule.context === 'DATA' ? : + rule.context === 'UI' ? : } + + {rule.item || '(global)'} +
+ {!readOnly && ( +
+ +
+ )} +
+ +
+ {/* View Toggle */} +
+ View +
+ onUpdate(rule.id, { view: e.target.checked })} + disabled={readOnly} + className={styles.viewCheckbox} + /> +
+
+ + {/* CRUD Levels (only for DATA context) */} + {isDataRule ? ( + <> +
+ Read + onUpdate(rule.id, { read: value })} + disabled={readOnly} + compact + /> +
+
+ Create + onUpdate(rule.id, { create: value })} + disabled={readOnly} + compact + /> +
+
+ Update + onUpdate(rule.id, { update: value })} + disabled={readOnly} + compact + /> +
+
+ Delete + onUpdate(rule.id, { delete: value })} + disabled={readOnly} + compact + /> +
+ + ) : ( + // For UI and RESOURCE, show empty placeholders to maintain grid +
+ )} +
+
+ ); +}; + +// ============================================================================= +// ADD RULE FORM +// ============================================================================= + +interface AddRuleFormProps { + context: RuleContext; + onAdd: (rule: AccessRuleCreate) => void; + onCancel: () => void; +} + +const AddRuleForm: React.FC = ({ context, onAdd, onCancel }) => { + const [item, setItem] = useState(''); + const [view, setView] = useState(true); + const [read, setRead] = useState('n'); + const [create, setCreate] = useState('n'); + const [update, setUpdate] = useState('n'); + const [del, setDel] = useState('n'); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + const newRule: AccessRuleCreate = { + context, + item: item.trim() || null, + view, + ...(context === 'DATA' ? { read, create, update, delete: del } : {}), + }; + onAdd(newRule); + }; + + const getPlaceholder = () => { + switch (context) { + case 'DATA': + return 'z.B. TrusteeContract oder TrusteeContract.salary'; + case 'UI': + return 'z.B. nav.trustee oder button.export'; + case 'RESOURCE': + return 'z.B. ai.model.anthropic oder connector.sharepoint'; + } + }; + + return ( +
+
+ + setItem(e.target.value)} + placeholder={getPlaceholder()} + className={styles.formInput} + autoFocus + /> + + Leer lassen für globale Regel. Längster Match gewinnt. + +
+ +
+ +
+ + {context === 'DATA' && ( +
+
+ Read + +
+
+ Create + +
+
+ Update + +
+
+ Delete + +
+
+ )} + +
+ + +
+
+ ); +}; + +// ============================================================================= +// RULES SECTION +// ============================================================================= + +interface RulesSectionProps { + context: RuleContext; + rules: AccessRule[]; + readOnly?: boolean; + onUpdate: (ruleId: string, updates: Partial) => void; + onDelete: (ruleId: string) => void; + onAdd: (rule: AccessRuleCreate) => void; +} + +const RulesSection: React.FC = ({ + context, + rules, + readOnly, + onUpdate, + onDelete, + onAdd, +}) => { + const [showAddForm, setShowAddForm] = useState(false); + + const handleAdd = (rule: AccessRuleCreate) => { + onAdd(rule); + setShowAddForm(false); + }; + + const getEmptyIcon = () => { + switch (context) { + case 'DATA': return ; + case 'UI': return ; + case 'RESOURCE': return ; + } + }; + + const getEmptyText = () => { + switch (context) { + case 'DATA': return 'Keine Daten-Regeln definiert'; + case 'UI': return 'Keine UI-Regeln definiert'; + case 'RESOURCE': return 'Keine Ressourcen-Regeln definiert'; + } + }; + + return ( +
+ {!readOnly && !showAddForm && ( +
+ + {rules.length} {rules.length === 1 ? 'Regel' : 'Regeln'} + + +
+ )} + + {showAddForm && ( + setShowAddForm(false)} + /> + )} + + {rules.length === 0 && !showAddForm ? ( +
+
{getEmptyIcon()}
+

{getEmptyText()}

+ {!readOnly && ( +

+ Klicken Sie auf "Neue Regel" um eine Berechtigung hinzuzufügen. +

+ )} +
+ ) : ( + rules.map(rule => ( + + )) + )} +
+ ); +}; + +// ============================================================================= +// JSON EDITOR +// ============================================================================= + +interface JsonEditorProps { + rules: AccessRule[]; + readOnly?: boolean; + onApply: (rules: AccessRule[]) => void; +} + +const JsonEditor: React.FC = ({ rules, readOnly, onApply }) => { + const [jsonText, setJsonText] = useState(''); + const [error, setError] = useState(null); + + useEffect(() => { + setJsonText(JSON.stringify(rules, null, 2)); + setError(null); + }, [rules]); + + const handleApply = () => { + try { + const parsed = JSON.parse(jsonText); + if (!Array.isArray(parsed)) { + throw new Error('JSON muss ein Array sein'); + } + setError(null); + onApply(parsed); + } catch (err: any) { + setError(err.message); + } + }; + + return ( +
+