redux-fluorine
Version:
A Redux enhancer to manage groups of actions as observables (agendas)
105 lines (73 loc) • 2.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
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; };
exports.default = createAgendaEnhancer;
var _symbolObservable = require('symbol-observable');
var _symbolObservable2 = _interopRequireDefault(_symbolObservable);
var _isObservable = require('./util/isObservable');
var _isObservable2 = _interopRequireDefault(_isObservable);
var _executeAgenda = require('./util/executeAgenda');
var _executeAgenda2 = _interopRequireDefault(_executeAgenda);
var _wrapStateReducer = require('./util/wrapStateReducer');
var _wrapStateReducer2 = _interopRequireDefault(_wrapStateReducer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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 ((0, _isObservable2.default)(action)) {
return (0, _executeAgenda2.default)(action, store);
}
return store.dispatch(action);
}
function replaceReducer(reducer) {
store.replaceReducer((0, _wrapStateReducer2.default)(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[_symbolObservable2.default] = _ref2, _ref3;
}
return _extends({}, store, (_extends2 = {
preAgendaStore: store,
dispatch: dispatch,
getState: getState,
replaceReducer: replaceReducer
}, _extends2[_symbolObservable2.default] = observable, _extends2));
}
function _ref4(createStore) {
return function (reducer, preloadedState, enhancer) {
// Pass wrapped reducer to `createStore` instead
var wrappedReducer = (0, _wrapStateReducer2.default)(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);
};
}
function createAgendaEnhancer() {
return _ref4;
}