@datorama/akita
Version:
State Management Tailored-Made for JS Applications
194 lines • 11.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { filterNil } from '../filterNil';
import { toBoolean } from '../toBoolean';
import { getAkitaConfig } from '../config';
/**
* @abstract
* @template State
*/
var /**
* @abstract
* @template State
*/
AkitaPlugin = /** @class */ (function () {
function AkitaPlugin(query, config) {
this.query = query;
if (config && config.resetFn) {
if (getAkitaConfig().resettable) {
this.onReset(config.resetFn);
}
}
}
/** This method is responsible for getting access to the query. */
/**
* This method is responsible for getting access to the query.
* @protected
* @return {?}
*/
AkitaPlugin.prototype.getQuery = /**
* This method is responsible for getting access to the query.
* @protected
* @return {?}
*/
function () {
return this.query;
};
/** This method is responsible for getting access to the store. */
/**
* This method is responsible for getting access to the store.
* @protected
* @return {?}
*/
AkitaPlugin.prototype.getStore = /**
* This method is responsible for getting access to the store.
* @protected
* @return {?}
*/
function () {
return this.getQuery().__store__;
};
/** This method is responsible tells whether the plugin is entityBased or not. */
/**
* This method is responsible tells whether the plugin is entityBased or not.
* @protected
* @param {?} entityId
* @return {?}
*/
AkitaPlugin.prototype.isEntityBased = /**
* This method is responsible tells whether the plugin is entityBased or not.
* @protected
* @param {?} entityId
* @return {?}
*/
function (entityId) {
return toBoolean(entityId);
};
/** This method is responsible for selecting the source; it can be the whole store or one entity. */
/**
* This method is responsible for selecting the source; it can be the whole store or one entity.
* @protected
* @param {?} entityId
* @return {?}
*/
AkitaPlugin.prototype.selectSource = /**
* This method is responsible for selecting the source; it can be the whole store or one entity.
* @protected
* @param {?} entityId
* @return {?}
*/
function (entityId) {
if (this.isEntityBased(entityId)) {
return ((/** @type {?} */ (this.getQuery()))).selectEntity(entityId).pipe(filterNil);
}
return ((/** @type {?} */ (this.getQuery()))).select((/**
* @param {?} state
* @return {?}
*/
function (state) { return state; }));
};
/**
* @protected
* @param {?} entityId
* @return {?}
*/
AkitaPlugin.prototype.getSource = /**
* @protected
* @param {?} entityId
* @return {?}
*/
function (entityId) {
if (this.isEntityBased(entityId)) {
return ((/** @type {?} */ (this.getQuery()))).getEntity(entityId);
}
return this.getQuery().getValue();
};
/** This method is responsible for updating the store or one entity; it can be the whole store or one entity. */
/**
* This method is responsible for updating the store or one entity; it can be the whole store or one entity.
* @protected
* @param {?} newState
* @param {?=} entityId
* @return {?}
*/
AkitaPlugin.prototype.updateStore = /**
* This method is responsible for updating the store or one entity; it can be the whole store or one entity.
* @protected
* @param {?} newState
* @param {?=} entityId
* @return {?}
*/
function (newState, entityId) {
if (this.isEntityBased(entityId)) {
this.getStore().update(entityId, newState);
}
else {
this.getStore()._setState((/**
* @param {?} state
* @return {?}
*/
function (state) { return (tslib_1.__assign({}, state, newState)); }));
}
};
/**
* Function to invoke upon reset
*/
/**
* Function to invoke upon reset
* @private
* @param {?} fn
* @return {?}
*/
AkitaPlugin.prototype.onReset = /**
* Function to invoke upon reset
* @private
* @param {?} fn
* @return {?}
*/
function (fn) {
var _this = this;
/** @type {?} */
var original = this.getStore().reset;
this.getStore().reset = (/**
* @param {...?} params
* @return {?}
*/
function () {
var params = [];
for (var _i = 0; _i < arguments.length; _i++) {
params[_i] = arguments[_i];
}
/** It should run after the plugin destroy method */
setTimeout((/**
* @return {?}
*/
function () {
original.apply(_this.getStore(), params);
fn();
}));
});
};
return AkitaPlugin;
}());
/**
* @abstract
* @template State
*/
export { AkitaPlugin };
if (false) {
/**
* @type {?}
* @protected
*/
AkitaPlugin.prototype.query;
/**
* This method is responsible for cleaning.
* @abstract
* @return {?}
*/
AkitaPlugin.prototype.destroy = function () { };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2FraXRhLyIsInNvdXJjZXMiOlsic3JjL3BsdWdpbnMvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBSTNDOzs7OztJQUNFLHFCQUFnQyxLQUFxQixFQUFFLE1BQStCO1FBQXRELFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ25ELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDNUIsSUFBSSxjQUFjLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsa0VBQWtFOzs7Ozs7SUFDeEQsOEJBQVE7Ozs7O0lBQWxCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrRUFBa0U7Ozs7OztJQUN4RCw4QkFBUTs7Ozs7SUFBbEI7UUFDRSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDbkMsQ0FBQztJQUtELGtGQUFrRjs7Ozs7OztJQUN4RSxtQ0FBYTs7Ozs7O0lBQXZCLFVBQXdCLFFBQWE7UUFDbkMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELG9HQUFvRzs7Ozs7OztJQUMxRixrQ0FBWTs7Ozs7O0lBQXRCLFVBQXVCLFFBQWE7UUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxtQkFBQSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQXNCLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZGO1FBRUQsT0FBTyxDQUFDLG1CQUFBLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBZ0IsQ0FBQyxDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUssRUFBTCxDQUFLLEVBQUMsQ0FBQztJQUNsRSxDQUFDOzs7Ozs7SUFFUywrQkFBUzs7Ozs7SUFBbkIsVUFBb0IsUUFBYTtRQUMvQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxDQUFDLG1CQUFBLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBc0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxnSEFBZ0g7Ozs7Ozs7O0lBQ3RHLGlDQUFXOzs7Ozs7O0lBQXJCLFVBQXNCLFFBQVEsRUFBRSxRQUFTO1FBQ3ZDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVM7Ozs7WUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLHNCQUFNLEtBQUssRUFBSyxRQUFRLEVBQUcsRUFBM0IsQ0FBMkIsRUFBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQUVEOztPQUVHOzs7Ozs7O0lBQ0ssNkJBQU87Ozs7OztJQUFmLFVBQWdCLEVBQVk7UUFBNUIsaUJBU0M7O1lBUk8sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLOzs7O1FBQUc7WUFBQyxnQkFBUztpQkFBVCxVQUFTLEVBQVQscUJBQVMsRUFBVCxJQUFTO2dCQUFULDJCQUFTOztZQUNoQyxvREFBb0Q7WUFDcEQsVUFBVTs7O1lBQUM7Z0JBQ1QsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3hDLEVBQUUsRUFBRSxDQUFDO1lBQ1AsQ0FBQyxFQUFDLENBQUM7UUFDTCxDQUFDLENBQUEsQ0FBQztJQUNKLENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQUFsRUQsSUFrRUM7Ozs7Ozs7Ozs7O0lBakV1Qiw0QkFBK0I7Ozs7OztJQW1CckQsZ0RBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVlcnlFbnRpdHkgfSBmcm9tICcuLi9xdWVyeUVudGl0eSc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IGZpbHRlck5pbCB9IGZyb20gJy4uL2ZpbHRlck5pbCc7XG5pbXBvcnQgeyB0b0Jvb2xlYW4gfSBmcm9tICcuLi90b0Jvb2xlYW4nO1xuaW1wb3J0IHsgZ2V0QWtpdGFDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5leHBvcnQgdHlwZSBRdWVyaWVzPFN0YXRlPiA9IFF1ZXJ5PFN0YXRlPiB8IFF1ZXJ5RW50aXR5PFN0YXRlPjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFraXRhUGx1Z2luPFN0YXRlID0gYW55PiB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcXVlcnk6IFF1ZXJpZXM8U3RhdGU+LCBjb25maWc/OiB7IHJlc2V0Rm4/OiBGdW5jdGlvbiB9KSB7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcucmVzZXRGbikge1xuICAgICAgaWYgKGdldEFraXRhQ29uZmlnKCkucmVzZXR0YWJsZSkge1xuICAgICAgICB0aGlzLm9uUmVzZXQoY29uZmlnLnJlc2V0Rm4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgZ2V0dGluZyBhY2Nlc3MgdG8gdGhlIHF1ZXJ5LiAqL1xuICBwcm90ZWN0ZWQgZ2V0UXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnk7XG4gIH1cblxuICAvKiogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgYWNjZXNzIHRvIHRoZSBzdG9yZS4gKi9cbiAgcHJvdGVjdGVkIGdldFN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5KCkuX19zdG9yZV9fO1xuICB9XG5cbiAgLyoqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZy4gKi9cbiAgcHVibGljIGFic3RyYWN0IGRlc3Ryb3koKTtcblxuICAvKiogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgdGVsbHMgd2hldGhlciB0aGUgcGx1Z2luIGlzIGVudGl0eUJhc2VkIG9yIG5vdC4gICovXG4gIHByb3RlY3RlZCBpc0VudGl0eUJhc2VkKGVudGl0eUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdG9Cb29sZWFuKGVudGl0eUlkKTtcbiAgfVxuXG4gIC8qKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3Igc2VsZWN0aW5nIHRoZSBzb3VyY2U7IGl0IGNhbiBiZSB0aGUgd2hvbGUgc3RvcmUgb3Igb25lIGVudGl0eS4gKi9cbiAgcHJvdGVjdGVkIHNlbGVjdFNvdXJjZShlbnRpdHlJZDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNFbnRpdHlCYXNlZChlbnRpdHlJZCkpIHtcbiAgICAgIHJldHVybiAodGhpcy5nZXRRdWVyeSgpIGFzIFF1ZXJ5RW50aXR5PFN0YXRlPikuc2VsZWN0RW50aXR5KGVudGl0eUlkKS5waXBlKGZpbHRlck5pbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLmdldFF1ZXJ5KCkgYXMgUXVlcnk8U3RhdGU+KS5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvdXJjZShlbnRpdHlJZDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5pc0VudGl0eUJhc2VkKGVudGl0eUlkKSkge1xuICAgICAgcmV0dXJuICh0aGlzLmdldFF1ZXJ5KCkgYXMgUXVlcnlFbnRpdHk8U3RhdGU+KS5nZXRFbnRpdHkoZW50aXR5SWQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5KCkuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIHN0b3JlIG9yIG9uZSBlbnRpdHk7IGl0IGNhbiBiZSB0aGUgd2hvbGUgc3RvcmUgb3Igb25lIGVudGl0eS4gKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZVN0b3JlKG5ld1N0YXRlLCBlbnRpdHlJZD8pIHtcbiAgICBpZiAodGhpcy5pc0VudGl0eUJhc2VkKGVudGl0eUlkKSkge1xuICAgICAgdGhpcy5nZXRTdG9yZSgpLnVwZGF0ZShlbnRpdHlJZCwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFN0b3JlKCkuX3NldFN0YXRlKHN0YXRlID0+ICh7IC4uLnN0YXRlLCAuLi5uZXdTdGF0ZSB9KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGludm9rZSB1cG9uIHJlc2V0XG4gICAqL1xuICBwcml2YXRlIG9uUmVzZXQoZm46IEZ1bmN0aW9uKSB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLmdldFN0b3JlKCkucmVzZXQ7XG4gICAgdGhpcy5nZXRTdG9yZSgpLnJlc2V0ID0gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgLyoqIEl0IHNob3VsZCBydW4gYWZ0ZXIgdGhlIHBsdWdpbiBkZXN0cm95IG1ldGhvZCAqL1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG9yaWdpbmFsLmFwcGx5KHRoaXMuZ2V0U3RvcmUoKSwgcGFyYW1zKTtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==