UNPKG

1.46 kBJavaScriptView Raw
1import { createStore, applyMiddleware, compose } from 'redux';
2import { routerMiddleware } from 'react-router-redux';
3import thunk from 'redux-thunk';
4import { createLogger } from 'redux-logger';
5import rootReducer from '../reducers';
6import { isClient, isDebug } from '../../config/app';
7
8/*
9 * @param {Object} initial state to bootstrap our stores with for server-side rendering
10 * @param {History Object} a history object. We use `createMemoryHistory` for server-side rendering,
11 * while using browserHistory for client-side
12 * rendering.
13 */
14export default function configureStore(initialState, history) {
15 // Installs hooks that always keep react-router and redux store in sync
16 const middleware = [thunk, routerMiddleware(history)];
17 let store;
18
19 if (isClient && isDebug) {
20 middleware.push(createLogger());
21 store = createStore(rootReducer, initialState, compose(
22 applyMiddleware(...middleware),
23 typeof window === 'object' && typeof window.devToolsExtension !== 'undefined' ? window.devToolsExtension() : f => f
24 ));
25 } else {
26 store = createStore(rootReducer, initialState, compose(applyMiddleware(...middleware), f => f));
27 }
28
29 if (module.hot) {
30 // Enable Webpack hot module replacement for reducers
31 module.hot.accept('reducers', () => {
32 const nextReducer = require('../reducers');
33
34 store.replaceReducer(nextReducer);
35 });
36 }
37
38 return store;
39}