UNPKG

@datorama/akita

Version:

State Management Tailored-Made for JS Applications

135 lines 9.23 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { filterNil } from '../filterNil'; import { toBoolean } from '../toBoolean'; import { getAkitaConfig } from '../config'; /** * @abstract * @template State */ export class AkitaPlugin { /** * @protected * @param {?} query * @param {?=} config */ constructor(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. * @protected * @return {?} */ getQuery() { return this.query; } /** * This method is responsible for getting access to the store. * @protected * @return {?} */ getStore() { return this.getQuery().__store__; } /** * This method is responsible tells whether the plugin is entityBased or not. * @protected * @param {?} entityId * @return {?} */ isEntityBased(entityId) { return toBoolean(entityId); } /** * This method is responsible for selecting the source; it can be the whole store or one entity. * @protected * @param {?} entityId * @return {?} */ selectSource(entityId) { if (this.isEntityBased(entityId)) { return ((/** @type {?} */ (this.getQuery()))).selectEntity(entityId).pipe(filterNil); } return ((/** @type {?} */ (this.getQuery()))).select((/** * @param {?} state * @return {?} */ state => state)); } /** * @protected * @param {?} entityId * @return {?} */ getSource(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. * @protected * @param {?} newState * @param {?=} entityId * @return {?} */ updateStore(newState, entityId) { if (this.isEntityBased(entityId)) { this.getStore().update(entityId, newState); } else { this.getStore()._setState((/** * @param {?} state * @return {?} */ state => (Object.assign({}, state, newState)))); } } /** * Function to invoke upon reset * @private * @param {?} fn * @return {?} */ onReset(fn) { /** @type {?} */ const original = this.getStore().reset; this.getStore().reset = (/** * @param {...?} params * @return {?} */ (...params) => { /** It should run after the plugin destroy method */ setTimeout((/** * @return {?} */ () => { original.apply(this.getStore(), params); fn(); })); }); } } if (false) { /** * @type {?} * @protected */ AkitaPlugin.prototype.query; /** * This method is responsible for cleaning. * @abstract * @return {?} */ AkitaPlugin.prototype.destroy = function () { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2FraXRhLyIsInNvdXJjZXMiOlsic3JjL3BsdWdpbnMvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFJM0MsTUFBTSxPQUFnQixXQUFXOzs7Ozs7SUFDL0IsWUFBZ0MsS0FBcUIsRUFBRSxNQUErQjtRQUF0RCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNuRCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQzVCLElBQUksY0FBYyxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM5QjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7O0lBR1MsUUFBUTtRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQzs7Ozs7O0lBR1MsUUFBUTtRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDbkMsQ0FBQzs7Ozs7OztJQU1TLGFBQWEsQ0FBQyxRQUFhO1FBQ25DLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Ozs7Ozs7SUFHUyxZQUFZLENBQUMsUUFBYTtRQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxDQUFDLG1CQUFBLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBc0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkY7UUFFRCxPQUFPLENBQUMsbUJBQUEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFnQixDQUFDLENBQUMsTUFBTTs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFDLENBQUM7SUFDbEUsQ0FBQzs7Ozs7O0lBRVMsU0FBUyxDQUFDLFFBQWE7UUFDL0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxtQkFBQSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQXNCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEU7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzs7Ozs7OztJQUdTLFdBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUztRQUN2QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDNUM7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTOzs7O1lBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxtQkFBTSxLQUFLLEVBQUssUUFBUSxFQUFHLEVBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7Ozs7Ozs7SUFLTyxPQUFPLENBQUMsRUFBWTs7Y0FDcEIsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLOzs7O1FBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFO1lBQ3BDLG9EQUFvRDtZQUNwRCxVQUFVOzs7WUFBQyxHQUFHLEVBQUU7Z0JBQ2QsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3hDLEVBQUUsRUFBRSxDQUFDO1lBQ1AsQ0FBQyxFQUFDLENBQUM7UUFDTCxDQUFDLENBQUEsQ0FBQztJQUNKLENBQUM7Q0FDRjs7Ozs7O0lBakV1Qiw0QkFBK0I7Ozs7OztJQW1CckQsZ0RBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVlcnlFbnRpdHkgfSBmcm9tICcuLi9xdWVyeUVudGl0eSc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IGZpbHRlck5pbCB9IGZyb20gJy4uL2ZpbHRlck5pbCc7XG5pbXBvcnQgeyB0b0Jvb2xlYW4gfSBmcm9tICcuLi90b0Jvb2xlYW4nO1xuaW1wb3J0IHsgZ2V0QWtpdGFDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5leHBvcnQgdHlwZSBRdWVyaWVzPFN0YXRlPiA9IFF1ZXJ5PFN0YXRlPiB8IFF1ZXJ5RW50aXR5PFN0YXRlPjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFraXRhUGx1Z2luPFN0YXRlID0gYW55PiB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcXVlcnk6IFF1ZXJpZXM8U3RhdGU+LCBjb25maWc/OiB7IHJlc2V0Rm4/OiBGdW5jdGlvbiB9KSB7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcucmVzZXRGbikge1xuICAgICAgaWYgKGdldEFraXRhQ29uZmlnKCkucmVzZXR0YWJsZSkge1xuICAgICAgICB0aGlzLm9uUmVzZXQoY29uZmlnLnJlc2V0Rm4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgZ2V0dGluZyBhY2Nlc3MgdG8gdGhlIHF1ZXJ5LiAqL1xuICBwcm90ZWN0ZWQgZ2V0UXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnk7XG4gIH1cblxuICAvKiogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgYWNjZXNzIHRvIHRoZSBzdG9yZS4gKi9cbiAgcHJvdGVjdGVkIGdldFN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5KCkuX19zdG9yZV9fO1xuICB9XG5cbiAgLyoqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZy4gKi9cbiAgcHVibGljIGFic3RyYWN0IGRlc3Ryb3koKTtcblxuICAvKiogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgdGVsbHMgd2hldGhlciB0aGUgcGx1Z2luIGlzIGVudGl0eUJhc2VkIG9yIG5vdC4gICovXG4gIHByb3RlY3RlZCBpc0VudGl0eUJhc2VkKGVudGl0eUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdG9Cb29sZWFuKGVudGl0eUlkKTtcbiAgfVxuXG4gIC8qKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3Igc2VsZWN0aW5nIHRoZSBzb3VyY2U7IGl0IGNhbiBiZSB0aGUgd2hvbGUgc3RvcmUgb3Igb25lIGVudGl0eS4gKi9cbiAgcHJvdGVjdGVkIHNlbGVjdFNvdXJjZShlbnRpdHlJZDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNFbnRpdHlCYXNlZChlbnRpdHlJZCkpIHtcbiAgICAgIHJldHVybiAodGhpcy5nZXRRdWVyeSgpIGFzIFF1ZXJ5RW50aXR5PFN0YXRlPikuc2VsZWN0RW50aXR5KGVudGl0eUlkKS5waXBlKGZpbHRlck5pbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLmdldFF1ZXJ5KCkgYXMgUXVlcnk8U3RhdGU+KS5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvdXJjZShlbnRpdHlJZDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5pc0VudGl0eUJhc2VkKGVudGl0eUlkKSkge1xuICAgICAgcmV0dXJuICh0aGlzLmdldFF1ZXJ5KCkgYXMgUXVlcnlFbnRpdHk8U3RhdGU+KS5nZXRFbnRpdHkoZW50aXR5SWQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5KCkuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIHN0b3JlIG9yIG9uZSBlbnRpdHk7IGl0IGNhbiBiZSB0aGUgd2hvbGUgc3RvcmUgb3Igb25lIGVudGl0eS4gKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZVN0b3JlKG5ld1N0YXRlLCBlbnRpdHlJZD8pIHtcbiAgICBpZiAodGhpcy5pc0VudGl0eUJhc2VkKGVudGl0eUlkKSkge1xuICAgICAgdGhpcy5nZXRTdG9yZSgpLnVwZGF0ZShlbnRpdHlJZCwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFN0b3JlKCkuX3NldFN0YXRlKHN0YXRlID0+ICh7IC4uLnN0YXRlLCAuLi5uZXdTdGF0ZSB9KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGludm9rZSB1cG9uIHJlc2V0XG4gICAqL1xuICBwcml2YXRlIG9uUmVzZXQoZm46IEZ1bmN0aW9uKSB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLmdldFN0b3JlKCkucmVzZXQ7XG4gICAgdGhpcy5nZXRTdG9yZSgpLnJlc2V0ID0gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgLyoqIEl0IHNob3VsZCBydW4gYWZ0ZXIgdGhlIHBsdWdpbiBkZXN0cm95IG1ldGhvZCAqL1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG9yaWdpbmFsLmFwcGx5KHRoaXMuZ2V0U3RvcmUoKSwgcGFyYW1zKTtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==