UNPKG

1.83 kBJavaScriptView Raw
1import { hot } from 'react-hot-loader'
2import React, { Component } from 'react'
3import { Router, withSiteData, onLoading } from 'react-static'
4import Routes from 'react-static-routes'
5import NProgress from 'nprogress'
6//
7import Sidebar from 'components/Sidebar'
8import 'styles/global'
9import Wrapper from './Wrapper'
10import defaultConfig from '../default.js'
11
12class App extends Component {
13 static defaultProps = {
14 config: defaultConfig,
15 }
16
17 state = {
18 sidebarIsOpen: true, // window ? window.innerWidth > 700 : true,
19 width: 500, // window && window.innerWidth,
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 // TODO: Debounce this
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
80export default hot(module)(withSiteData(App))