client/src/store/configureStore.js
changeset 12 48ddaa42b810
parent 3 3b5d37d84cfe
child 14 df6780e48eb5
equal deleted inserted replaced
11:6fb4de54acea 12:48ddaa42b810
     1 import rootReducer from '../reducers';
     1 import rootReducer from '../reducers';
     2 import {createStore} from 'redux';
     2 import { createStore, applyMiddleware } from 'redux';
       
     3 import { routerMiddleware } from 'react-router-redux';
     3 import Immutable from 'immutable';
     4 import Immutable from 'immutable';
     4 
     5 
     5 const storeInitialState = Immutable.Map({
     6 const loadState = () => {
     6     notes: Immutable.List([])
     7   try {
     7 });
     8     const serializedState = localStorage.getItem('state');
       
     9     if (!serializedState) {
       
    10       return {};
       
    11     }
       
    12     return JSON.parse(serializedState);
       
    13   } catch (err) {}
       
    14 }
     8 
    15 
     9 export default (initialState = storeInitialState) => {
    16 const saveState = (state) => {
    10   return createStore(rootReducer, initialState);
    17   try {
       
    18     localStorage.setItem('state', JSON.stringify(state));
       
    19   } catch (err) {}
       
    20 }
       
    21 
       
    22 const savedState = loadState();
       
    23 
       
    24 const defaultState = {
       
    25   currentSession: null,
       
    26   sessions: Immutable.List(savedState.sessions || []),
       
    27   notes: Immutable.List(savedState.notes || []),
       
    28   isAuthenticated: false,
    11 };
    29 };
       
    30 
       
    31 const storeInitialState = Immutable.Map(defaultState);
       
    32 
       
    33 export default (history, initialState = storeInitialState) => {
       
    34 
       
    35   const middleware = routerMiddleware(history);
       
    36   const store = createStore(rootReducer, initialState, applyMiddleware(middleware));
       
    37 
       
    38   store.subscribe(() => {
       
    39     const state = store.getState().toJSON();
       
    40     const stateToPersist = {
       
    41       sessions: state.sessions,
       
    42       notes: state.notes,
       
    43     };
       
    44 
       
    45     saveState(stateToPersist);
       
    46   });
       
    47 
       
    48   return store;
       
    49 };