summaryrefslogtreecommitdiffstats
path: root/front/odiparpack/app/redux/configureStore.js
diff options
context:
space:
mode:
Diffstat (limited to 'front/odiparpack/app/redux/configureStore.js')
-rw-r--r--front/odiparpack/app/redux/configureStore.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/front/odiparpack/app/redux/configureStore.js b/front/odiparpack/app/redux/configureStore.js
new file mode 100644
index 0000000..49a6b7b
--- /dev/null
+++ b/front/odiparpack/app/redux/configureStore.js
@@ -0,0 +1,53 @@
+/**
+ * Create the store with dynamic reducers
+ */
+
+import { createStore, applyMiddleware, compose } from 'redux';
+import { fromJS } from 'immutable';
+import { routerMiddleware } from 'connected-react-router/immutable';
+import createSagaMiddleware from 'redux-saga';
+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, indent */
+ const composeEnhancers = process.env.NODE_ENV !== 'production'
+ && typeof window === 'object'
+ && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
+ // TODO Try to remove when `react-router-redux` is out of beta, LOCATION_CHANGE should not be fired more than once after hot reloading
+ // Prevent recomputing reducers for `replaceReducer`
+ shouldHotReload: false,
+ })
+ : compose;
+ /* eslint-enable */
+ const store = createStore(
+ createReducer(),
+ fromJS(initialState),
+ composeEnhancers(...enhancers),
+ );
+
+ // Extensions
+ store.runSaga = sagaMiddleware.run;
+ store.injectedReducers = {}; // Reducer registry
+ store.injectedSagas = {}; // Saga registry
+
+ // Make reducers hot reloadable, see http://mxs.is/googmo
+ /* istanbul ignore next */
+ if (module.hot) {
+ module.hot.accept('./reducers', () => {
+ store.replaceReducer(createReducer(store.injectedReducers));
+ });
+ }
+
+ return store;
+}