text: /**
   * Create the store with dynamic reducers
   */
  
  import { createStore, applyMiddleware, compose } from 'redux';
  import { persistStore } from 'redux-persist';
  import { routerMiddleware } from 'react-router-redux';
  import createSagaMiddleware from 'redux-saga';
  import reduxCatch from 'redux-catch';
  import { handleUnexpectedException } from 'utils/exceptionHelper';
  import createReducer from './reducers';
  import logger from 'redux-logger';
  
  const sagaMiddleware = createSagaMiddleware(
    {
      onError: (error, errorInfo) => { // will catch all un-handled errors in redux-saga middleware
        handleUnexpectedException(error, errorInfo);
      }
    }
  );
  
  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 = [
      // createSentryMiddleware(Sentry, {}),
      reduxCatch((error, errorInfo) => {
        handleUnexpectedException(error, errorInfo);
      }),
      sagaMiddleware,
      routerMiddleware(history),
      logger
    ];
  
    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__({
          // 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(),
      initialState,
      composeEnhancers(...enhancers)
    );
  
    store.persistor = persistStore(store);
  
    // 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));
        store.dispatch({ type: '@@REDUCER_INJECTED' });
        store.persistor.persist();
      });
    }
  
    return { store };
  }
  