github.com/stampzilla/stampzilla-go@v2.0.0-rc9+incompatible/nodes/stampzilla-server/web/src/store.js (about) 1 import { applyMiddleware, compose, createStore } from 'redux'; 2 import Immutable from 'immutable'; 3 import ReduxThunk from 'redux-thunk'; 4 import persistState from 'redux-localstorage'; 5 6 import rootReducer from './ducks'; 7 import rules from './middlewares/rules'; 8 import schedules from './middlewares/schedules'; 9 import savedstates from './middlewares/savedstates'; 10 11 const middleware = [ReduxThunk, rules, schedules, savedstates]; 12 13 const preloadedState = undefined; 14 15 const composeEnhancers = 16 (typeof window !== 'undefined' && 17 window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || // eslint-disable-line no-underscore-dangle 18 compose; 19 20 const localStorageConfig = { 21 slicer: paths => state => 22 (paths ? state.filter((v, k) => paths.indexOf(k) > -1) : state), 23 serialize: subset => JSON.stringify(subset.toJS()), 24 deserialize: serializedData => 25 Immutable.fromJS(JSON.parse(serializedData)) || Immutable.Map(), 26 merge: (initialState, persistedState) => 27 (initialState ? initialState.mergeDeep(persistedState) : persistedState), 28 }; 29 30 const newStore = (initialState, extraMiddlewares = []) => 31 createStore( 32 rootReducer, 33 initialState, 34 composeEnhancers( 35 applyMiddleware(...extraMiddlewares, ...middleware), 36 persistState(['app'], localStorageConfig), 37 ), 38 ); 39 const store = newStore(preloadedState); 40 41 export default store; 42 export { newStore };