client/src/store/configureStore.js
changeset 12 48ddaa42b810
parent 3 3b5d37d84cfe
child 14 df6780e48eb5
--- a/client/src/store/configureStore.js	Wed May 31 17:28:12 2017 +0200
+++ b/client/src/store/configureStore.js	Wed May 31 17:51:54 2017 +0200
@@ -1,11 +1,49 @@
 import rootReducer from '../reducers';
-import {createStore} from 'redux';
+import { createStore, applyMiddleware } from 'redux';
+import { routerMiddleware } from 'react-router-redux';
 import Immutable from 'immutable';
 
-const storeInitialState = Immutable.Map({
-    notes: Immutable.List([])
-});
+const loadState = () => {
+  try {
+    const serializedState = localStorage.getItem('state');
+    if (!serializedState) {
+      return {};
+    }
+    return JSON.parse(serializedState);
+  } catch (err) {}
+}
+
+const saveState = (state) => {
+  try {
+    localStorage.setItem('state', JSON.stringify(state));
+  } catch (err) {}
+}
+
+const savedState = loadState();
 
-export default (initialState = storeInitialState) => {
-  return createStore(rootReducer, initialState);
+const defaultState = {
+  currentSession: null,
+  sessions: Immutable.List(savedState.sessions || []),
+  notes: Immutable.List(savedState.notes || []),
+  isAuthenticated: false,
 };
+
+const storeInitialState = Immutable.Map(defaultState);
+
+export default (history, initialState = storeInitialState) => {
+
+  const middleware = routerMiddleware(history);
+  const store = createStore(rootReducer, initialState, applyMiddleware(middleware));
+
+  store.subscribe(() => {
+    const state = store.getState().toJSON();
+    const stateToPersist = {
+      sessions: state.sessions,
+      notes: state.notes,
+    };
+
+    saveState(stateToPersist);
+  });
+
+  return store;
+};