Home Reference Source

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;