| | import { useEffect, useState } from "react";
|
| | import LabSelection from "./login.jsx";
|
| | import { QueryClientProvider } from '@tanstack/react-query'
|
| | import { queryClientInstance } from '@/lib/query-client'
|
| | import NavigationTracker from '@/lib/NavigationTracker'
|
| | import { pagesConfig } from './pages.config'
|
| | import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
|
| | import PageNotFound from './lib/PageNotFound';
|
| | import { AuthProvider, useAuth } from '@/lib/AuthContext';
|
| | import UserNotRegisteredError from '@/components/UserNotRegisteredError';
|
| |
|
| |
|
| | const { Pages, Layout, mainPage } = pagesConfig;
|
| | const mainPageKey = mainPage ?? Object.keys(Pages)[0];
|
| | const MainPage = mainPageKey ? Pages[mainPageKey] : <></>;
|
| |
|
| | const LayoutWrapper = ({ children, currentPageName }) => Layout ?
|
| | <Layout currentPageName={currentPageName}>{children}</Layout>
|
| | : <>{children}</>;
|
| |
|
| | const AuthenticatedApp = () => {
|
| | const { isLoadingAuth, isLoadingPublicSettings, authError, navigateToLogin } = useAuth();
|
| |
|
| |
|
| | if (isLoadingPublicSettings || isLoadingAuth) {
|
| | return (
|
| | <div className="fixed inset-0 flex items-center justify-center">
|
| | <div className="w-8 h-8 border-4 border-slate-200 border-t-slate-800 rounded-full animate-spin"></div>
|
| | </div>
|
| | );
|
| | }
|
| |
|
| |
|
| | if (authError) {
|
| | if (authError.type === 'user_not_registered') {
|
| | return <UserNotRegisteredError />;
|
| | } else if (authError.type === 'auth_required') {
|
| |
|
| | navigateToLogin();
|
| | return null;
|
| | }
|
| | }
|
| |
|
| |
|
| | return (
|
| | <Routes>
|
| | <Route path="/" element={
|
| | <LayoutWrapper currentPageName={mainPageKey}>
|
| | <MainPage />
|
| | </LayoutWrapper>
|
| | } />
|
| | {Object.entries(Pages).map(([path, Page]) => (
|
| | <Route
|
| | key={path}
|
| | path={`/${path}`}
|
| | element={
|
| | <LayoutWrapper currentPageName={path}>
|
| | <Page />
|
| | </LayoutWrapper>
|
| | }
|
| | />
|
| | ))}
|
| | <Route path="*" element={<PageNotFound />} />
|
| | </Routes>
|
| |
|
| | );
|
| | };
|
| |
|
| |
|
| | function App() {
|
| | const [labApproved, setLabApproved] = useState(false);
|
| |
|
| | if (!labApproved) {
|
| | return <LabSelection onApproved={() => setLabApproved(true)} />;
|
| | }
|
| |
|
| | return (
|
| | <AuthProvider>
|
| | <QueryClientProvider client={queryClientInstance}>
|
| | <Router>
|
| | <NavigationTracker />
|
| | <AuthenticatedApp />
|
| | </Router>
|
| | </QueryClientProvider>
|
| | </AuthProvider>
|
| | );
|
| | }
|
| | export default App; |