1- import React , { Component } from 'react' ;
1+ import React , { Component , Suspense } from 'react' ;
22import { Redirect , Route , Switch } from 'react-router-dom' ;
33import { Container } from 'reactstrap' ;
44
@@ -18,46 +18,70 @@ import {
1818import navigation from '../../_nav' ;
1919// routes config
2020import routes from '../../routes' ;
21- import DefaultAside from './DefaultAside' ;
22- import DefaultFooter from './DefaultFooter' ;
23- import DefaultHeader from './DefaultHeader' ;
21+
22+ const DefaultAside = React . lazy ( ( ) => import ( './DefaultAside' ) ) ;
23+ const DefaultFooter = React . lazy ( ( ) => import ( './DefaultFooter' ) ) ;
24+ const DefaultHeader = React . lazy ( ( ) => import ( './DefaultHeader' ) ) ;
2425
2526class DefaultLayout extends Component {
27+
28+ loading = ( ) => < div className = "animated fadeIn pt-1 text-center" > Loading...</ div >
29+
30+ signOut ( e ) {
31+ e . preventDefault ( )
32+ this . props . history . push ( '/login' )
33+ }
34+
2635 render ( ) {
2736 return (
2837 < div className = "app" >
2938 < AppHeader fixed >
30- < DefaultHeader />
39+ < Suspense fallback = { this . loading ( ) } >
40+ < DefaultHeader onLogout = { e => this . signOut ( e ) } />
41+ </ Suspense >
3142 </ AppHeader >
3243 < div className = "app-body" >
3344 < AppSidebar fixed display = "lg" >
3445 < AppSidebarHeader />
3546 < AppSidebarForm />
47+ < Suspense >
3648 < AppSidebarNav navConfig = { navigation } { ...this . props } />
49+ </ Suspense >
3750 < AppSidebarFooter />
3851 < AppSidebarMinimizer />
3952 </ AppSidebar >
4053 < main className = "main" >
4154 < AppBreadcrumb appRoutes = { routes } />
4255 < Container fluid >
43- < Switch >
44- { routes . map ( ( route , idx ) => {
45- return route . component ? ( < Route key = { idx } path = { route . path } exact = { route . exact } name = { route . name } render = { props => (
46- < route . component { ...props } />
47- ) } /> )
48- : ( null ) ;
49- } ,
50- ) }
51- < Redirect from = "/" to = "/dashboard" />
52- </ Switch >
56+ < Suspense fallback = { this . loading ( ) } >
57+ < Switch >
58+ { routes . map ( ( route , idx ) => {
59+ return route . component ? (
60+ < Route
61+ key = { idx }
62+ path = { route . path }
63+ exact = { route . exact }
64+ name = { route . name }
65+ render = { props => (
66+ < route . component { ...props } />
67+ ) } />
68+ ) : ( null ) ;
69+ } ) }
70+ < Redirect from = "/" to = "/dashboard" />
71+ </ Switch >
72+ </ Suspense >
5373 </ Container >
5474 </ main >
5575 < AppAside fixed >
56- < DefaultAside />
76+ < Suspense fallback = { this . loading ( ) } >
77+ < DefaultAside />
78+ </ Suspense >
5779 </ AppAside >
5880 </ div >
5981 < AppFooter >
60- < DefaultFooter />
82+ < Suspense fallback = { this . loading ( ) } >
83+ < DefaultFooter />
84+ </ Suspense >
6185 </ AppFooter >
6286 </ div >
6387 ) ;
0 commit comments