1
- import React , { Component } from 'react' ;
1
+ import React , { Component , Suspense } from 'react' ;
2
2
import { Redirect , Route , Switch } from 'react-router-dom' ;
3
3
import { Container } from 'reactstrap' ;
4
4
@@ -18,46 +18,70 @@ import {
18
18
import navigation from '../../_nav' ;
19
19
// routes config
20
20
import 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' ) ) ;
24
25
25
26
class 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
+
26
35
render ( ) {
27
36
return (
28
37
< div className = "app" >
29
38
< AppHeader fixed >
30
- < DefaultHeader />
39
+ < Suspense fallback = { this . loading ( ) } >
40
+ < DefaultHeader onLogout = { e => this . signOut ( e ) } />
41
+ </ Suspense >
31
42
</ AppHeader >
32
43
< div className = "app-body" >
33
44
< AppSidebar fixed display = "lg" >
34
45
< AppSidebarHeader />
35
46
< AppSidebarForm />
47
+ < Suspense >
36
48
< AppSidebarNav navConfig = { navigation } { ...this . props } />
49
+ </ Suspense >
37
50
< AppSidebarFooter />
38
51
< AppSidebarMinimizer />
39
52
</ AppSidebar >
40
53
< main className = "main" >
41
54
< AppBreadcrumb appRoutes = { routes } />
42
55
< 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 >
53
73
</ Container >
54
74
</ main >
55
75
< AppAside fixed >
56
- < DefaultAside />
76
+ < Suspense fallback = { this . loading ( ) } >
77
+ < DefaultAside />
78
+ </ Suspense >
57
79
</ AppAside >
58
80
</ div >
59
81
< AppFooter >
60
- < DefaultFooter />
82
+ < Suspense fallback = { this . loading ( ) } >
83
+ < DefaultFooter />
84
+ </ Suspense >
61
85
</ AppFooter >
62
86
</ div >
63
87
) ;
0 commit comments