-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathApp.tsx
More file actions
47 lines (38 loc) · 1.28 KB
/
App.tsx
File metadata and controls
47 lines (38 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import React from 'react';
import PageFooter from '@widgets/PageFooter';
import PageNavBar from '@widgets/PageNavBar';
import HoverCardProvider from '@features/layers/hovercard/HoverCardProvider';
import PageRoutes from './PageRoutes';
import './index.css';
function App() {
return (
<DeferredDataProviders>
<HoverCardProvider>
<PageNavBar />
<PageRoutes />
<PageFooter />
</HoverCardProvider>
</DeferredDataProviders>
);
}
const DeferredDataProviders: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [PageParamsProvider, setPageParamsProvider] = React.useState<
React.ComponentType<{ children: React.ReactNode }> | undefined
>(undefined);
const [DataProvider, setDataProvider] = React.useState<
React.ComponentType<{ children: React.ReactNode }> | undefined
>(undefined);
React.useEffect(() => {
import('@features/params/PageParamsProvider').then((m) =>
setPageParamsProvider(() => m.default),
);
import('@features/data/context/DataProvider').then((m) => setDataProvider(() => m.default));
}, []);
if (!PageParamsProvider || !DataProvider) return children;
return (
<PageParamsProvider>
<DataProvider>{children}</DataProvider>
</PageParamsProvider>
);
};
export default App;