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';
|
2024-05-31 19:49:46 +05:30
|
|
|
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';
|
2024-05-31 19:49:46 +05:30
|
|
|
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';
|
2024-05-31 19:49:46 +05:30
|
|
|
import { createRouter } from './Router';
|
|
|
|
|
import { ScreenSizeProvider, useScreenSize } from '../hooks/useScreenSize';
|
2024-01-21 23:50:56 +11:00
|
|
|
|
2024-05-31 19:49:46 +05:30
|
|
|
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() {
|
2024-05-31 19:49:46 +05:30
|
|
|
const screenSize = useScreenSize();
|
|
|
|
|
|
2025-08-29 15:04:52 +05:30
|
|
|
useLastNodeToDetectReactPortalEntry();
|
|
|
|
|
|
2024-01-21 23:50:56 +11:00
|
|
|
return (
|
2024-05-31 19:49:46 +05:30
|
|
|
<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;
|