UNPKG

redux-fluorine

Version:

A Redux enhancer to manage groups of actions as observables (agendas)

84 lines (63 loc) 2.21 kB
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; import symbolObservable from 'symbol-observable'; import isObservable from './util/isObservable'; import executeAgenda from './util/executeAgenda'; import wrapStateReducer from './util/wrapStateReducer'; function _ref2() { return this; } function wrapStore(store) { var _extends2; function getState() { var _store$getState = store.getState(); var state = _store$getState.state; return state; } function dispatch(action) { if (isObservable(action)) { return executeAgenda(action, store); } return store.dispatch(action); } function replaceReducer(reducer) { store.replaceReducer(wrapStateReducer(reducer)); } function _ref(observer) { if (typeof observer !== 'object') { throw new TypeError('Expected the observer to be an object.'); } function observeState() { observer.next && observer.next(getState()); } observeState(); var unsubscribe = store.subscribe(observeState); return { unsubscribe: unsubscribe }; } function observable() { var _ref3; return _ref3 = { subscribe: _ref }, _ref3[symbolObservable] = _ref2, _ref3; } return _extends({}, store, (_extends2 = { preAgendaStore: store, dispatch: dispatch, getState: getState, replaceReducer: replaceReducer }, _extends2[symbolObservable] = observable, _extends2)); } function _ref4(createStore) { return function (reducer, preloadedState, enhancer) { // Pass wrapped reducer to `createStore` instead var wrappedReducer = wrapStateReducer(reducer, preloadedState); var store = createStore(wrappedReducer, undefined, enhancer); if (store.preAgendaStore) { // Check whether this method was applied twice throw new Error('createAgendaEnhancer: The Redux Fluorine enhancer should only be applied once.'); } return wrapStore(store); }; } export default function createAgendaEnhancer() { return _ref4; }