src/stores/index.js
import createSagaMiddleware from 'redux-saga';
import storage from 'redux-persist/lib/storage';
import { all } from 'redux-saga/effects';
import { combineReducers, createStore, applyMiddleware } from 'redux';
import { persistStore, persistReducer } from 'redux-persist';
import settings from './settings';
import ui from './ui';
/**
 * The Redux Saga middleware.
 * @type {Object}
 */
const sagaMiddleware = createSagaMiddleware();
/**
 * The Redux store.
 * @type {Object}
 */
const store = createStore(
  persistReducer({
    key: 'settings',
    version: 1,
    whitelist: ['settings'],
    storage,
  }, combineReducers({
    settings: settings.reducer,
    ui: ui.reducer,
  })),
  window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
  applyMiddleware(sagaMiddleware),
);
sagaMiddleware.run(function* rootSaga() {
  yield all([
    ...settings.sagas,
    ...ui.sagas,
  ]);
});
/**
 * The persistor object from redux-persist.
 * @type {Object}
 */
export const persistor = persistStore(store);
export default store;