@angular-redux/store
Version:
Angular bindings for Redux
115 lines • 13.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { applyMiddleware, compose, createStore, } from 'redux';
import { NgZone } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';
import { assert } from '../utils/assert';
import { enableFractalReducers } from './fractal-reducer-map';
import { NgRedux } from './ng-redux';
import { resolveToFunctionSelector, } from './selectors';
import { SubStore } from './sub-store';
/**
* @hidden
* @template RootState
*/
export class RootStore extends NgRedux {
/**
* @param {?} ngZone
*/
constructor(ngZone) {
super();
this.ngZone = ngZone;
this.store = undefined;
this.configureStore = (rootReducer, initState, middleware = [], enhancers = []) => {
assert(!this.store, 'Store already configured!');
// Variable-arity compose in typescript FTW.
this.setStore(compose(applyMiddleware(...middleware), ...enhancers)(createStore)(enableFractalReducers(rootReducer), initState));
};
this.provideStore = (store) => {
assert(!this.store, 'Store already configured!');
this.setStore(store);
};
this.getState = () => (/** @type {?} */ (this.store)).getState();
this.subscribe = (listener) => (/** @type {?} */ (this.store)).subscribe(listener);
this.replaceReducer = (nextReducer) => {
(/** @type {?} */ (this.store)).replaceReducer(nextReducer);
};
this.dispatch = (action) => {
assert(!!this.store, 'Dispatch failed: did you forget to configure your store? ' +
'https://github.com/angular-redux/platform/blob/master/packages/store/' +
'README.md#quick-start');
if (!NgZone.isInAngularZone()) {
return this.ngZone.run(() => (/** @type {?} */ (this.store)).dispatch(action));
}
else {
return (/** @type {?} */ (this.store)).dispatch(action);
}
};
this.select = (selector, comparator) => this.store$.pipe(distinctUntilChanged(), map(resolveToFunctionSelector(selector)), distinctUntilChanged(comparator));
this.configureSubStore = (basePath, localReducer) => new SubStore(this, basePath, localReducer);
this.storeToObservable = (store) => new Observable((observer) => {
observer.next(store.getState());
/** @type {?} */
const unsubscribeFromRedux = store.subscribe(() => observer.next(store.getState()));
return () => {
unsubscribeFromRedux();
observer.complete();
};
});
NgRedux.instance = this;
this.store$ = (/** @type {?} */ (new BehaviorSubject(undefined).pipe(filter(n => n !== undefined), switchMap(observableStore => (/** @type {?} */ (observableStore))))));
}
/**
* @private
* @param {?} store
* @return {?}
*/
setStore(store) {
this.store = store;
/** @type {?} */
const storeServable = this.storeToObservable(store);
this.store$.next((/** @type {?} */ (storeServable)));
}
}
if (false) {
/**
* @type {?}
* @private
*/
RootStore.prototype.store;
/**
* @type {?}
* @private
*/
RootStore.prototype.store$;
/** @type {?} */
RootStore.prototype.configureStore;
/** @type {?} */
RootStore.prototype.provideStore;
/** @type {?} */
RootStore.prototype.getState;
/** @type {?} */
RootStore.prototype.subscribe;
/** @type {?} */
RootStore.prototype.replaceReducer;
/** @type {?} */
RootStore.prototype.dispatch;
/** @type {?} */
RootStore.prototype.select;
/** @type {?} */
RootStore.prototype.configureSubStore;
/**
* @type {?}
* @private
*/
RootStore.prototype.storeToObservable;
/**
* @type {?}
* @private
*/
RootStore.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhbmd1bGFyLXJlZHV4L3N0b3JlLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yb290LXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsZUFBZSxFQUNmLE9BQU8sRUFDUCxXQUFXLEdBUVosTUFBTSxPQUFPLENBQUM7QUFFZixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXJDLE9BQU8sRUFHTCx5QkFBeUIsR0FFMUIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFHdkMsTUFBTSxPQUFPLFNBQXFCLFNBQVEsT0FBa0I7Ozs7SUFJMUQsWUFBb0IsTUFBYztRQUNoQyxLQUFLLEVBQUUsQ0FBQztRQURVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFIMUIsVUFBSyxHQUFpQyxTQUFTLENBQUM7UUFjeEQsbUJBQWMsR0FBRyxDQUNmLFdBQTBDLEVBQzFDLFNBQW9CLEVBQ3BCLGFBQTJCLEVBQUUsRUFDN0IsWUFBd0MsRUFBRSxFQUNwQyxFQUFFO1lBQ1IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQ2pELDRDQUE0QztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUNYLE9BQU8s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LG1CQUFBLGVBQWUsRUFBTyxDQUFDLENBRXJELEVBQThCLENBQUM7SUFDbEMsQ0FBQzs7Ozs7O0lBK0RPLFFBQVEsQ0FBQyxLQUF1QjtRQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7Y0FDYixhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBQSxhQUFhLEVBQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FlRjs7Ozs7O0lBOUZDLDBCQUF3RDs7Ozs7SUFDeEQsMkJBQTJDOztJQWEzQyxtQ0FjRTs7SUFFRixpQ0FHRTs7SUFFRiw2QkFBbUQ7O0lBRW5ELDhCQUNrQzs7SUFFbEMsbUNBRUU7O0lBRUYsNkJBYUU7O0lBRUYsMkJBUUk7O0lBRUosc0NBSXVEOzs7OztJQVF2RCxzQ0FZSzs7Ozs7SUExRk8sMkJBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQW55QWN0aW9uLFxuICBhcHBseU1pZGRsZXdhcmUsXG4gIGNvbXBvc2UsXG4gIGNyZWF0ZVN0b3JlLFxuICBEaXNwYXRjaCxcbiAgTWlkZGxld2FyZSxcbiAgUmVkdWNlcixcbiAgU3RvcmUsXG4gIFN0b3JlQ3JlYXRvcixcbiAgU3RvcmVFbmhhbmNlcixcbiAgVW5zdWJzY3JpYmUsXG59IGZyb20gJ3JlZHV4JztcblxuaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJy4uL3V0aWxzL2Fzc2VydCc7XG5pbXBvcnQgeyBlbmFibGVGcmFjdGFsUmVkdWNlcnMgfSBmcm9tICcuL2ZyYWN0YWwtcmVkdWNlci1tYXAnO1xuaW1wb3J0IHsgTmdSZWR1eCB9IGZyb20gJy4vbmctcmVkdXgnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVN0b3JlIH0gZnJvbSAnLi9vYnNlcnZhYmxlLXN0b3JlJztcbmltcG9ydCB7XG4gIENvbXBhcmF0b3IsXG4gIFBhdGhTZWxlY3RvcixcbiAgcmVzb2x2ZVRvRnVuY3Rpb25TZWxlY3RvcixcbiAgU2VsZWN0b3IsXG59IGZyb20gJy4vc2VsZWN0b3JzJztcbmltcG9ydCB7IFN1YlN0b3JlIH0gZnJvbSAnLi9zdWItc3RvcmUnO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGNsYXNzIFJvb3RTdG9yZTxSb290U3RhdGU+IGV4dGVuZHMgTmdSZWR1eDxSb290U3RhdGU+IHtcbiAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8Um9vdFN0YXRlPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzdG9yZSQ6IEJlaGF2aW9yU3ViamVjdDxSb290U3RhdGU+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgTmdSZWR1eC5pbnN0YW5jZSA9IHRoaXM7XG4gICAgdGhpcy5zdG9yZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJvb3RTdGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKS5waXBlKFxuICAgICAgZmlsdGVyKG4gPT4gbiAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIHN3aXRjaE1hcChvYnNlcnZhYmxlU3RvcmUgPT4gb2JzZXJ2YWJsZVN0b3JlIGFzIGFueSksXG4gICAgICAvLyBUT0RPOiBmaXggdGhpcz8gbmVlZGluZyB0byBleHBsaWNpdGx5IGNhc3QgdGhpcyBpcyB3cm9uZ1xuICAgICkgYXMgQmVoYXZpb3JTdWJqZWN0PFJvb3RTdGF0ZT47XG4gIH1cblxuICBjb25maWd1cmVTdG9yZSA9IChcbiAgICByb290UmVkdWNlcjogUmVkdWNlcjxSb290U3RhdGUsIEFueUFjdGlvbj4sXG4gICAgaW5pdFN0YXRlOiBSb290U3RhdGUsXG4gICAgbWlkZGxld2FyZTogTWlkZGxld2FyZVtdID0gW10sXG4gICAgZW5oYW5jZXJzOiBTdG9yZUVuaGFuY2VyPFJvb3RTdGF0ZT5bXSA9IFtdLFxuICApOiB2b2lkID0+IHtcbiAgICBhc3NlcnQoIXRoaXMuc3RvcmUsICdTdG9yZSBhbHJlYWR5IGNvbmZpZ3VyZWQhJyk7XG4gICAgLy8gVmFyaWFibGUtYXJpdHkgY29tcG9zZSBpbiB0eXBlc2NyaXB0IEZUVy5cbiAgICB0aGlzLnNldFN0b3JlKFxuICAgICAgY29tcG9zZTxTdG9yZUNyZWF0b3I+KFxuICAgICAgICBhcHBseU1pZGRsZXdhcmUoLi4ubWlkZGxld2FyZSksXG4gICAgICAgIC4uLmVuaGFuY2VycyxcbiAgICAgICkoY3JlYXRlU3RvcmUpKGVuYWJsZUZyYWN0YWxSZWR1Y2Vycyhyb290UmVkdWNlciksIGluaXRTdGF0ZSksXG4gICAgKTtcbiAgfTtcblxuICBwcm92aWRlU3RvcmUgPSAoc3RvcmU6IFN0b3JlPFJvb3RTdGF0ZT4pID0+IHtcbiAgICBhc3NlcnQoIXRoaXMuc3RvcmUsICdTdG9yZSBhbHJlYWR5IGNvbmZpZ3VyZWQhJyk7XG4gICAgdGhpcy5zZXRTdG9yZShzdG9yZSk7XG4gIH07XG5cbiAgZ2V0U3RhdGUgPSAoKTogUm9vdFN0YXRlID0+IHRoaXMuc3RvcmUhLmdldFN0YXRlKCk7XG5cbiAgc3Vic2NyaWJlID0gKGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogVW5zdWJzY3JpYmUgPT5cbiAgICB0aGlzLnN0b3JlIS5zdWJzY3JpYmUobGlzdGVuZXIpO1xuXG4gIHJlcGxhY2VSZWR1Y2VyID0gKG5leHRSZWR1Y2VyOiBSZWR1Y2VyPFJvb3RTdGF0ZSwgQW55QWN0aW9uPik6IHZvaWQgPT4ge1xuICAgIHRoaXMuc3RvcmUhLnJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKTtcbiAgfTtcblxuICBkaXNwYXRjaDogRGlzcGF0Y2g8QW55QWN0aW9uPiA9IDxBIGV4dGVuZHMgQW55QWN0aW9uPihhY3Rpb246IEEpOiBBID0+IHtcbiAgICBhc3NlcnQoXG4gICAgICAhIXRoaXMuc3RvcmUsXG4gICAgICAnRGlzcGF0Y2ggZmFpbGVkOiBkaWQgeW91IGZvcmdldCB0byBjb25maWd1cmUgeW91ciBzdG9yZT8gJyArXG4gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci1yZWR1eC9wbGF0Zm9ybS9ibG9iL21hc3Rlci9wYWNrYWdlcy9zdG9yZS8nICtcbiAgICAgICAgJ1JFQURNRS5tZCNxdWljay1zdGFydCcsXG4gICAgKTtcblxuICAgIGlmICghTmdab25lLmlzSW5Bbmd1bGFyWm9uZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuc3RvcmUhLmRpc3BhdGNoKGFjdGlvbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZSEuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgc2VsZWN0ID0gPFNlbGVjdGVkVHlwZT4oXG4gICAgc2VsZWN0b3I/OiBTZWxlY3RvcjxSb290U3RhdGUsIFNlbGVjdGVkVHlwZT4sXG4gICAgY29tcGFyYXRvcj86IENvbXBhcmF0b3IsXG4gICk6IE9ic2VydmFibGU8U2VsZWN0ZWRUeXBlPiA9PlxuICAgIHRoaXMuc3RvcmUkLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKHJlc29sdmVUb0Z1bmN0aW9uU2VsZWN0b3Ioc2VsZWN0b3IpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGNvbXBhcmF0b3IpLFxuICAgICk7XG5cbiAgY29uZmlndXJlU3ViU3RvcmUgPSA8U3ViU3RhdGU+KFxuICAgIGJhc2VQYXRoOiBQYXRoU2VsZWN0b3IsXG4gICAgbG9jYWxSZWR1Y2VyOiBSZWR1Y2VyPFN1YlN0YXRlLCBBbnlBY3Rpb24+LFxuICApOiBPYnNlcnZhYmxlU3RvcmU8U3ViU3RhdGU+ID0+XG4gICAgbmV3IFN1YlN0b3JlPFN1YlN0YXRlPih0aGlzLCBiYXNlUGF0aCwgbG9jYWxSZWR1Y2VyKTtcblxuICBwcml2YXRlIHNldFN0b3JlKHN0b3JlOiBTdG9yZTxSb290U3RhdGU+KSB7XG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIGNvbnN0IHN0b3JlU2VydmFibGUgPSB0aGlzLnN0b3JlVG9PYnNlcnZhYmxlKHN0b3JlKTtcbiAgICB0aGlzLnN0b3JlJC5uZXh0KHN0b3JlU2VydmFibGUgYXMgYW55KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVUb09ic2VydmFibGUgPSAoXG4gICAgc3RvcmU6IFN0b3JlPFJvb3RTdGF0ZT4sXG4gICk6IE9ic2VydmFibGU8Um9vdFN0YXRlPiA9PlxuICAgIG5ldyBPYnNlcnZhYmxlPFJvb3RTdGF0ZT4oKG9ic2VydmVyOiBPYnNlcnZlcjxSb290U3RhdGU+KSA9PiB7XG4gICAgICBvYnNlcnZlci5uZXh0KHN0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmVGcm9tUmVkdXggPSBzdG9yZS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgb2JzZXJ2ZXIubmV4dChzdG9yZS5nZXRTdGF0ZSgpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB1bnN1YnNjcmliZUZyb21SZWR1eCgpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbn1cbiJdfQ==