App/Store/Store.js
import { createStore, applyMiddleware, compose } from 'redux';
import { autoRehydrate } from 'redux-persist';
import createLogger from 'redux-logger';
import rootReducer from '../Reducers/';
import Config from '../Config/DebugSettings';
import createSagaMiddleware from 'redux-saga';
import sagas from '../Sagas/';
import R from 'ramda';
import RehydrationServices from '../Services/RehydrationServices';
import ReduxPersist from '../Config/ReduxPersist';
// the logger master switch
const USE_LOGGING = Config.reduxLogging;
// silence these saga-based messages
const SAGA_LOGGING_BLACKLIST = ['EFFECT_TRIGGERED', 'EFFECT_RESOLVED', 'EFFECT_REJECTED', 'persist/REHYDRATE'];
// create the logger
const logger = createLogger({
predicate: (getState, { type }) => USE_LOGGING && R.not(R.contains(type, SAGA_LOGGING_BLACKLIST))
});
let middleware = [];
const sagaMiddleware = createSagaMiddleware();
middleware.push(sagaMiddleware);
// Don't ship these
if (__DEV__) {
middleware.push(logger);
}
// a function which can create our store and auto-persist the data
export default () => {
let store = {};
// Add rehydrate enhancer if ReduxPersist is active
if (ReduxPersist.active) {
const enhancers = compose(
applyMiddleware(...middleware),
autoRehydrate()
);
store = createStore(
rootReducer,
enhancers
);
// configure persistStore and check reducer version number
RehydrationServices.updateReducers(store);
} else {
const enhancers = compose(
applyMiddleware(...middleware)
);
store = createStore(
rootReducer,
enhancers
);
}
// run sagas
sagaMiddleware.run(sagas);
return store;
};