import React from 'react'; import { createBrowserRouter, Outlet, Navigate, useLocation, useParams } from 'react-router-dom'; import RouteErrorElement from '@/components/RouteErrorElement'; import { useAuth } from './auth/context'; import { ADMIN_BASE_PATH, ADMIN_DEFAULT_AFTER_LOGIN_PATH, ADMIN_EVENTS_PATH, ADMIN_LOGIN_PATH, ADMIN_LOGIN_START_PATH, ADMIN_PUBLIC_LANDING_PATH, } from './constants'; const AuthCallbackPage = React.lazy(() => import('./mobile/AuthCallbackPage')); const LoginStartPage = React.lazy(() => import('./mobile/LoginStartPage')); const LogoutPage = React.lazy(() => import('./mobile/LogoutPage')); const MobileEventsPage = React.lazy(() => import('./mobile/EventsPage')); const MobileEventDetailPage = React.lazy(() => import('./mobile/EventDetailPage')); const MobileEventPhotoboothPage = React.lazy(() => import('./mobile/EventPhotoboothPage')); const MobileBrandingPage = React.lazy(() => import('./mobile/BrandingPage')); const MobileEventFormPage = React.lazy(() => import('./mobile/EventFormPage')); const MobileQrPrintPage = React.lazy(() => import('./mobile/QrPrintPage')); const MobileQrLayoutCustomizePage = React.lazy(() => import('./mobile/QrLayoutCustomizePage')); const MobileEventPhotosPage = React.lazy(() => import('./mobile/EventPhotosPage')); const MobileEventMembersPage = React.lazy(() => import('./mobile/EventMembersPage')); const MobileEventTasksPage = React.lazy(() => import('./mobile/EventTasksPage')); const MobileEventRecapPage = React.lazy(() => import('./mobile/EventRecapPage')); const MobileNotificationsPage = React.lazy(() => import('./mobile/NotificationsPage')); const MobileProfilePage = React.lazy(() => import('./mobile/ProfilePage')); const MobileBillingPage = React.lazy(() => import('./mobile/BillingPage')); const MobileSettingsPage = React.lazy(() => import('./mobile/SettingsPage')); const MobileLoginPage = React.lazy(() => import('./mobile/LoginPage')); const MobileDashboardPage = React.lazy(() => import('./mobile/DashboardPage')); const MobileTasksTabPage = React.lazy(() => import('./mobile/TasksTabPage')); const MobileUploadsTabPage = React.lazy(() => import('./mobile/UploadsTabPage')); function RequireAuth() { const { status } = useAuth(); const location = useLocation(); if (status === 'loading') { return (
Bitte warten ...
); } if (status === 'unauthenticated') { return ; } return ; } function LandingGate() { const { status } = useAuth(); if (status === 'loading') { return (
Bitte warten ...
); } if (status === 'authenticated') { return ; } return ; } function RequireAdminAccess({ children }: { children: React.ReactNode }) { const { user } = useAuth(); if (user?.role === 'member') { return ; } return <>{children}; } function RedirectToMobileEvent({ buildPath }: { buildPath: (slug: string) => string }) { const { slug } = useParams<{ slug?: string }>(); if (!slug) { return ; } return ; } export const router = createBrowserRouter([ { path: ADMIN_BASE_PATH, element: , errorElement: , children: [ { index: true, element: }, { path: 'login', element: }, { path: 'mobile/login', element: }, { path: 'start', element: }, { path: 'logout', element: }, { path: 'auth/callback', element: }, { element: , children: [ { path: 'dashboard', element: }, { path: 'live', element: }, { path: 'events', element: }, { path: 'events/new', element: }, { path: 'events/:slug', element: `${ADMIN_EVENTS_PATH}/${slug}`} /> }, { path: 'events/:slug/recap', element: `${ADMIN_EVENTS_PATH}/${slug}`} /> }, { path: 'events/:slug/edit', element: `${ADMIN_EVENTS_PATH}/${slug}/edit`} /> }, { path: 'events/:slug/photos', element: `${ADMIN_EVENTS_PATH}/${slug}/photos`} /> }, { path: 'events/:slug/members', element: `${ADMIN_EVENTS_PATH}/${slug}/members`} /> }, { path: 'events/:slug/tasks', element: `${ADMIN_EVENTS_PATH}/${slug}/tasks`} /> }, { path: 'events/:slug/invites', element: `${ADMIN_EVENTS_PATH}/${slug}/qr`} /> }, { path: 'events/:slug/branding', element: `${ADMIN_EVENTS_PATH}/${slug}/branding`} /> }, { path: 'events/:slug/photobooth', element: `${ADMIN_EVENTS_PATH}/${slug}/photobooth`} /> }, { path: 'events/:slug/toolkit', element: `${ADMIN_EVENTS_PATH}/${slug}`} /> }, { path: 'mobile/events', element: }, { path: 'mobile/events/:slug', element: }, { path: 'mobile/events/:slug/branding', element: }, { path: 'mobile/events/new', element: }, { path: 'mobile/events/:slug/edit', element: }, { path: 'mobile/events/:slug/qr', element: }, { path: 'mobile/events/:slug/qr/customize/:tokenId?', element: }, { path: 'mobile/events/:slug/photos', element: }, { path: 'mobile/events/:slug/recap', element: }, { path: 'mobile/events/:slug/members', element: }, { path: 'mobile/events/:slug/tasks', element: }, { path: 'mobile/events/:slug/photobooth', element: }, { path: 'mobile/notifications', element: }, { path: 'mobile/profile', element: }, { path: 'mobile/billing', element: }, { path: 'mobile/settings', element: }, { path: 'mobile/dashboard', element: }, { path: 'mobile/tasks', element: }, { path: 'mobile/uploads', element: }, ], }, ], }, { path: '*', element: , errorElement: , }, ]);