import { createStore, applyMiddleware, compose } from "redux"; import { browserHistory } from "react-router"; import { syncHistoryWithStore, routerMiddleware } from "react-router-redux"; import Immutable from "seamless-immutable"; import createReducer from "./reducers"; import createSagaMiddleware from "redux-saga"; import rootSaga from "./sagas"; import { makeSelectLocationState } from "./redux/app"; export default function configureStore(initialState = {}) { const sagaMiddleware = createSagaMiddleware(); const middlewares = [sagaMiddleware, routerMiddleware(browserHistory)]; const enhancers = [applyMiddleware(...middlewares)]; const composeEnhancers = process.env.NODE_ENV !== "production" && typeof window === "object" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : compose; const store = createStore( createReducer(), Immutable.from(initialState), composeEnhancers(...enhancers) ); sagaMiddleware.run(rootSaga, browserHistory); return { store, history: syncHistoryWithStore(browserHistory, store, { selectLocationState: makeSelectLocationState() }) }; }