/** * MainLayout * * Hauptlayout der Anwendung mit Sidebar und Content-Bereich. * Enthält den FeatureProvider für das Multi-Tenant-System. */ import React, { useEffect, useState } from 'react'; import { Outlet, useLocation } from 'react-router-dom'; import { FeatureProvider, useFeatureStore } from '../stores/featureStore'; import { MandateNavigation } from '../components/Navigation/MandateNavigation'; import { UserSection } from '../components/Navigation/UserSection'; import { WorkspaceKeepAlive } from '../pages/views/workspace/WorkspaceKeepAlive'; import styles from './MainLayout.module.css'; const _WORKSPACE_ROUTE_RE = /\/mandates\/[^/]+\/workspace\/[^/]+/; // ============================================================================= // INNER LAYOUT (mit Zugriff auf Store) // ============================================================================= const MainLayoutInner: React.FC = () => { const { loadFeatures, initialized, loading, error } = useFeatureStore(); const location = useLocation(); const [isMobileSidebarOpen, setIsMobileSidebarOpen] = useState(false); // Features laden beim Mount useEffect(() => { if (!initialized && !loading) { loadFeatures(); } }, [initialized, loading, loadFeatures]); useEffect(() => { setIsMobileSidebarOpen(false); }, [location.pathname]); useEffect(() => { const handleResize = () => { if (window.innerWidth > 1024) { setIsMobileSidebarOpen(false); } }; window.addEventListener('resize', handleResize); return () => window.removeEventListener('resize', handleResize); }, []); return (
{isMobileSidebarOpen && ( PowerOn
); }; // ============================================================================= // MAIN LAYOUT (mit Provider) // ============================================================================= export const MainLayout: React.FC = () => { return ( ); }; export default MainLayout;