@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)
56 lines (55 loc) • 5.42 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { ReduxRegistry } from './redux-registry';
export class ReduxReducerProvider {
constructor() {
this.stateProviders = {};
}
/**
* @return {?}
*/
get rootReducer() {
return this.reduce.bind(this);
}
/**
* @param {?} provider
* @return {?}
*/
addStateProvider(provider) {
if (!this.stateProviders[provider.name]) {
ReduxRegistry.registerState(provider);
this.stateProviders[provider.name] = provider;
}
else {
throw new Error(`State "${provider.name}" is registered twice! Make sure your state name is unique!`);
}
}
/**
* @param {?} rootState
* @param {?} action
* @return {?}
*/
reduce(rootState, action) {
if (action.type === ReduxRegistry.ACTION_REGISTER_STATE) {
/** @type {?} */
const regAction = (/** @type {?} */ ((action)));
return Object.assign({}, rootState, { [regAction.payload.name]: regAction.payload.initialValue });
}
return Object.values(this.stateProviders).reduce((stateToReduce, provider) => {
return Object.assign({}, stateToReduce, {
[provider.name]: provider.reduce(stateToReduce[provider.name], action),
});
}, rootState);
}
}
ReduxReducerProvider.decorators = [
{ type: Injectable }
];
if (false) {
/** @type {?} */
ReduxReducerProvider.prototype.stateProviders;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtcmVkdWNlci5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoYXJtb3dhdGNoL25neC1yZWR1eC1jb3JlLyIsInNvdXJjZXMiOlsicHJvdmlkZXJzL3JlZHV4LXJlZHVjZXIucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUF5QixhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUt4RSxNQUFNOzs4QkFJQSxFQUFFOzs7OztRQUVLLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Ozs7O0lBR3pCLGdCQUFnQixDQUFDLFFBQTRCO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUUsRUFBRTtZQUN6QyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUUsUUFBUSxDQUFDLElBQUksQ0FBRSxHQUFHLFFBQVEsQ0FBQztTQUNqRDthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLFFBQVEsQ0FBQyxJQUFJLDZEQUE2RCxDQUFDLENBQUM7U0FDdkc7Ozs7Ozs7SUFHSSxNQUFNLENBQUMsU0FBeUIsRUFBRSxNQUFtQztRQUUxRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLHFCQUFxQixFQUFFOztZQUN2RCxNQUFNLFNBQVMsR0FBRyxvQkFBQyxNQUFZLEdBQWtELENBQUM7WUFFbEYseUJBQ0ssU0FBUyxJQUNaLENBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksSUFDMUQ7U0FDSDtRQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzNFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFO2dCQUN0QyxDQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBRSxRQUFRLENBQUMsSUFBSSxDQUFFLEVBQUUsTUFBTSxDQUFDO2FBQzNFLENBQUMsQ0FBQztTQUNKLEVBQUUsU0FBUyxDQUFDLENBQUM7Ozs7WUFuQ2pCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlZHVjZXIgfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgeyBSZWR1eFN0YXRlUHJvdmlkZXIgfSBmcm9tICcuL3JlZHV4LXN0YXRlLnByb3ZpZGVyJztcbmltcG9ydCB7IElSZWdpc3RlclN0YXRlUGF5bG9hZCwgUmVkdXhSZWdpc3RyeSB9IGZyb20gJy4vcmVkdXgtcmVnaXN0cnknO1xuaW1wb3J0IHsgUmVkdXhSb290U3RhdGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlZHV4LXJvb3Qtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlZHV4QWN0aW9uV2l0aFBheWxvYWQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlZHV4LWFjdGlvbi13aXRoLXBheWxvYWQuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZHV4UmVkdWNlclByb3ZpZGVyIHtcblxuICBwcml2YXRlIHN0YXRlUHJvdmlkZXJzOiB7XG4gICAgW25hbWU6IHN0cmluZ106IFJlZHV4U3RhdGVQcm92aWRlcixcbiAgfSA9IHt9O1xuXG4gIHB1YmxpYyBnZXQgcm9vdFJlZHVjZXIoKTogUmVkdWNlcjxSZWR1eFJvb3RTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlZHVjZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGFkZFN0YXRlUHJvdmlkZXIocHJvdmlkZXI6IFJlZHV4U3RhdGVQcm92aWRlcikge1xuICAgIGlmICghdGhpcy5zdGF0ZVByb3ZpZGVyc1sgcHJvdmlkZXIubmFtZSBdKSB7XG4gICAgICBSZWR1eFJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGUocHJvdmlkZXIpO1xuICAgICAgdGhpcy5zdGF0ZVByb3ZpZGVyc1sgcHJvdmlkZXIubmFtZSBdID0gcHJvdmlkZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhdGUgXCIke3Byb3ZpZGVyLm5hbWV9XCIgaXMgcmVnaXN0ZXJlZCB0d2ljZSEgTWFrZSBzdXJlIHlvdXIgc3RhdGUgbmFtZSBpcyB1bmlxdWUhYCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZHVjZShyb290U3RhdGU6IFJlZHV4Um9vdFN0YXRlLCBhY3Rpb246IFJlZHV4QWN0aW9uV2l0aFBheWxvYWQ8YW55Pik6IFJlZHV4Um9vdFN0YXRlIHtcblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gUmVkdXhSZWdpc3RyeS5BQ1RJT05fUkVHSVNURVJfU1RBVEUpIHtcbiAgICAgIGNvbnN0IHJlZ0FjdGlvbiA9IChhY3Rpb24gYXMge30gYXMgUmVkdXhBY3Rpb25XaXRoUGF5bG9hZDxJUmVnaXN0ZXJTdGF0ZVBheWxvYWQ+KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucm9vdFN0YXRlLFxuICAgICAgICBbIHJlZ0FjdGlvbi5wYXlsb2FkLm5hbWUgXTogcmVnQWN0aW9uLnBheWxvYWQuaW5pdGlhbFZhbHVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlUHJvdmlkZXJzKS5yZWR1Y2UoKHN0YXRlVG9SZWR1Y2UsIHByb3ZpZGVyKSA9PiB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVUb1JlZHVjZSwge1xuICAgICAgICBbIHByb3ZpZGVyLm5hbWUgXTogcHJvdmlkZXIucmVkdWNlKHN0YXRlVG9SZWR1Y2VbIHByb3ZpZGVyLm5hbWUgXSwgYWN0aW9uKSxcbiAgICAgIH0pO1xuICAgIH0sIHJvb3RTdGF0ZSk7XG4gIH1cblxufVxuIl19