diff --git a/src/index.js b/src/index.js index d3f8abec8..19a78e48a 100644 --- a/src/index.js +++ b/src/index.js @@ -40,7 +40,7 @@ function requireAuth(nextState, replace) { render((
- + diff --git a/src/scenes/DocumentScene/DocumentScene.js b/src/scenes/DocumentScene/DocumentScene.js index 0d99ac3e5..87562055c 100644 --- a/src/scenes/DocumentScene/DocumentScene.js +++ b/src/scenes/DocumentScene/DocumentScene.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { PropTypes } from 'react'; import { toJS } from 'mobx'; import { Link, browserHistory } from 'react-router'; import { observer } from 'mobx-react'; @@ -21,13 +21,16 @@ const cx = classNames.bind(styles); import treeStyles from 'components/Tree/Tree.scss'; -@observer +@observer(['ui']) class DocumentScene extends React.Component { + static propTypes = { + ui: PropTypes.object.isRequired, + } + static store; state = { didScroll: false, - showSidebar: true, } constructor(props) { @@ -84,10 +87,6 @@ class DocumentScene extends React.Component { }; } - toggleSidebar = () => { - this.setState({ showSidebar: !this.state.showSidebar }); - } - renderNode = (node) => { return ( @@ -97,6 +96,11 @@ class DocumentScene extends React.Component { } render() { + const { + sidebar, + toggleSidebar, + } = this.props.ui; + const doc = this.store.document; const allowDelete = doc && doc.atlas.type === 'atlas' && doc.id !== doc.atlas.navigationTree.id; @@ -135,7 +139,7 @@ class DocumentScene extends React.Component { ) : ( - { this.store.isAtlas && this.state.showSidebar ? ( + { this.store.isAtlas && sidebar && (
- ) : null } + ) } - + onClick={ toggleSidebar } + />) } { this.store.updatingContent ? ( diff --git a/src/scenes/DocumentScene/DocumentScene.scss b/src/scenes/DocumentScene/DocumentScene.scss index 9163c1f68..499a016b1 100644 --- a/src/scenes/DocumentScene/DocumentScene.scss +++ b/src/scenes/DocumentScene/DocumentScene.scss @@ -19,7 +19,7 @@ top: 22px; left: 17px; height: 28px; - opacity: 0.5; + opacity: 0.15; &:hover { opacity: 1; diff --git a/src/stores/UiStore.js b/src/stores/UiStore.js new file mode 100644 index 000000000..d914f7df6 --- /dev/null +++ b/src/stores/UiStore.js @@ -0,0 +1,32 @@ +import { observable, action, computed } from 'mobx'; + +const UI_STORE = 'UI_STORE'; + +class UiStore { + @observable sidebar; + + /* Computed */ + + @computed get asJson() { + return JSON.stringify({ + sidebar: this.sidebar, + }); + } + + /* Actions */ + + @action toggleSidebar = () => { + this.sidebar = !this.sidebar; + }; + + constructor() { + // Rehydrate + const data = JSON.parse(localStorage.getItem(UI_STORE) || '{}'); + this.sidebar = data.sidebar; + } +}; + +export default UiStore; +export { + UI_STORE, +}; diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js index ac156095c..cb26ad540 100644 --- a/src/stores/UserStore.js +++ b/src/stores/UserStore.js @@ -64,7 +64,7 @@ class UserStore { constructor() { // Rehydrate - const data = JSON.parse(localStorage.getItem(USER_STORE)) || {}; + const data = JSON.parse(localStorage.getItem(USER_STORE) || '{}'); this.user = data.user; this.team = data.team; this.token = data.token; diff --git a/src/stores/index.js b/src/stores/index.js index 88effef75..df8cddcf7 100644 --- a/src/stores/index.js +++ b/src/stores/index.js @@ -1,13 +1,16 @@ import UserStore, { USER_STORE } from './UserStore'; -import { autorun } from 'mobx'; +import UiStore, { UI_STORE } from './UiStore'; +import { autorun, toJS } from 'mobx'; const stores = { user: new UserStore(), + ui: new UiStore(), }; -// Persist store to localStorage +// Persist stores to localStorage autorun(() => { localStorage.setItem(USER_STORE, stores.user.asJson); + localStorage.setItem(UI_STORE, stores.ui.asJson); }); -export default stores; \ No newline at end of file +export default stores;