text: import { createStore, applyMiddleware, compose } from 'redux';
  import thunk from 'redux-thunk';
  import { hashHistory } from 'react-router-dom';
  import { createBrowserHistory } from 'history';
  import { routerMiddleware, push } from 'react-router-redux';
  import { createLogger } from 'redux-logger';
  import rootReducer from '../reducers';
  import * as counterActions from '../actions/counter';
  import type { counterStateType } from '../reducers/counter';
  
  const history = createBrowserHistory();
  
  const configureStore = (initialState: ?counterStateType) => {
    // Redux Configuration
    const middleware = [];
    const enhancers = [];
  
    // Thunk Middleware
    middleware.push(thunk);
  
    // Logging Middleware
    const logger = createLogger({
      level: 'info',
      collapsed: true
    });
    middleware.push(logger);
  
    // Router Middleware
    const router = routerMiddleware(hashHistory);
    middleware.push(router);
  
    // Redux DevTools Configuration
    const actionCreators = {
      ...counterActions,
      push
    };
    // If Redux DevTools Extension is installed use it, otherwise use Redux compose
    /* eslint-disable no-underscore-dangle */
    const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
      ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
          // Options: http://zalmoxisus.github.io/redux-devtools-extension/API/Arguments.html
          actionCreators
        })
      : compose;
    /* eslint-enable no-underscore-dangle */
  
    // Apply Middleware & Compose Enhancers
    enhancers.push(applyMiddleware(...middleware));
    const enhancer = composeEnhancers(...enhancers);
  
    // Create Store
    const store = createStore(rootReducer, initialState, enhancer);
  
    if (module.hot) {
      module.hot.accept(
        '../reducers',
        () => store.replaceReducer(require('../reducers')) // eslint-disable-line global-require
      );
    }
  
    return store;
  };
  
  export default { configureStore, history };
  