@angular-redux/store
Version:
Angular bindings for Redux
124 lines • 8.56 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ApplicationRef, Injectable, NgZone } from '@angular/core';
import { NgRedux } from './ng-redux';
/**
* @record
*/
export function ReduxDevTools() { }
if (false) {
/** @type {?} */
ReduxDevTools.prototype.listen;
/* Skipping unhandled member: (options: EnhancerOptions): StoreEnhancer<any>;*/
}
/**
* @record
*/
function WindowWithReduxDevTools() { }
if (false) {
/** @type {?|undefined} */
WindowWithReduxDevTools.prototype.__REDUX_DEVTOOLS_EXTENSION__;
/** @type {?|undefined} */
WindowWithReduxDevTools.prototype.devToolsExtension;
}
/** @type {?} */
const environment = (/** @type {?} */ ((typeof window !== 'undefined'
? window
: {})));
/**
* An angular-2-ified version of the Redux DevTools chrome extension.
*/
export class DevToolsExtension {
/**
* @hidden
* @param {?} appRef
* @param {?} ngRedux
*/
constructor(appRef, ngRedux) {
this.appRef = appRef;
this.ngRedux = ngRedux;
/**
* A wrapper for the Chrome Extension Redux DevTools.
* Makes sure state changes triggered by the extension
* trigger Angular2's change detector.
*
* @argument options: dev tool options; same
* format as described here:
* [zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md]
*/
this.enhancer = (options) => {
/** @type {?} */
let subscription;
if (!this.isEnabled()) {
return null;
}
// Make sure changes from dev tools update angular's view.
(/** @type {?} */ (this.getDevTools())).listen(({ type }) => {
if (type === 'START') {
subscription = this.ngRedux.subscribe(() => {
if (!NgZone.isInAngularZone()) {
this.appRef.tick();
}
});
}
else if (type === 'STOP') {
subscription();
}
});
return (/** @type {?} */ (this.getDevTools()))(options || {});
};
/**
* Returns true if the extension is installed and enabled.
*/
this.isEnabled = () => !!this.getDevTools();
/**
* Returns the redux devtools enhancer.
*/
this.getDevTools = () => environment &&
(environment.__REDUX_DEVTOOLS_EXTENSION__ || environment.devToolsExtension);
}
}
DevToolsExtension.decorators = [
{ type: Injectable }
];
/** @nocollapse */
DevToolsExtension.ctorParameters = () => [
{ type: ApplicationRef },
{ type: NgRedux }
];
if (false) {
/**
* A wrapper for the Chrome Extension Redux DevTools.
* Makes sure state changes triggered by the extension
* trigger Angular2's change detector.
*
* @argument options: dev tool options; same
* format as described here:
* [zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md]
* @type {?}
*/
DevToolsExtension.prototype.enhancer;
/**
* Returns true if the extension is installed and enabled.
* @type {?}
*/
DevToolsExtension.prototype.isEnabled;
/**
* Returns the redux devtools enhancer.
* @type {?}
*/
DevToolsExtension.prototype.getDevTools;
/**
* @type {?}
* @private
*/
DevToolsExtension.prototype.appRef;
/**
* @type {?}
* @private
*/
DevToolsExtension.prototype.ngRedux;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXRvb2xzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFuZ3VsYXItcmVkdXgvc3RvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2Rldi10b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUFFckMsbUNBTUM7OztJQUpDLCtCQUdVOzs7Ozs7QUFHWixzQ0FHQzs7O0lBRkMsK0RBQTZDOztJQUM3QyxvREFBa0M7OztNQUc5QixXQUFXLEdBQTRCLG1CQUFBLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVztJQUN6RSxDQUFDLENBQUMsTUFBTTtJQUNSLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBMkI7Ozs7QUFNbEMsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7O0lBRTVCLFlBQW9CLE1BQXNCLEVBQVUsT0FBcUI7UUFBckQsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFjOzs7Ozs7Ozs7O1FBV3pFLGFBQVEsR0FBRyxDQUFDLE9BQXlCLEVBQUUsRUFBRTs7Z0JBQ25DLFlBQXlCO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCwwREFBMEQ7WUFDMUQsbUJBQUEsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7b0JBQ3BCLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLEVBQUU7NEJBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7eUJBQ3BCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtvQkFDMUIsWUFBWSxFQUFFLENBQUM7aUJBQ2hCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLG1CQUFBLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUM7Ozs7UUFLRixjQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7OztRQUt2QyxnQkFBVyxHQUFHLEdBQUcsRUFBRSxDQUNqQixXQUFXO1lBQ1gsQ0FBQyxXQUFXLENBQUMsNEJBQTRCLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUEzQ0YsQ0FBQzs7O1lBSDlFLFVBQVU7Ozs7WUF6QkYsY0FBYztZQUdkLE9BQU87Ozs7Ozs7Ozs7Ozs7SUFvQ2QscUNBb0JFOzs7OztJQUtGLHNDQUF1Qzs7Ozs7SUFLdkMsd0NBRThFOzs7OztJQTNDbEUsbUNBQThCOzs7OztJQUFFLG9DQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFueUFjdGlvbiwgU3RvcmVFbmhhbmNlciwgVW5zdWJzY3JpYmUgfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgeyBFbmhhbmNlck9wdGlvbnMgfSBmcm9tICdyZWR1eC1kZXZ0b29scy1leHRlbnNpb24nO1xuaW1wb3J0IHsgTmdSZWR1eCB9IGZyb20gJy4vbmctcmVkdXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZHV4RGV2VG9vbHMge1xuICAob3B0aW9uczogRW5oYW5jZXJPcHRpb25zKTogU3RvcmVFbmhhbmNlcjxhbnk+O1xuICBsaXN0ZW46IChcbiAgICBvbk1lc3NhZ2U6IChtZXNzYWdlOiBBbnlBY3Rpb24pID0+IHZvaWQsXG4gICAgaW5zdGFuY2VJZD86IHN0cmluZyxcbiAgKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgV2luZG93V2l0aFJlZHV4RGV2VG9vbHMgZXh0ZW5kcyBXaW5kb3cge1xuICBfX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fPzogUmVkdXhEZXZUb29scztcbiAgZGV2VG9vbHNFeHRlbnNpb24/OiBSZWR1eERldlRvb2xzO1xufVxuXG5jb25zdCBlbnZpcm9ubWVudDogV2luZG93V2l0aFJlZHV4RGV2VG9vbHMgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgPyB3aW5kb3dcbiAgOiB7fSkgYXMgV2luZG93V2l0aFJlZHV4RGV2VG9vbHM7XG5cbi8qKlxuICogQW4gYW5ndWxhci0yLWlmaWVkIHZlcnNpb24gb2YgdGhlIFJlZHV4IERldlRvb2xzIGNocm9tZSBleHRlbnNpb24uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZXZUb29sc0V4dGVuc2lvbiB7XG4gIC8qKiBAaGlkZGVuICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZiwgcHJpdmF0ZSBuZ1JlZHV4OiBOZ1JlZHV4PGFueT4pIHt9XG5cbiAgLyoqXG4gICAqIEEgd3JhcHBlciBmb3IgdGhlIENocm9tZSBFeHRlbnNpb24gUmVkdXggRGV2VG9vbHMuXG4gICAqIE1ha2VzIHN1cmUgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgdGhlIGV4dGVuc2lvblxuICAgKiB0cmlnZ2VyIEFuZ3VsYXIyJ3MgY2hhbmdlIGRldGVjdG9yLlxuICAgKlxuICAgKiBAYXJndW1lbnQgb3B0aW9uczogZGV2IHRvb2wgb3B0aW9uczsgc2FtZVxuICAgKiBmb3JtYXQgYXMgZGVzY3JpYmVkIGhlcmU6XG4gICAqIFt6YWxtb3hpc3VzL3JlZHV4LWRldnRvb2xzLWV4dGVuc2lvbi9ibG9iL21hc3Rlci9kb2NzL0FQSS9Bcmd1bWVudHMubWRdXG4gICAqL1xuICBlbmhhbmNlciA9IChvcHRpb25zPzogRW5oYW5jZXJPcHRpb25zKSA9PiB7XG4gICAgbGV0IHN1YnNjcmlwdGlvbjogVW5zdWJzY3JpYmU7XG4gICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgY2hhbmdlcyBmcm9tIGRldiB0b29scyB1cGRhdGUgYW5ndWxhcidzIHZpZXcuXG4gICAgdGhpcy5nZXREZXZUb29scygpIS5saXN0ZW4oKHsgdHlwZSB9KSA9PiB7XG4gICAgICBpZiAodHlwZSA9PT0gJ1NUQVJUJykge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSB0aGlzLm5nUmVkdXguc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAoIU5nWm9uZS5pc0luQW5ndWxhclpvbmUoKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYudGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdTVE9QJykge1xuICAgICAgICBzdWJzY3JpcHRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmdldERldlRvb2xzKCkhKG9wdGlvbnMgfHwge30pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGV4dGVuc2lvbiBpcyBpbnN0YWxsZWQgYW5kIGVuYWJsZWQuXG4gICAqL1xuICBpc0VuYWJsZWQgPSAoKSA9PiAhIXRoaXMuZ2V0RGV2VG9vbHMoKTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVkdXggZGV2dG9vbHMgZW5oYW5jZXIuXG4gICAqL1xuICBnZXREZXZUb29scyA9ICgpID0+XG4gICAgZW52aXJvbm1lbnQgJiZcbiAgICAoZW52aXJvbm1lbnQuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyB8fCBlbnZpcm9ubWVudC5kZXZUb29sc0V4dGVuc2lvbik7XG59XG4iXX0=