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;