UNPKG

@harmowatch/ngx-redux-core

Version:

[![Join the chat at https://gitter.im/harmowatch/ngx-redux-core](https://badges.gitter.im/harmowatch/ngx-redux-core.svg)](https://gitter.im/harmowatch/ngx-redux-core?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

86 lines (85 loc) 8.24 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { ReplaySubject } from 'rxjs'; import { ReduxStateDecorator } from '@harmowatch/redux-decorators'; import { ReduxRegistry } from './providers/redux-registry'; /** * @template T */ var ReduxSelector = /** @class */ (function (_super) { tslib_1.__extends(ReduxSelector, _super); function ReduxSelector(zone, selector, stateProvider) { if (selector === void 0) { selector = '/'; } var _this = this; if (!selector.startsWith(ReduxSelector.DELIMITER) && !stateProvider) { throw new Error('You need to provide a state provider, if you use relative selectors'); } _this = _super.call(this, 1) || this; ReduxRegistry.getStore().then(function (store) { /** @type {?} */ var next = function () { zone.run(function () { _this.next(ReduxSelector.getValueByState(store.getState(), selector, stateProvider)); }); }; store.subscribe(function () { return next(); }); next(); // we need to trigger a initial value, otherwise we've to wait until the first state change }); return _this; } /** * @param {?} selector * @param {?=} stateProvider * @return {?} */ ReduxSelector.normalize = /** * @param {?} selector * @param {?=} stateProvider * @return {?} */ function (selector, stateProvider) { if (!selector.startsWith(ReduxSelector.DELIMITER)) { /** @type {?} */ var stateName = ReduxStateDecorator.get(stateProvider).name; return "" + ReduxSelector.DELIMITER + stateName + ReduxSelector.DELIMITER + selector; } return selector; }; /** * @template S * @param {?} state * @param {?} selector * @param {?=} stateProvider * @return {?} */ ReduxSelector.getValueByState = /** * @template S * @param {?} state * @param {?} selector * @param {?=} stateProvider * @return {?} */ function (state, selector, stateProvider) { /** @type {?} */ var value = ReduxSelector.normalize(selector, stateProvider).split(ReduxSelector.DELIMITER) .filter(function (propertyKey) { return propertyKey !== ''; }) .reduce(function (previousValue, propertyKey) { if (!previousValue || !previousValue.hasOwnProperty(propertyKey)) { return null; } return previousValue[propertyKey]; }, /** @type {?} */ (state)); return value; }; ReduxSelector.DELIMITER = '/'; return ReduxSelector; }(ReplaySubject)); export { ReduxSelector }; if (false) { /** @type {?} */ ReduxSelector.DELIMITER; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtc2VsZWN0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaGFybW93YXRjaC9uZ3gtcmVkdXgtY29yZS8iLCJzb3VyY2VzIjpbInJlZHV4LXNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0lBSXJCLHlDQUFnQjtJQUlwRCx1QkFBWSxJQUFZLEVBQ1osUUFBYyxFQUNkLGFBQXdDO1FBRHhDLHlCQUFBLEVBQUEsY0FBYztRQUQxQixpQkFxQkM7UUFqQkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25FLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUN4RjtRQUVELFFBQUEsa0JBQU0sQ0FBQyxDQUFDLFNBQUM7UUFFVCxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQUEsS0FBSzs7WUFDakMsSUFBTSxJQUFJLEdBQUc7Z0JBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFDUCxLQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2lCQUNyRixDQUFDLENBQUM7YUFDSixDQUFDO1lBRUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFNLE9BQUEsSUFBSSxFQUFFLEVBQU4sQ0FBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxFQUFFLENBQUM7U0FDUixDQUFDLENBQUM7O0tBRUo7Ozs7OztJQUVhLHVCQUFTOzs7OztjQUFDLFFBQWdCLEVBQUUsYUFBd0M7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFOztZQUNqRCxJQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzlELE9BQU8sS0FBRyxhQUFhLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVUsQ0FBQztTQUN0RjtRQUVELE9BQU8sUUFBUSxDQUFDOzs7Ozs7Ozs7SUFHSiw2QkFBZTs7Ozs7OztjQUFJLEtBQXdCLEVBQ3hCLFFBQWdCLEVBQ2hCLGFBQXdDOztRQU12RSxJQUFNLEtBQUssR0FBTSxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUM3RixNQUFNLENBQUMsVUFBQSxXQUFXLElBQUksT0FBQSxXQUFXLEtBQUssRUFBRSxFQUFsQixDQUFrQixDQUFDO2FBQ3pDLE1BQU0sQ0FBQyxVQUFDLGFBQWEsRUFBRSxXQUFXO1lBQ2pDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNoRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsT0FBTyxhQUFhLENBQUUsV0FBVyxDQUFFLENBQUM7U0FDckMsb0JBQUUsS0FBVyxFQUFDLENBQUM7UUFFbEIsT0FBTyxLQUFLLENBQUM7OzhCQXBEcUIsR0FBRzt3QkFWekM7RUFRc0MsYUFBYTtTQUF0QyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZWR1eFN0YXRlRGVjb3JhdG9yIH0gZnJvbSAnQGhhcm1vd2F0Y2gvcmVkdXgtZGVjb3JhdG9ycyc7XG5cbmltcG9ydCB7IFJlZHV4UmVnaXN0cnkgfSBmcm9tICcuL3Byb3ZpZGVycy9yZWR1eC1yZWdpc3RyeSc7XG5pbXBvcnQgeyBSZWR1eFJvb3RTdGF0ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZWR1eC1yb290LXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZWR1eFN0YXRlUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVycy9yZWR1eC1zdGF0ZS5wcm92aWRlcic7XG5cbmV4cG9ydCBjbGFzcyBSZWR1eFNlbGVjdG9yPFQ+IGV4dGVuZHMgUmVwbGF5U3ViamVjdDxUPiB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVMSU1JVEVSID0gJy8nO1xuXG4gIGNvbnN0cnVjdG9yKHpvbmU6IE5nWm9uZSxcbiAgICAgICAgICAgICAgc2VsZWN0b3IgPSAnLycsXG4gICAgICAgICAgICAgIHN0YXRlUHJvdmlkZXI/OiBUeXBlPFJlZHV4U3RhdGVQcm92aWRlcj4pIHtcblxuICAgIGlmICghc2VsZWN0b3Iuc3RhcnRzV2l0aChSZWR1eFNlbGVjdG9yLkRFTElNSVRFUikgJiYgIXN0YXRlUHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gcHJvdmlkZSBhIHN0YXRlIHByb3ZpZGVyLCBpZiB5b3UgdXNlIHJlbGF0aXZlIHNlbGVjdG9ycycpO1xuICAgIH1cblxuICAgIHN1cGVyKDEpO1xuXG4gICAgUmVkdXhSZWdpc3RyeS5nZXRTdG9yZSgpLnRoZW4oc3RvcmUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubmV4dChSZWR1eFNlbGVjdG9yLmdldFZhbHVlQnlTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpLCBzZWxlY3Rvciwgc3RhdGVQcm92aWRlcikpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHN0b3JlLnN1YnNjcmliZSgoKSA9PiBuZXh0KCkpO1xuICAgICAgbmV4dCgpOyAvLyB3ZSBuZWVkIHRvIHRyaWdnZXIgYSBpbml0aWFsIHZhbHVlLCBvdGhlcndpc2Ugd2UndmUgdG8gd2FpdCB1bnRpbCB0aGUgZmlyc3Qgc3RhdGUgY2hhbmdlXG4gICAgfSk7XG5cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbm9ybWFsaXplKHNlbGVjdG9yOiBzdHJpbmcsIHN0YXRlUHJvdmlkZXI/OiBUeXBlPFJlZHV4U3RhdGVQcm92aWRlcj4pOiBzdHJpbmcge1xuICAgIGlmICghc2VsZWN0b3Iuc3RhcnRzV2l0aChSZWR1eFNlbGVjdG9yLkRFTElNSVRFUikpIHtcbiAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IFJlZHV4U3RhdGVEZWNvcmF0b3IuZ2V0KHN0YXRlUHJvdmlkZXIpLm5hbWU7XG4gICAgICByZXR1cm4gYCR7UmVkdXhTZWxlY3Rvci5ERUxJTUlURVJ9JHtzdGF0ZU5hbWV9JHtSZWR1eFNlbGVjdG9yLkRFTElNSVRFUn0ke3NlbGVjdG9yfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRWYWx1ZUJ5U3RhdGU8Uz4oc3RhdGU6IFJlZHV4Um9vdFN0YXRlPFM+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVByb3ZpZGVyPzogVHlwZTxSZWR1eFN0YXRlUHJvdmlkZXI+KTogUyB7XG5cbiAgICAvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgaW4gYSBjb25zdGFudCB0byBwcmV2ZW50XG4gICAgICogXCJNZXRhZGF0YSBjb2xsZWN0ZWQgY29udGFpbnMgYW4gZXJyb3IgdGhhdCB3aWxsIGJlIHJlcG9ydGVkIGF0IHJ1bnRpbWU6IExhbWJkYSBub3Qgc3VwcG9ydGVkLlwiXG4gICAgICogZXJyb3JcbiAgICAgKi9cbiAgICBjb25zdCB2YWx1ZTogUyA9IFJlZHV4U2VsZWN0b3Iubm9ybWFsaXplKHNlbGVjdG9yLCBzdGF0ZVByb3ZpZGVyKS5zcGxpdChSZWR1eFNlbGVjdG9yLkRFTElNSVRFUilcbiAgICAgIC5maWx0ZXIocHJvcGVydHlLZXkgPT4gcHJvcGVydHlLZXkgIT09ICcnKVxuICAgICAgLnJlZHVjZSgocHJldmlvdXNWYWx1ZSwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgaWYgKCFwcmV2aW91c1ZhbHVlIHx8ICFwcmV2aW91c1ZhbHVlLmhhc093blByb3BlcnR5KHByb3BlcnR5S2V5KSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWVbIHByb3BlcnR5S2V5IF07XG4gICAgICB9LCBzdGF0ZSBhcyB7fSk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxufVxuIl19