UNPKG

ngx-diagrams

Version:

> Light Weight, Modular, Typed Diagram Engine for Angular

68 lines 8.63 kB
import { Subject } from 'rxjs'; import { map } from 'rxjs/operators'; import { BaseEvent, LockEvent } from './interfaces/event.interface'; import { createValueState } from './state/state'; import { entityProperty as _entityProperty, log as _log, LOG_LEVEL, UID, withLog as _withLog } from './utils/tool-kit.util'; export class BaseEntity { constructor(id, logPrefix = '') { this.destroyed$ = new Subject(); this.locked$ = createValueState(false, this.entityPipe('locked')); this._id = id || UID(); this._logPrefix = `${logPrefix}`; } get id() { return this._id; } set id(id) { this._id = id; } log(message, ...args) { _log(`${this._logPrefix} ${message}: `, LOG_LEVEL.LOG, ...args); } withLog(message, ...args) { return _withLog(`${this._logPrefix} ${message}: `, LOG_LEVEL.LOG, ...args); } entityPipe(logMessage = '') { return _entityProperty(this.onEntityDestroy(), 0, `${this._logPrefix}: ${logMessage}`); } getLocked() { return this.locked$.value; } setLocked(locked = true) { this.locked$.set(locked).emit(); } // eslint-disable-next-line doClone(lookupTable = {}, clone) { /*noop*/ } clone(lookupTable = {}) { // try and use an existing clone first if (lookupTable[this.id]) { return lookupTable[this.id]; } const clone = Object.assign({}, this); clone.id = UID(); // clone.clearListeners(); lookupTable[this.id] = clone; this.doClone(lookupTable, clone); return clone; } serialize() { return { id: this.id, locked: this.getLocked() }; } lockChanges() { return this.locked$.select((locked) => new LockEvent(this, locked)); } destroy() { this.log('entity destroyed'); this.destroyed$.next(); this.destroyed$.complete(); } onEntityDestroy() { return this.destroyed$.pipe(map((opts) => new BaseEvent(this, opts))); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9uZ3gtZGlhZ3JhbXMvc3JjLyIsInNvdXJjZXMiOlsibGliL2Jhc2UuZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0MsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsY0FBYyxJQUFJLGVBQWUsRUFFakMsR0FBRyxJQUFJLElBQUksRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNILE9BQU8sSUFBSSxRQUFRLEVBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFLL0IsTUFBTSxPQUFPLFVBQVU7SUFRckIsWUFBWSxFQUFPLEVBQUUsU0FBUyxHQUFHLEVBQUU7UUFMekIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDakMsWUFBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFLckUsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksRUFBRSxDQUFDLEVBQU07UUFDWCxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsR0FBRyxDQUFDLE9BQWUsRUFBRSxHQUFHLElBQVM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlLEVBQUUsR0FBRyxJQUFTO1FBQ25DLE9BQU8sUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELFVBQVUsQ0FBSSxVQUFVLEdBQUcsRUFBRTtRQUMzQixPQUFPLGVBQWUsQ0FBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsT0FBTyxDQUFDLGNBQTRCLEVBQUUsRUFBRSxLQUFVO1FBQ2hELFFBQVE7SUFDVixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQTRCLEVBQUU7UUFDbEMsc0NBQXNDO1FBQ3RDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN4QixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDN0I7UUFDRCxNQUFNLEtBQUsscUJBQVEsSUFBSSxDQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNqQiwwQkFBMEI7UUFDMUIsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VFdmVudCwgTG9ja0V2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2V2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBjcmVhdGVWYWx1ZVN0YXRlIH0gZnJvbSAnLi9zdGF0ZS9zdGF0ZSc7XG5pbXBvcnQge1xuICBlbnRpdHlQcm9wZXJ0eSBhcyBfZW50aXR5UHJvcGVydHksXG4gIElELFxuICBsb2cgYXMgX2xvZyxcbiAgTE9HX0xFVkVMLFxuICBVSUQsXG4gIHdpdGhMb2cgYXMgX3dpdGhMb2dcbn0gZnJvbSAnLi91dGlscy90b29sLWtpdC51dGlsJztcbmltcG9ydCB7IEhhc2hNYXAgfSBmcm9tICcuL3V0aWxzL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQmFzZUVudGl0eVR5cGUgPSAnbm9kZScgfCAnbGluaycgfCAncG9ydCcgfCAncG9pbnQnO1xuXG5leHBvcnQgY2xhc3MgQmFzZUVudGl0eSB7XG4gIHByb3RlY3RlZCBfaWQ6IElEO1xuXG4gIHByb3RlY3RlZCBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJvdGVjdGVkIGxvY2tlZCQgPSBjcmVhdGVWYWx1ZVN0YXRlKGZhbHNlLCB0aGlzLmVudGl0eVBpcGUoJ2xvY2tlZCcpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2xvZ1ByZWZpeDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGlkPzogSUQsIGxvZ1ByZWZpeCA9ICcnKSB7XG4gICAgdGhpcy5faWQgPSBpZCB8fCBVSUQoKTtcbiAgICB0aGlzLl9sb2dQcmVmaXggPSBgJHtsb2dQcmVmaXh9YDtcbiAgfVxuXG4gIGdldCBpZCgpOiBJRCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgc2V0IGlkKGlkOiBJRCkge1xuICAgIHRoaXMuX2lkID0gaWQ7XG4gIH1cblxuICBsb2cobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBfbG9nKGAke3RoaXMuX2xvZ1ByZWZpeH0gJHttZXNzYWdlfTogYCwgTE9HX0xFVkVMLkxPRywgLi4uYXJncyk7XG4gIH1cblxuICB3aXRoTG9nKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55KTogYW55IHtcbiAgICByZXR1cm4gX3dpdGhMb2coYCR7dGhpcy5fbG9nUHJlZml4fSAke21lc3NhZ2V9OiBgLCBMT0dfTEVWRUwuTE9HLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGVudGl0eVBpcGU8VD4obG9nTWVzc2FnZSA9ICcnKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgICByZXR1cm4gX2VudGl0eVByb3BlcnR5PFQ+KHRoaXMub25FbnRpdHlEZXN0cm95KCksIDAsIGAke3RoaXMuX2xvZ1ByZWZpeH06ICR7bG9nTWVzc2FnZX1gKTtcbiAgfVxuXG4gIGdldExvY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2NrZWQkLnZhbHVlO1xuICB9XG5cbiAgc2V0TG9ja2VkKGxvY2tlZCA9IHRydWUpIHtcbiAgICB0aGlzLmxvY2tlZCQuc2V0KGxvY2tlZCkuZW1pdCgpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGRvQ2xvbmUobG9va3VwVGFibGU6IEhhc2hNYXA8YW55PiA9IHt9LCBjbG9uZTogYW55KSB7XG4gICAgLypub29wKi9cbiAgfVxuXG4gIGNsb25lKGxvb2t1cFRhYmxlOiBIYXNoTWFwPGFueT4gPSB7fSkge1xuICAgIC8vIHRyeSBhbmQgdXNlIGFuIGV4aXN0aW5nIGNsb25lIGZpcnN0XG4gICAgaWYgKGxvb2t1cFRhYmxlW3RoaXMuaWRdKSB7XG4gICAgICByZXR1cm4gbG9va3VwVGFibGVbdGhpcy5pZF07XG4gICAgfVxuICAgIGNvbnN0IGNsb25lID0geyAuLi50aGlzIH07XG4gICAgY2xvbmUuaWQgPSBVSUQoKTtcbiAgICAvLyBjbG9uZS5jbGVhckxpc3RlbmVycygpO1xuICAgIGxvb2t1cFRhYmxlW3RoaXMuaWRdID0gY2xvbmU7XG5cbiAgICB0aGlzLmRvQ2xvbmUobG9va3VwVGFibGUsIGNsb25lKTtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBzZXJpYWxpemUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbG9ja2VkOiB0aGlzLmdldExvY2tlZCgpXG4gICAgfTtcbiAgfVxuXG4gIGxvY2tDaGFuZ2VzKCk6IE9ic2VydmFibGU8TG9ja0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMubG9ja2VkJC5zZWxlY3QoKGxvY2tlZCkgPT4gbmV3IExvY2tFdmVudCh0aGlzLCBsb2NrZWQpKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5sb2coJ2VudGl0eSBkZXN0cm95ZWQnKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25FbnRpdHlEZXN0cm95KCk6IE9ic2VydmFibGU8QmFzZUV2ZW50PEJhc2VFbnRpdHk+PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveWVkJC5waXBlKG1hcCgob3B0cykgPT4gbmV3IEJhc2VFdmVudCh0aGlzLCBvcHRzKSkpO1xuICB9XG59XG4iXX0=