UNPKG

1.97 kBJavaScriptView Raw
1import React, { lazy, Suspense } from 'react';
2import { connect } from "react-redux";
3import { hot } from 'react-hot-loader/root';
4import Monitor from "./components/framework/monitor";
5import DatasetLoader from "./components/datasetLoader";
6import Spinner from "./components/framework/spinner";
7import Head from "./components/framework/head";
8import Notifications from "./components/notifications/notifications";
9
10const Main = lazy(() => import("./components/main"));
11const Splash = lazy(() => import("./components/splash"));
12const Status = lazy(() => import("./components/status"));
13
14/** Hot Reload is happening but components are not getting rerendered.
15 * This triggers a window resize which in turn triggers a general
16 * rerender. A bit ham-fisted but gets the job done for the time being
17 * */
18if (module.hot) {
19 setTimeout(() => window.dispatchEvent(new Event('resize')), 500);
20}
21
22@connect((state) => ({displayComponent: state.general.displayComponent}))
23class MainComponentSwitch extends React.Component {
24 render() {
25 // console.log("MainComponentSwitch running (should be infrequent!)", this.props.displayComponent)
26 switch (this.props.displayComponent) {
27 case "main":
28 return (
29 <Suspense fallback={<Spinner/>}>
30 <Main/>
31 </Suspense>
32 );
33 case "splash":
34 return (
35 <Suspense fallback={null}>
36 <Splash/>
37 </Suspense>
38 );
39 case "status":
40 return (
41 <Suspense fallback={<Spinner/>}>
42 <Status/>
43 </Suspense>
44 );
45 case "datasetLoader":
46 return (<DatasetLoader/>);
47 default:
48 console.error(`reduxStore.general.displayComponent is invalid (${this.props.displayComponent})`);
49 return (<Splash/>);
50 }
51 }
52}
53
54const Root = () => {
55 return (
56 <div>
57 <Head/>
58 <Monitor/>
59 <Notifications/>
60 <MainComponentSwitch/>
61 </div>
62 );
63};
64
65export default hot(Root);