Files
cinny/src/app/pages/App.tsx
T

55 lines
1.8 KiB
TypeScript
Raw Normal View History

2025-08-29 15:04:52 +05:30
import React, { useEffect } from 'react';
2024-01-21 23:50:56 +11:00
import { Provider as JotaiProvider } from 'jotai';
import { RouterProvider } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
2024-01-21 23:50:56 +11:00
import { ClientConfigLoader } from '../components/ClientConfigLoader';
import { ClientConfigProvider } from '../hooks/useClientConfig';
2024-01-21 23:50:56 +11:00
import { ConfigConfigError, ConfigConfigLoading } from './ConfigConfig';
2024-01-24 00:06:55 +11:00
import { FeatureCheck } from './FeatureCheck';
import { createRouter } from './Router';
import { ScreenSizeProvider, useScreenSize } from '../hooks/useScreenSize';
2024-01-21 23:50:56 +11:00
const queryClient = new QueryClient();
2024-01-21 23:50:56 +11:00
2025-08-29 15:04:52 +05:30
const useLastNodeToDetectReactPortalEntry = () => {
useEffect(() => {
const lastDiv = document.createElement('div');
lastDiv.setAttribute('data-last-node', 'true');
document.body.appendChild(lastDiv);
}, []);
};
2024-01-21 23:50:56 +11:00
function App() {
const screenSize = useScreenSize();
2025-08-29 15:04:52 +05:30
useLastNodeToDetectReactPortalEntry();
2024-01-21 23:50:56 +11:00
return (
<ScreenSizeProvider value={screenSize}>
<FeatureCheck>
<ClientConfigLoader
fallback={() => <ConfigConfigLoading />}
error={(err, retry, ignore) => (
<ConfigConfigError error={err} retry={retry} ignore={ignore} />
)}
>
{(clientConfig) => (
<ClientConfigProvider value={clientConfig}>
<QueryClientProvider client={queryClient}>
<JotaiProvider>
<RouterProvider router={createRouter(clientConfig, screenSize)} />
</JotaiProvider>
<ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>
</ClientConfigProvider>
)}
</ClientConfigLoader>
</FeatureCheck>
</ScreenSizeProvider>
2024-01-21 23:50:56 +11:00
);
}
export default App;