Created
November 14, 2017 18:32
-
-
Save pitkane/7863c0eb4e35964e51a797fe8ceb6a3d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Create the store with asynchronously loaded reducers | |
*/ | |
import { createStore, applyMiddleware, compose } from 'redux'; | |
import { fromJS } from 'immutable'; | |
import { routerMiddleware } from 'react-router-redux'; | |
import createSagaMiddleware from 'redux-saga'; | |
import { persistStore, autoRehydrate } from 'redux-persist-immutable'; | |
import createReducer from './reducers'; | |
const sagaMiddleware = createSagaMiddleware(); | |
export default function configureStore(initialState = {}, history) { | |
// Create the store with two middlewares | |
// 1. sagaMiddleware: Makes redux-sagas work | |
// 2. routerMiddleware: Syncs the location/URL path to the state | |
const middlewares = [ | |
sagaMiddleware, | |
routerMiddleware(history), | |
]; | |
const enhancers = [ | |
applyMiddleware(...middlewares), | |
]; | |
// If Redux DevTools Extension is installed use it, otherwise use Redux compose | |
/* eslint-disable no-underscore-dangle */ | |
const composeEnhancers = | |
process.env.NODE_ENV !== 'production' && | |
typeof window === 'object' && | |
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? | |
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : compose; | |
/* eslint-enable */ | |
const store = createStore( | |
createReducer(), | |
fromJS(initialState), | |
composeEnhancers(...enhancers, autoRehydrate()) | |
); | |
// Extensions | |
store.runSaga = sagaMiddleware.run; | |
store.asyncReducers = {}; // Async reducer registry | |
persistStore(store, { whitelist: ['global', 'language'] }); | |
// Make reducers hot reloadable, see http://mxs.is/googmo | |
/* istanbul ignore next */ | |
if (module.hot) { | |
module.hot.accept('./reducers', () => { | |
import('./reducers').then((reducerModule) => { | |
const createReducers = reducerModule.default; | |
const nextReducers = createReducers(store.asyncReducers); | |
store.replaceReducer(nextReducers); | |
}); | |
}); | |
} | |
return store; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment