@jbt/ng-rx
Version:
Configurable ngrx
243 lines • 16.2 kB
JavaScript
;
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
Object.defineProperty(exports, "__esModule", { value: true });
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var index_1 = require("../../rxjs/index");
var effect_type_1 = require("../effect-type");
/**
* ***************************************************
*
* EffectsConfigurator
*
* ****************************************************
*/
var /**
* ***************************************************
*
* EffectsConfigurator
*
* ****************************************************
*/
EffectsConfigurator = /** @class */ (function () {
function EffectsConfigurator(effectsRepository, actions$, store) {
var _this = this;
var _a;
this._setupMethodMap = (_a = {},
_a[effect_type_1.EFFECT_TYPE.SEQUENCE] = this._setUpSequentialEffect,
_a[effect_type_1.EFFECT_TYPE.PARALLEL] = this._setUpParallelEffect,
_a[effect_type_1.EFFECT_TYPE.ACTION] = this._setUpActionEffect,
_a);
this._effects = [];
this._effectsRepository = effectsRepository;
this._effect = actions$.pipe(index_1.mergeHotStreamHandlerArray(this._effects), operators_1.filter((/**
* @param {?} action
* @return {?}
*/
function (action) { return _this._isAction(action); })));
this._effect.subscribe((/**
* @param {?} action
* @return {?}
*/
function (action) {
store.dispatch(action);
}));
}
/**
* @param {?=} effectsConfig
* @return {?}
*/
EffectsConfigurator.prototype.addEffects = /**
* @param {?=} effectsConfig
* @return {?}
*/
function (effectsConfig) {
var _this = this;
if (effectsConfig === void 0) { effectsConfig = []; }
effectsConfig.forEach((/**
* @param {?} config
* @return {?}
*/
function (config) {
/** @type {?} */
var method = _this._setupMethodMap[config.type].call(_this, config);
_this._effects.push(method);
}));
};
/**
* @private
* @param {?} action
* @return {?}
*/
EffectsConfigurator.prototype._isAction = /**
* @private
* @param {?} action
* @return {?}
*/
function (action) {
return action && action.type && (typeof action.type === 'string');
};
/**
* @private
* @param {?} config
* @return {?}
*/
EffectsConfigurator.prototype._setUpSequentialEffect = /**
* @private
* @param {?} config
* @return {?}
*/
function (config) {
var _this = this;
return (/**
* @param {?} action
* @return {?}
*/
function (action) { return rxjs_1.of(action).pipe(operators_1.filter((/**
* @param {?} action
* @return {?}
*/
function (action) { return _this._filterAction(action, config); })), operators_1.concatMap((/**
* @param {?} action
* @return {?}
*/
function (action) { return config.handlers.map((/**
* @param {?} handler
* @return {?}
*/
function (handler) {
/** @type {?} */
var handlerFn = _this._getHandler(handler, config);
return handlerFn(action, config);
})); })), operators_1.concatAll()); });
};
/**
* @private
* @param {?} config
* @return {?}
*/
EffectsConfigurator.prototype._setUpParallelEffect = /**
* @private
* @param {?} config
* @return {?}
*/
function (config) {
var _this = this;
return (/**
* @param {?} action
* @return {?}
*/
function (action) { return rxjs_1.of(action).pipe(operators_1.filter((/**
* @param {?} action
* @return {?}
*/
function (action) { return _this._filterAction(action, config); })), operators_1.mergeMap((/**
* @param {?} action
* @return {?}
*/
function (action) { return config.handlers.map((/**
* @param {?} handler
* @return {?}
*/
function (handler) {
/** @type {?} */
var handlerFn = _this._getHandler(handler, config);
return handlerFn(action, config);
})); })), operators_1.mergeAll()); });
};
/**
* @private
* @param {?} config
* @return {?}
*/
EffectsConfigurator.prototype._setUpActionEffect = /**
* @private
* @param {?} config
* @return {?}
*/
function (config) {
var _this = this;
return (/**
* @param {?} action
* @return {?}
*/
function (action) { return rxjs_1.of(action).pipe(operators_1.filter((/**
* @param {?} action
* @return {?}
*/
function (action) { return _this._filterAction(action, config); })), operators_1.map((/**
* @param {?} action
* @return {?}
*/
function (action) {
return {
type: config.result,
payload: action['payload']
};
}))); });
};
/**
* @private
* @param {?} action
* @param {?} effectsConfig
* @return {?}
*/
EffectsConfigurator.prototype._filterAction = /**
* @private
* @param {?} action
* @param {?} effectsConfig
* @return {?}
*/
function (action, effectsConfig) {
/** @type {?} */
var isCause = effectsConfig.causes.indexOf(action.type) > -1;
/** @type {?} */
var isWildcard = effectsConfig.causes.indexOf('*') > -1;
return isWildcard || isCause;
};
/**
* @private
* @param {?} handler
* @param {?} config
* @return {?}
*/
EffectsConfigurator.prototype._getHandler = /**
* @private
* @param {?} handler
* @param {?} config
* @return {?}
*/
function (handler, config) {
return (typeof handler === 'function')
? handler
: this._effectsRepository.get(handler);
};
return EffectsConfigurator;
}());
exports.EffectsConfigurator = EffectsConfigurator;
if (false) {
/**
* @type {?}
* @private
*/
EffectsConfigurator.prototype._setupMethodMap;
/**
* @type {?}
* @private
*/
EffectsConfigurator.prototype._effectsRepository;
/**
* @type {?}
* @private
*/
EffectsConfigurator.prototype._effect;
/**
* @type {?}
* @private
*/
EffectsConfigurator.prototype._effects;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0cy1jb25maWd1cmF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AamJ0L25nLXJ4LyIsInNvdXJjZXMiOlsibGliL2ludGVybmFscy9lZmZlY3RzL2NvbmZpZ3VyYXRvci9lZmZlY3RzLWNvbmZpZ3VyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2QkFBMEI7QUFDMUIsNENBQXVGO0FBS3ZGLDBDQUE4RDtBQUU5RCw4Q0FBNkM7Ozs7Ozs7O0FBVTdDOzs7Ozs7OztJQWFJLDZCQUNJLGlCQUFvQyxFQUNwQyxRQUFpQixFQUNqQixLQUFpQjtRQUhyQixpQkFnQkM7O1FBM0JPLG9CQUFlO1lBQ25CLEdBQUMseUJBQVcsQ0FBQyxRQUFRLElBQUcsSUFBSSxDQUFDLHNCQUFzQjtZQUNuRCxHQUFDLHlCQUFXLENBQUMsUUFBUSxJQUFHLElBQUksQ0FBQyxvQkFBb0I7WUFDakQsR0FBQyx5QkFBVyxDQUFDLE1BQU0sSUFBSyxJQUFJLENBQUMsa0JBQWtCO2dCQUNqRDtRQUtNLGFBQVEsR0FBZSxFQUFFLENBQUM7UUFROUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDO1FBRTVDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FDeEIsa0NBQTBCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN6QyxrQkFBTTs7OztRQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsS0FBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBdEIsQ0FBc0IsRUFBRSxDQUM1QyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTOzs7O1FBQUUsVUFBQyxNQUFXO1lBQ2hDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7OztJQUVNLHdDQUFVOzs7O0lBQWpCLFVBQWtCLGFBQXdDO1FBQTFELGlCQU1DO1FBTmlCLDhCQUFBLEVBQUEs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QyxHQUFHLENBQUMsQ0FBQzs7WUFDeEQsVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6RCxPQUFPLFVBQVUsSUFBSSxPQUFPLENBQUM7SUFDakMsQ0FBQzs7Ozs7OztJQUVPLHlDQUFXOzs7Ozs7SUFBbkIsVUFBb0IsT0FBMEIsRUFBRSxNQUFXO1FBRXZELE9BQU8sQ0FBRSxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUU7WUFDcEMsQ0FBQyxDQUFDLE9BQU87WUFDVCxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0wsMEJBQUM7QUFBRCxDQUFDLEFBckdELElBcUdDO0FBckdZLGtEQUFtQjs7Ozs7O0lBRTVCLDhDQUlFOzs7OztJQUVGLGlEQUE4Qzs7Ozs7SUFFOUMsc0NBQXFCOzs7OztJQUNyQix1Q0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29uY2F0QWxsLCBjb25jYXRNYXAsIGZpbHRlciwgbWFwLCBtZXJnZUFsbCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucyB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuXG5pbXBvcnQgeyBtZXJnZUhvdFN0cmVhbUhhbmRsZXJBcnJheSB9IGZyb20gJy4uLy4uL3J4anMvaW5kZXgnO1xuXG5pbXBvcnQgeyBFRkZFQ1RfVFlQRSB9IGZyb20gJy4uL2VmZmVjdC10eXBlJztcbmltcG9ydCB7IEVmZmVjdENvbmZpZ3VyYXRpb24sIEVmZmVjdHNDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vZWZmZWN0cy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IEVmZmVjdHNSZXBvc2l0b3J5IH0gZnJvbSAnLi4vZWZmZWN0cy1yZXBvc2l0b3J5JztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICpcbiAqIEVmZmVjdHNDb25maWd1cmF0b3JcbiAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5leHBvcnQgY2xhc3MgRWZmZWN0c0NvbmZpZ3VyYXRvciB7XG5cbiAgICBwcml2YXRlIF9zZXR1cE1ldGhvZE1hcDogYW55ID0ge1xuICAgICAgICBbRUZGRUNUX1RZUEUuU0VRVUVOQ0VdOiB0aGlzLl9zZXRVcFNlcXVlbnRpYWxFZmZlY3QsXG4gICAgICAgIFtFRkZFQ1RfVFlQRS5QQVJBTExFTF06IHRoaXMuX3NldFVwUGFyYWxsZWxFZmZlY3QsXG4gICAgICAgIFtFRkZFQ1RfVFlQRS5BQ1RJT04gIF06IHRoaXMuX3NldFVwQWN0aW9uRWZmZWN0XG4gICAgfTtcblxuICAgIHByaXZhdGUgX2VmZmVjdHNSZXBvc2l0b3J5OiBFZmZlY3RzUmVwb3NpdG9yeTtcblxuICAgIHByaXZhdGUgX2VmZmVjdDogYW55O1xuICAgIHByaXZhdGUgX2VmZmVjdHM6IEZ1bmN0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlZmZlY3RzUmVwb3NpdG9yeTogRWZmZWN0c1JlcG9zaXRvcnksXG4gICAgICAgIGFjdGlvbnMkOiBBY3Rpb25zLFxuICAgICAgICBzdG9yZTogU3RvcmU8YW55PlxuICAgKSB7XG5cbiAgICAgICAgdGhpcy5fZWZmZWN0c1JlcG9zaXRvcnkgPSBlZmZlY3RzUmVwb3NpdG9yeTtcblxuICAgICAgICB0aGlzLl9lZmZlY3QgPSBhY3Rpb25zJC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VIb3RTdHJlYW1IYW5kbGVyQXJyYXkodGhpcy5fZWZmZWN0cyksXG4gICAgICAgICAgICBmaWx0ZXIoYWN0aW9uID0+IHRoaXMuX2lzQWN0aW9uKGFjdGlvbikgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2VmZmVjdC5zdWJzY3JpYmUoIChhY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEVmZmVjdHMoZWZmZWN0c0NvbmZpZzogRWZmZWN0c0NvbmZpZ3VyYXRpb24gPSBbXSk6IGFueSB7XG5cbiAgICAgICAgZWZmZWN0c0NvbmZpZy5mb3JFYWNoKCBjb25maWcgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5fc2V0dXBNZXRob2RNYXBbY29uZmlnLnR5cGVdLmNhbGwodGhpcywgY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuX2VmZmVjdHMucHVzaCggbWV0aG9kICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzQWN0aW9uKGFjdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgJiYgKHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gJ3N0cmluZycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFVwU2VxdWVudGlhbEVmZmVjdChjb25maWc6IEVmZmVjdENvbmZpZ3VyYXRpb24pOiBGdW5jdGlvbiB7XG5cbiAgICAgICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT4gb2YoYWN0aW9uKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCBhY3Rpb24gPT4gdGhpcy5fZmlsdGVyQWN0aW9uKGFjdGlvbiwgY29uZmlnKSApLFxuICAgICAgICAgICAgY29uY2F0TWFwIChcbiAgICAgICAgICAgICAgICBhY3Rpb24gPT4gY29uZmlnLmhhbmRsZXJzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyRm4gPSB0aGlzLl9nZXRIYW5kbGVyKGhhbmRsZXIsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlckZuKGFjdGlvbiwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjb25jYXRBbGwoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFVwUGFyYWxsZWxFZmZlY3QoY29uZmlnOiBFZmZlY3RDb25maWd1cmF0aW9uKTogRnVuY3Rpb24ge1xuXG4gICAgICAgIHJldHVybiBhY3Rpb24gPT4gb2YoYWN0aW9uKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCBhY3Rpb24gPT4gdGhpcy5fZmlsdGVyQWN0aW9uKGFjdGlvbiwgY29uZmlnKSApLFxuICAgICAgICAgICAgbWVyZ2VNYXAgKFxuICAgICAgICAgICAgICAgIGFjdGlvbiA9PiBjb25maWcuaGFuZGxlcnMubWFwKFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJGbiA9IHRoaXMuX2dldEhhbmRsZXIoaGFuZGxlciwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyRm4oYWN0aW9uLCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1lcmdlQWxsKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRVcEFjdGlvbkVmZmVjdChjb25maWc6IEVmZmVjdENvbmZpZ3VyYXRpb24pOiBGdW5jdGlvbiB7XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbiA9PiBvZihhY3Rpb24pLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoIGFjdGlvbiA9PiB0aGlzLl9maWx0ZXJBY3Rpb24oYWN0aW9uLCBjb25maWcpICksXG4gICAgICAgICAgICBtYXAoIGFjdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogY29uZmlnLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogYWN0aW9uWydwYXlsb2FkJ11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9maWx0ZXJBY3Rpb24oYWN0aW9uOiBhbnksIGVmZmVjdHNDb25maWc6IEVmZmVjdENvbmZpZ3VyYXRpb24pOiBib29sZWFuICB7XG4gICAgICAgIGNvbnN0IGlzQ2F1c2UgPSBlZmZlY3RzQ29uZmlnLmNhdXNlcy5pbmRleE9mKGFjdGlvbi50eXBlKSA+IC0xO1xuICAgICAgICBjb25zdCBpc1dpbGRjYXJkID0gZWZmZWN0c0NvbmZpZy5jYXVzZXMuaW5kZXhPZignKicpID4gLTE7XG5cbiAgICAgICAgcmV0dXJuIGlzV2lsZGNhcmQgfHwgaXNDYXVzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRIYW5kbGVyKGhhbmRsZXI6IHN0cmluZyB8IEZ1bmN0aW9uLCBjb25maWc6IGFueSk6IEZ1bmN0aW9uIHtcblxuICAgICAgICByZXR1cm4gKCB0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyApXG4gICAgICAgICAgICA/IGhhbmRsZXJcbiAgICAgICAgICAgIDogdGhpcy5fZWZmZWN0c1JlcG9zaXRvcnkuZ2V0KGhhbmRsZXIpO1xuICAgIH1cbn1cblxuIl19