@harmowatch/ngx-redux-core
Version:
[](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
JavaScript
/**
* @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