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 }; |