This repository has been archived by the owner on Oct 3, 2018. It is now read-only.
/
configureStore.js
70 lines (56 loc) · 1.63 KB
/
configureStore.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { createStore, applyMiddleware } from 'redux';
import createHistory from 'history/createBrowserHistory';
import createSagaMiddleware from 'redux-saga';
import { connectRouter, routerMiddleware } from 'connected-react-router/immutable';
import { createLogger } from 'redux-logger';
import Immutable from 'immutable';
import rootReducer from './rootReducer';
import rootSaga from '../sagas/rootSaga';
const stateTransformer = (state) => {
if (Immutable.Iterable.isIterable(state)) return state.toJS();
return state;
};
const history = createHistory();
const initialState = Immutable.Map();
const sagaMiddleware = createSagaMiddleware();
const loggerMiddleware = createLogger({
collapsed: true,
stateTransformer
});
const configureStoreProduction = () => {
const middlewares = [
sagaMiddleware,
routerMiddleware(history)
];
const store = createStore(
connectRouter(history)(rootReducer),
initialState,
applyMiddleware(...middlewares)
);
sagaMiddleware.run(rootSaga);
return store;
};
const configureStoreDev = () => {
const middlewares = [
sagaMiddleware,
routerMiddleware(history),
loggerMiddleware
];
const store = createStore(
connectRouter(history)(rootReducer),
initialState,
applyMiddleware(...middlewares)
);
if (module.hot) {
module.hot.accept('./rootReducer', () => {
const nextReducer = require('./rootReducer').default;
store.replaceReducer(nextReducer);
});
}
sagaMiddleware.run(rootSaga);
return store;
};
const store = process.env.NODE_ENV === 'development'
? configureStoreDev()
: configureStoreProduction();
export { store, history };