stapp-select
Version:
Select module for stapp - modular state manager
29 lines • 1.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var stapp_1 = require("stapp");
var constants_1 = require("./constants");
exports.select = function (_a) {
var name = _a.name, selector = _a.selector, reactOn = _a.reactOn, _b = _a.reactWith, reactWith = _b === void 0 ? [] : _b;
var _c;
var selected = stapp_1.createEvent(constants_1.SELECT + "/" + name + ": State was selected");
var selectReducer = stapp_1.createReducer(null).on(selected, function (state, selectResult) { return selectResult || state; });
var eventFilter = stapp_1.select(reactOn.concat(stapp_1.initEvent));
var events = [selected].concat(reactWith);
var reactEpic = function (event$, _, _a) {
var getState = _a.getState;
return event$.pipe(operators_1.filter(eventFilter), operators_1.map(function () { return selector(getState()); }), operators_1.mergeMap(function (result) {
return rxjs_1.from(events.map(function (eventCreator) { return eventCreator(result); }));
}));
};
return {
name: constants_1.SELECT + "/" + name,
state: (_c = {},
_c[name] = selectReducer,
_c),
epic: reactEpic,
useGlobalObservableConfig: false
};
};
//# sourceMappingURL=select.js.map