@loona/angular
Version:
App State Management done with GraphQL (angular integration)
165 lines • 11.9 kB
JavaScript
/**
* @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