UNPKG

ngx-base-state

Version:

Base classes for creation state service via Rxjs observable

96 lines 9.66 kB
import { __decorate } from "tslib"; import { map, shareReplay } from 'rxjs'; import { ɵAction as Action } from '../decorators'; import { isObject } from '../helpers'; import { BaseState } from './base.state'; /** * @class * @classdes Record state class. Used for save state with Record type. */ export class RecordState extends BaseState { constructor() { super(...arguments); /** * Get `Observable` with all `keys` of your `Record` object state. * @public */ this.keys$ = this.data$ .pipe(map(() => this.keys), shareReplay(1)); /** * Get `Observable` with all `values` of your `Record` object state. * @public */ this.values$ = this.data$ .pipe(map(() => this.values), shareReplay(1)); } /** * Get all `keys` of your `Record` object state. * @public */ get keys() { return (this.data) ? Object.keys(this.data) : []; } /** * Get all `values` of your `Record` object state. * @public */ get values() { return (this.data) ? Object.values(this.data) : []; } /** * Set item to object in state. * @public * @param {TKey} key - Key to set into. * @param {TValue} value - Value to set within `key`. */ setItem(key, value) { this.data[key] = value; this.setNewValue(this.data); } /** * Remove item from object in state. * @public * @param {TKey} key - Key to remove item within. */ removeItem(key) { delete this.data[key]; this.setNewValue(this.data); } /** * Remove all items from object in state. * @public */ removeAllItems() { this.set({}); } setNewValue(value) { if (value) { super.setNewValue({ ...value }); } else { super.setNewValue(null); } } catchError(error, actionName) { if (error instanceof TypeError) { throw new Error(`\n${this.constructor.name} [${actionName}]: ` + `Firstly set Object [Record].\n\n${error.message}`); } super.catchError(error, actionName); } validateDataType(data) { if (!isObject(data)) { throw new Error(`${this.constructor.name}: Expected data in Object (Record) format!`); } } } __decorate([ Action ], RecordState.prototype, "setItem", null); __decorate([ Action ], RecordState.prototype, "removeItem", null); __decorate([ Action ], RecordState.prototype, "removeAllItems", null); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlicmFyeS9zcmMvbGliL3N0YXRlcy9yZWNvcmQuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQWMsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLFdBQ2xCLFNBQVEsU0FBK0I7SUFEM0M7O1FBa0JJOzs7V0FHQTtRQUNnQixVQUFLLEdBQXVCLElBQUksQ0FBQyxLQUFLO2FBQ2pELElBQUksQ0FDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNwQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUM7UUFFTjs7O1dBR0E7UUFDZ0IsWUFBTyxHQUF5QixJQUFJLENBQUMsS0FBSzthQUNyRCxJQUFJLENBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFDO0lBNERWLENBQUM7SUE5Rkc7OztPQUdBO0lBQ0EsSUFBVyxJQUFJO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7OztPQUdBO0lBQ0EsSUFBVyxNQUFNO1FBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBc0JEOzs7OztPQUtHO0lBRUksT0FBTyxDQUFDLEdBQVMsRUFBRSxLQUFhO1FBQ25DLElBQUksQ0FBQyxJQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBRUksVUFBVSxDQUFDLEdBQVM7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFFSSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBMEIsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFa0IsV0FBVyxDQUFDLEtBQWtDO1FBQzdELElBQUksS0FBSyxFQUFFO1lBQ1AsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQjtJQUNMLENBQUM7SUFFa0IsVUFBVSxDQUFDLEtBQXdCLEVBQUUsVUFBa0I7UUFDdEUsSUFBSSxLQUFLLFlBQVksU0FBUyxFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQ1gsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxVQUFVLEtBQUs7Z0JBQzlDLG1DQUFtQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQ3JELENBQUM7U0FDTDtRQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFa0IsZ0JBQWdCLENBQUMsSUFBYTtRQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksNENBQTRDLENBQUMsQ0FBQztTQUN6RjtJQUNMLENBQUM7Q0FDSjtBQW5ERztJQURDLE1BQU07MENBS047QUFRRDtJQURDLE1BQU07NkNBS047QUFPRDtJQURDLE1BQU07aURBR04iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IMm1QWN0aW9uIGFzIEFjdGlvbiB9IGZyb20gJy4uL2RlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBCYXNlU3RhdGUgfSBmcm9tICcuL2Jhc2Uuc3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqXHRAY2xhc3NcclxuICpcdEBjbGFzc2RlcyBSZWNvcmQgc3RhdGUgY2xhc3MuIFVzZWQgZm9yIHNhdmUgc3RhdGUgd2l0aCBSZWNvcmQgdHlwZS5cclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWNvcmRTdGF0ZTxUS2V5IGV4dGVuZHMgc3RyaW5nLCBUVmFsdWU+XHJcbiAgICBleHRlbmRzIEJhc2VTdGF0ZTxSZWNvcmQ8VEtleSwgVFZhbHVlPj4ge1xyXG4gICAgLyoqXHJcblx0ICogIEdldCBhbGwgYGtleXNgIG9mIHlvdXIgYFJlY29yZGAgb2JqZWN0IHN0YXRlLlxyXG4gICAgICogIEBwdWJsaWNcclxuXHQgKi9cclxuICAgIHB1YmxpYyBnZXQga2V5cygpOiBUS2V5W10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kYXRhKSA/IE9iamVjdC5rZXlzKHRoaXMuZGF0YSkgYXMgVEtleVtdIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcblx0ICogIEdldCBhbGwgYHZhbHVlc2Agb2YgeW91ciBgUmVjb3JkYCBvYmplY3Qgc3RhdGUuXHJcbiAgICAgKiAgQHB1YmxpY1xyXG5cdCAqL1xyXG4gICAgcHVibGljIGdldCB2YWx1ZXMoKTogVFZhbHVlW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kYXRhKSA/IE9iamVjdC52YWx1ZXModGhpcy5kYXRhKSA6IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqICBHZXQgYE9ic2VydmFibGVgIHdpdGggYWxsIGBrZXlzYCBvZiB5b3VyIGBSZWNvcmRgIG9iamVjdCBzdGF0ZS5cclxuICAgICAqICBAcHVibGljXHJcblx0ICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkga2V5cyQ6IE9ic2VydmFibGU8VEtleVtdPiA9IHRoaXMuZGF0YSRcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMua2V5cyksXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAvKipcclxuXHQgKiAgR2V0IGBPYnNlcnZhYmxlYCB3aXRoIGFsbCBgdmFsdWVzYCBvZiB5b3VyIGBSZWNvcmRgIG9iamVjdCBzdGF0ZS5cclxuICAgICAqICBAcHVibGljXHJcblx0ICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVzJDogT2JzZXJ2YWJsZTxUVmFsdWVbXT4gPSB0aGlzLmRhdGEkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLnZhbHVlcyksXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFx0U2V0IGl0ZW0gdG8gb2JqZWN0IGluIHN0YXRlLlxyXG4gICAgICpcdEBwdWJsaWNcclxuICAgICAqXHRAcGFyYW0ge1RLZXl9IGtleSAtIEtleSB0byBzZXQgaW50by5cclxuICAgICAqXHRAcGFyYW0ge1RWYWx1ZX0gdmFsdWUgLSBWYWx1ZSB0byBzZXQgd2l0aGluIGBrZXlgLlxyXG4gICAgICovXHJcbiAgICBAQWN0aW9uXHJcbiAgICBwdWJsaWMgc2V0SXRlbShrZXk6IFRLZXksIHZhbHVlOiBUVmFsdWUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRhdGEhW2tleV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXROZXdWYWx1ZSh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHRSZW1vdmUgaXRlbSBmcm9tIG9iamVjdCBpbiBzdGF0ZS5cclxuICAgICAqXHRAcHVibGljXHJcbiAgICAgKlx0QHBhcmFtIHtUS2V5fSBrZXkgLSBLZXkgdG8gcmVtb3ZlIGl0ZW0gd2l0aGluLlxyXG4gICAgICovXHJcbiAgICBAQWN0aW9uXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShrZXk6IFRLZXkpOiB2b2lkIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5kYXRhIVtrZXldO1xyXG5cclxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcdFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBvYmplY3QgaW4gc3RhdGUuXHJcbiAgICAgKlx0QHB1YmxpY1xyXG4gICAgICovXHJcbiAgICBAQWN0aW9uXHJcbiAgICBwdWJsaWMgcmVtb3ZlQWxsSXRlbXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXQoe30gYXMgUmVjb3JkPFRLZXksIFRWYWx1ZT4pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzZXROZXdWYWx1ZSh2YWx1ZTogUmVjb3JkPFRLZXksIFRWYWx1ZT4gfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLnNldE5ld1ZhbHVlKHsgLi4udmFsdWUgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3VwZXIuc2V0TmV3VmFsdWUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjYXRjaEVycm9yKGVycm9yOiBFcnJvciB8IFR5cGVFcnJvciwgYWN0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgIGBcXG4ke3RoaXMuY29uc3RydWN0b3IubmFtZX0gWyR7YWN0aW9uTmFtZX1dOiBgICtcclxuICAgICAgICAgICAgICAgIGBGaXJzdGx5IHNldCBPYmplY3QgW1JlY29yZF0uXFxuXFxuJHtlcnJvci5tZXNzYWdlfWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyLmNhdGNoRXJyb3IoZXJyb3IsIGFjdGlvbk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2YWxpZGF0ZURhdGFUeXBlKGRhdGE6IHVua25vd24pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBFeHBlY3RlZCBkYXRhIGluIE9iamVjdCAoUmVjb3JkKSBmb3JtYXQhYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==