@datorama/akita
Version:
State Management Tailored-Made for JS Applications
135 lines • 9.23 kB
JavaScript
/**
* @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==