UNPKG

@loona/angular

Version:

App State Management done with GraphQL (angular integration)

165 lines 11.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { buildContext, getNameOfMutation, isMutationAsAction, METADATA_KEY, buildGetCacheKey, } from '@loona/core'; import { Injectable, Inject } from '@angular/core'; import { ApolloCache } from 'apollo-cache'; import { Apollo } from 'apollo-angular'; import { Loona } from './client'; import { LOONA_CACHE } from './tokens'; import { ScannedActions } from './actions'; var Effects = /** @class */ (function () { function Effects(loona, apollo, cache) { this.effects = {}; this.getContext = function () { return (tslib_1.__assign({}, buildContext({ cache: cache, getCacheKey: buildGetCacheKey(cache), }, apollo.getClient()), { dispatch: loona.dispatch.bind(loona) })); }; } /** * @param {?} instance * @param {?=} meta * @return {?} */ Effects.prototype.addEffects = /** * @param {?} instance * @param {?=} meta * @return {?} */ function (instance, meta) { var _this = this; if (!meta) { return; } var _loop_1 = function (type) { if (!this_1.effects[type]) { this_1.effects[type] = []; } meta[type].forEach(function (_a) { var propName = _a.propName; _this.effects[type].push(instance[propName].bind(instance)); }); }; var this_1 = this; for (var type in meta) { _loop_1(type); } }; /** * @param {?} action * @return {?} */ Effects.prototype.runEffects = /** * @param {?} action * @return {?} */ function (action) { var _this = this; /** @type {?} */ var type = action.type; if (isMutationAsAction(action)) { type = getNameOfMutation(action.options.mutation); } /** @type {?} */ var effectsToRun = this.effects[type]; if (effectsToRun) { effectsToRun.forEach(function (effect) { effect(action, _this.getContext()); }); } }; Effects.decorators = [ { type: Injectable } ]; /** @nocollapse */ Effects.ctorParameters = function () { return [ { type: Loona }, { type: Apollo }, { type: ApolloCache, decorators: [{ type: Inject, args: [LOONA_CACHE,] }] } ]; }; return Effects; }()); export { Effects }; if (false) { /** @type {?} */ Effects.prototype.effects; /** @type {?} */ Effects.prototype.getContext; } var EffectsRunner = /** @class */ (function () { function EffectsRunner(effects, scannedActions) { this.effects = effects; this.scannedActions = scannedActions; this.actionsSubscription = null; } /** * @return {?} */ EffectsRunner.prototype.start = /** * @return {?} */ function () { var _this = this; if (!this.actionsSubscription) { this.actionsSubscription = this.scannedActions.subscribe(function (action) { _this.effects.runEffects(action); }); } }; /** * @return {?} */ EffectsRunner.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.actionsSubscription) { this.actionsSubscription.unsubscribe(); this.actionsSubscription = null; } }; EffectsRunner.decorators = [ { type: Injectable } ]; /** @nocollapse */ EffectsRunner.ctorParameters = function () { return [ { type: Effects }, { type: ScannedActions } ]; }; return EffectsRunner; }()); export { EffectsRunner }; if (false) { /** @type {?} */ EffectsRunner.prototype.actionsSubscription; /** @type {?} */ EffectsRunner.prototype.effects; /** @type {?} */ EffectsRunner.prototype.scannedActions; } /** * @return {?} */ export function mapStates() { /** @type {?} */ var names = []; /** @type {?} */ var add = function (state) { names.push(state.constructor && state.constructor.name); }; return { names: names, add: add }; } /** * @param {?} state * @param {?} injector * @return {?} */ export function extractState(state, injector) { return { instance: injector.get(state), meta: state[METADATA_KEY], }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0cy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bsb29uYS9hbmd1bGFyLyIsInNvdXJjZXMiOlsiZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGtCQUFrQixFQU1sQixZQUFZLEVBQ1osZ0JBQWdCLEdBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUV6QztJQUtFLGlCQUNFLEtBQVksRUFDWixNQUFjLEVBQ08sS0FBdUI7UUFOOUMsWUFBTyxHQUF3QyxFQUFFLENBQUM7UUFRaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFNLE9BQUEsc0JBQ25CLFlBQVksQ0FDYjtZQUNFLEtBQUssT0FBQTtZQUNMLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7U0FDckMsRUFDRCxNQUFNLENBQUMsU0FBUyxFQUFFLENBQ25CLElBQ0QsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUNwQyxFQVRzQixDQVN0QixDQUFDO0lBQ0wsQ0FBQzs7Ozs7O0lBRUQsNEJBQVU7Ozs7O0lBQVYsVUFBVyxRQUFhLEVBQUUsSUFBdUI7UUFBakQsaUJBY0M7UUFiQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTztTQUNSO2dDQUVVLElBQUk7WUFDYixJQUFJLENBQUMsT0FBSyxP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QUcsQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUM7S0FDMUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBidWlsZENvbnRleHQsXG4gIGdldE5hbWVPZk11dGF0aW9uLFxuICBpc011dGF0aW9uQXNBY3Rpb24sXG4gIE1ldGFkYXRhLFxuICBFZmZlY3RNZXRob2QsXG4gIEFjdGlvbixcbiAgRWZmZWN0Q29udGV4dCxcbiAgU3RhdGVDbGFzcyxcbiAgTUVUQURBVEFfS0VZLFxuICBidWlsZEdldENhY2hlS2V5LFxufSBmcm9tICdAbG9vbmEvY29yZSc7XG5pbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgT25EZXN0cm95LCBJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fwb2xsb0NhY2hlfSBmcm9tICdhcG9sbG8tY2FjaGUnO1xuaW1wb3J0IHtBcG9sbG99IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtMb29uYX0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHtMT09OQV9DQUNIRX0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHtTY2FubmVkQWN0aW9uc30gZnJvbSAnLi9hY3Rpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVmZmVjdHMge1xuICBlZmZlY3RzOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxFZmZlY3RNZXRob2Q+PiA9IHt9O1xuICBnZXRDb250ZXh0OiAoKSA9PiBFZmZlY3RDb250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxvb25hOiBMb29uYSxcbiAgICBhcG9sbG86IEFwb2xsbyxcbiAgICBASW5qZWN0KExPT05BX0NBQ0hFKSBjYWNoZTogQXBvbGxvQ2FjaGU8YW55PixcbiAgKSB7XG4gICAgdGhpcy5nZXRDb250ZXh0ID0gKCkgPT4gKHtcbiAgICAgIC4uLmJ1aWxkQ29udGV4dChcbiAgICAgICAge1xuICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgIGdldENhY2hlS2V5OiBidWlsZEdldENhY2hlS2V5KGNhY2hlKSxcbiAgICAgICAgfSxcbiAgICAgICAgYXBvbGxvLmdldENsaWVudCgpLFxuICAgICAgKSxcbiAgICAgIGRpc3BhdGNoOiBsb29uYS5kaXNwYXRjaC5iaW5kKGxvb25hKSxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEVmZmVjdHMoaW5zdGFuY2U6IGFueSwgbWV0YT86IE1ldGFkYXRhLkVmZmVjdHMpIHtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgaW4gbWV0YSkge1xuICAgICAgaWYgKCF0aGlzLmVmZmVjdHNbdHlwZV0pIHtcbiAgICAgICAgdGhpcy5lZmZlY3RzW3R5cGVdID0gW107XG4gICAgICB9XG5cbiAgICAgIG1ldGFbdHlwZV0uZm9yRWFjaCgoe3Byb3BOYW1lfSkgPT4ge1xuICAgICAgICB0aGlzLmVmZmVjdHNbdHlwZV0ucHVzaChpbnN0YW5jZVtwcm9wTmFtZV0uYmluZChpbnN0YW5jZSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcnVuRWZmZWN0cyhhY3Rpb246IEFjdGlvbikge1xuICAgIGxldCB0eXBlID0gYWN0aW9uLnR5cGU7XG5cbiAgICBpZiAoaXNNdXRhdGlvbkFzQWN0aW9uKGFjdGlvbikpIHtcbiAgICAgIHR5cGUgPSBnZXROYW1lT2ZNdXRhdGlvbihhY3Rpb24ub3B0aW9ucy5tdXRhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgZWZmZWN0c1RvUnVuID0gdGhpcy5lZmZlY3RzW3R5cGVdO1xuXG4gICAgaWYgKGVmZmVjdHNUb1J1bikge1xuICAgICAgZWZmZWN0c1RvUnVuLmZvckVhY2goZWZmZWN0ID0+IHtcbiAgICAgICAgZWZmZWN0KGFjdGlvbiwgdGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFZmZlY3RzUnVubmVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBhY3Rpb25zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVmZmVjdHM6IEVmZmVjdHMsXG4gICAgcHJpdmF0ZSBzY2FubmVkQWN0aW9uczogU2Nhbm5lZEFjdGlvbnMsXG4gICkge31cblxuICBzdGFydCgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aW9uc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5hY3Rpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5zY2FubmVkQWN0aW9ucy5zdWJzY3JpYmUoYWN0aW9uID0+IHtcbiAgICAgICAgdGhpcy5lZmZlY3RzLnJ1bkVmZmVjdHMoYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmFjdGlvbnNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5hY3Rpb25zU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFN0YXRlcygpIHtcbiAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGFkZCA9IChzdGF0ZTogYW55KSA9PiB7XG4gICAgbmFtZXMucHVzaChzdGF0ZS5jb25zdHJ1Y3RvciAmJiBzdGF0ZS5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgfTtcblxuICByZXR1cm4ge25hbWVzLCBhZGR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0YXRlKFxuICBzdGF0ZTogU3RhdGVDbGFzczxNZXRhZGF0YT4sXG4gIGluamVjdG9yOiBJbmplY3Rvcixcbik6IHtcbiAgaW5zdGFuY2U6IGFueTtcbiAgbWV0YTogTWV0YWRhdGE7XG59IHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5qZWN0b3IuZ2V0KHN0YXRlKSxcbiAgICBtZXRhOiBzdGF0ZVtNRVRBREFUQV9LRVldLFxuICB9O1xufVxuIl19