1 | import { hot } from 'react-hot-loader'
|
2 | import React, { Component } from 'react'
|
3 | import { Router, withSiteData, onLoading } from 'react-static'
|
4 | import Routes from 'react-static-routes'
|
5 | import NProgress from 'nprogress'
|
6 |
|
7 | import Sidebar from 'components/Sidebar'
|
8 | import 'styles/global'
|
9 | import Wrapper from './Wrapper'
|
10 | import defaultConfig from '../default.js'
|
11 |
|
12 | class App extends Component {
|
13 | static defaultProps = {
|
14 | config: defaultConfig,
|
15 | }
|
16 |
|
17 | state = {
|
18 | sidebarIsOpen: true,
|
19 | width: 500,
|
20 | }
|
21 |
|
22 | componentDidMount () {
|
23 | onLoading(loading => {
|
24 | if (loading) {
|
25 | NProgress.start()
|
26 | } else {
|
27 | NProgress.done()
|
28 | }
|
29 | })
|
30 |
|
31 | if (window) {
|
32 | window.addEventListener('resize', this.updateDimensions)
|
33 | this.setState({
|
34 | width: window.innerWidth,
|
35 | sidebarIsOpen: window.innerWidth > 700,
|
36 | })
|
37 | }
|
38 | }
|
39 |
|
40 | componentWillUnmount () {
|
41 | if (window) {
|
42 | window.removeEventListener('resize', this.updateDimensions)
|
43 | }
|
44 | }
|
45 |
|
46 | onSidebarToggle = () => {
|
47 | this.setState({
|
48 | sidebarIsOpen: !this.state.sidebarIsOpen,
|
49 | })
|
50 | }
|
51 |
|
52 | updateDimensions = e => {
|
53 |
|
54 | this.setState({
|
55 | width: e.target.innerWidth,
|
56 | sidebarIsOpen: e.target.innerWidth > 700,
|
57 | })
|
58 | }
|
59 |
|
60 | render () {
|
61 | const { tree, config } = this.props
|
62 | const { sidebarIsOpen } = this.state
|
63 |
|
64 | return (
|
65 | <Router scrollToHashOffset={-40}>
|
66 | <Wrapper sidebarIsOpen={sidebarIsOpen}>
|
67 | <Sidebar
|
68 | tree={tree}
|
69 | config={config}
|
70 | sidebarIsOpen={sidebarIsOpen}
|
71 | onSidebarToggle={this.onSidebarToggle}
|
72 | />
|
73 | <Routes />
|
74 | </Wrapper>
|
75 | </Router>
|
76 | )
|
77 | }
|
78 | }
|
79 |
|
80 | export default hot(module)(withSiteData(App))
|