| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { applyMiddleware, createStore } from 'redux';
- import createSagaMiddleware from 'redux-saga';
- import { createLogger } from 'redux-logger';
- import { rootReducer } from 'reducers';
- import { rootSaga } from 'sagas';
- const SKIP_LOG_ACTIONS = (process.env.SKIP_LOG_ACTIONS || '').split(',');
- export function getStoreMiddleware(__DEV__) {
- const middleware = [rootReducer];
- if (__DEV__) {
- const devToolsMiddleware = window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__({
- actionsBlacklist: SKIP_LOG_ACTIONS
- });
- middleware.push(devToolsMiddleware);
- }
- return middleware;
- }
- export function makeCreateStoreWithMiddleware(__DEV__, sagaMiddleware) {
- const middleware = [sagaMiddleware];
- if (__DEV__) {
- const logger = createLogger({
- collapsed: true,
- predicate: (getState, action) => !SKIP_LOG_ACTIONS.includes(action.type)
- });
- middleware.push(logger);
- }
- return applyMiddleware(...middleware)(createStore);
- }
- function createCustomStore() {
- const __DEV__ = process.env.NODE_ENV === 'development';
- const __TEST__ = process.env.NODE_ENV === 'test';
- if (__TEST__) {
- return createStore(rootReducer);
- }
- const sagaMiddleware = createSagaMiddleware();
- const createStoreWithMiddleware = makeCreateStoreWithMiddleware(__DEV__, sagaMiddleware);
- const store = createStoreWithMiddleware(...getStoreMiddleware(__DEV__));
- let sagaTask = sagaMiddleware.run(function *getSagas() {
- yield rootSaga();
- });
- if (__DEV__ && module.hot) {
- module.hot.accept('./reducers', () => {
- // eslint-disable-next-line global-require
- store.replaceReducer(require('./reducers').rootReducer);
- });
- module.hot.accept('./sagas', () => {
- // eslint-disable-next-line global-require
- const newRootSaga = require('./sagas').rootSaga;
- sagaTask.cancel();
- sagaTask.done.then(() => {
- sagaTask = sagaMiddleware.run(function *replacedSaga() {
- yield newRootSaga();
- });
- });
- });
- }
- return store;
- }
- export { createCustomStore as createStore };
|