DefaultLayout.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import React, { Component, Suspense } from 'react';
  2. import { Redirect, Route, Switch } from 'react-router-dom';
  3. import * as router from 'react-router-dom';
  4. import { Container } from 'reactstrap';
  5. import {
  6. AppAside,
  7. AppFooter,
  8. AppHeader,
  9. AppSidebar,
  10. AppSidebarFooter,
  11. AppSidebarForm,
  12. AppSidebarHeader,
  13. AppSidebarMinimizer,
  14. AppBreadcrumb2 as AppBreadcrumb,
  15. AppSidebarNav2 as AppSidebarNav,
  16. } from '@coreui/react';
  17. // sidebar nav config
  18. import navigation from '../../_nav';
  19. // routes config
  20. import routes from '../../routes';
  21. const DefaultAside = React.lazy(() => import('./DefaultAside'));
  22. const DefaultFooter = React.lazy(() => import('./DefaultFooter'));
  23. const DefaultHeader = React.lazy(() => import('./DefaultHeader'));
  24. class DefaultLayout extends Component {
  25. loading = () => <div className="animated fadeIn pt-1 text-center">Loading...</div>
  26. signOut(e) {
  27. e.preventDefault()
  28. this.props.history.push('/login')
  29. }
  30. render() {
  31. return (
  32. <div className="app">
  33. <AppHeader fixed>
  34. <Suspense fallback={this.loading()}>
  35. <DefaultHeader onLogout={e=>this.signOut(e)}/>
  36. </Suspense>
  37. </AppHeader>
  38. <div className="app-body">
  39. <AppSidebar fixed display="lg">
  40. <AppSidebarHeader />
  41. <AppSidebarForm />
  42. <Suspense>
  43. <AppSidebarNav navConfig={navigation} {...this.props} router={router}/>
  44. </Suspense>
  45. <AppSidebarFooter />
  46. <AppSidebarMinimizer />
  47. </AppSidebar>
  48. <main className="main">
  49. <AppBreadcrumb appRoutes={routes} router={router}/>
  50. <Container fluid>
  51. <Suspense fallback={this.loading()}>
  52. <Switch>
  53. {routes.map((route, idx) => {
  54. return route.component ? (
  55. <Route
  56. key={idx}
  57. path={route.path}
  58. exact={route.exact}
  59. name={route.name}
  60. render={props => (
  61. <route.component {...props} />
  62. )} />
  63. ) : (null);
  64. })}
  65. <Redirect from="/" to="/dashboard" />
  66. </Switch>
  67. </Suspense>
  68. </Container>
  69. </main>
  70. <AppAside fixed>
  71. <Suspense fallback={this.loading()}>
  72. <DefaultAside />
  73. </Suspense>
  74. </AppAside>
  75. </div>
  76. <AppFooter>
  77. <Suspense fallback={this.loading()}>
  78. <DefaultFooter />
  79. </Suspense>
  80. </AppFooter>
  81. </div>
  82. );
  83. }
  84. }
  85. export default DefaultLayout;