This commit is contained in:
41
src/main.tsx
Normal file
41
src/main.tsx
Normal file
@@ -0,0 +1,41 @@
|
||||
/* eslint-disable react-refresh/only-export-components */
|
||||
|
||||
import './index.css';
|
||||
|
||||
import {StrictMode, Suspense} from 'react';
|
||||
import {createRoot} from 'react-dom/client';
|
||||
|
||||
import {resolveAppRoute} from './routing/appRoutes';
|
||||
import {RouteImageReadyGate} from './routing/RouteImageReadyGate';
|
||||
import {RouteLoadingScreen} from './routing/RouteLoadingScreen';
|
||||
|
||||
type AppRoot = ReturnType<typeof createRoot>;
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
__tavernRealmsRoot__?: AppRoot;
|
||||
}
|
||||
}
|
||||
|
||||
const route = resolveAppRoute(window.location.pathname);
|
||||
const rootElement = document.getElementById('root');
|
||||
|
||||
if (!rootElement) {
|
||||
throw new Error('Missing #root container');
|
||||
}
|
||||
|
||||
const root = window.__tavernRealmsRoot__ ??= createRoot(rootElement);
|
||||
const RouteComponent = route.Component;
|
||||
|
||||
root.render(
|
||||
<StrictMode>
|
||||
<Suspense fallback={<RouteLoadingScreen eyebrow={route.loadingEyebrow} text={route.loadingText} />}>
|
||||
<RouteImageReadyGate
|
||||
eyebrow={route.loadingEyebrow}
|
||||
text={route.loadingText}
|
||||
>
|
||||
<RouteComponent {...(route.componentProps ?? {})} />
|
||||
</RouteImageReadyGate>
|
||||
</Suspense>
|
||||
</StrictMode>,
|
||||
);
|
||||
Reference in New Issue
Block a user