import React from 'react' import { BrowserRouter as Router, Routes, Route, Navigate, NavLink, useLocation, Outlet, } from 'react-router-dom' import { AuthProvider, useAuth } from './context/AuthContext' import { OrgInboxProvider, useOrgInbox } from './context/OrgInboxContext' import DesktopSidebar from './components/DesktopSidebar' import { getMainNavItems } from './config/appNav' import LoginPage from './pages/LoginPage' import VerifyPage from './pages/VerifyPage' import Dashboard from './pages/Dashboard' import AccountSettingsPage from './pages/AccountSettingsPage' import SettingsSystemInfoPage from './pages/SettingsSystemInfoPage' import ExercisesListPage from './pages/ExercisesListPage' import ExerciseDetailPage from './pages/ExerciseDetailPage' import ExerciseFormPage from './pages/ExerciseFormPage' import ClubsPage from './pages/ClubsPage' import InboxPage from './pages/InboxPage' import SkillsPage from './pages/SkillsPage' import TrainingPlanningPage from './pages/TrainingPlanningPage' import TrainingFrameworkProgramsListPage from './pages/TrainingFrameworkProgramsListPage' import TrainingFrameworkProgramEditPage from './pages/TrainingFrameworkProgramEditPage' import TrainingUnitRunPage from './pages/TrainingUnitRunPage' import TrainingCoachPage from './pages/TrainingCoachPage' import AdminCatalogsPage from './pages/AdminCatalogsPage' import AdminHierarchyPage from './pages/AdminHierarchyPage' import AdminMaturityModelsPage from './pages/AdminMaturityModelsPage' import TrainerContextsPage from './pages/TrainerContextsPage' import MediaWikiImportPage from './pages/MediaWikiImportPage' import AdminUsersPage from './pages/AdminUsersPage' import AdminHomeRedirect from './components/AdminHomeRedirect' import PlatformAdminRoute from './components/PlatformAdminRoute' import MediaLibraryPage from './pages/MediaLibraryPage' import ActiveClubSwitcher from './components/ActiveClubSwitcher' import InactiveMembershipBanner from './components/InactiveMembershipBanner' import './app.css' /** Shield „Admin“: nur Super-Admin (global). Vereinsorga: Vereine → Mitglieder. */ function computeShowAdminNav(currentUser) { return currentUser?.role === 'superadmin' } // Bottom Navigation (Mobile) function Nav({ showAdminNav }) { const { canAccessOrgInbox, inboxCount } = useOrgInbox() const items = getMainNavItems(showAdminNav, { showInbox: canAccessOrgInbox }) const loc = useLocation() const navItemActive = (pathname, item, routerIsActive) => { if (item.to.startsWith('/admin')) return pathname.startsWith('/admin') return routerIsActive } return ( ) } function ProtectedLayout() { const { isAuthenticated, loading, user, logout } = useAuth() const handleLogout = () => { if (confirm('Wirklich abmelden?')) { logout() window.location.href = '/' } } if (loading) { return (
) } if (!isAuthenticated) { return } const showAdminNav = computeShowAdminNav(user) return (
🥋 Shinkan
) } function PublicRoute({ children }) { const { isAuthenticated, loading } = useAuth() if (loading) { return (
) } return !isAuthenticated ? children : } function AppRoutes() { return ( } /> } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ) } function App() { return ( ) } export default App