UNPKG

ngx-diagrams

Version:

> Light Weight, Modular, Typed Diagram Engine for Angular

88 lines 10.5 kB
import { BehaviorSubject } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { isArray, mapToEntries } from '../utils'; export class ValueState { constructor(value, operator) { this.stream$ = new BehaviorSubject(value); this.value$ = operator ? this.stream$.pipe(operator) : this.stream$.asObservable(); } get value() { return this.stream$.getValue(); } set(value) { this.stream$.next(value); return this; } emit() { this.stream$.next(this.value); } select(project) { const mapFn = project || ((v) => v); return this.value$.pipe(map((value) => mapFn(value)), distinctUntilChanged()); } } export function createValueState(value, operator) { return new ValueState(value, operator); } export class EntityState extends ValueState { constructor(value, entityPipe) { super(value, entityPipe); } destroy() { this.clear(); this.stream$ = null; this.value$ = null; } clear(destroy = true) { if (destroy) { this.forEach((entity) => entity.destroy()); } this.value.clear(); return this; } get(id) { return this.value.get(id); } has(id) { return this.value.has(id); } add(entity) { this.value.set(entity.id, entity); return this; } addMany(entities) { for (const entity of entities) { this.add(entity); } return this; } remove(id, destroy = true) { var _a; if (destroy) { (_a = this.value.get(id)) === null || _a === void 0 ? void 0 : _a.destroy(); } this.value.delete(id); return this; } array() { return Array.from(this.value.values()); } array$() { return this.select((value) => Array.from(value.values())); } forEach(cb) { this.value.forEach(cb); } map(cb) { return this.array().map(cb); } } export function createEntityState(value = [], entityPipe) { if (isArray(value)) { return new EntityState(new Map(value), entityPipe); } else { return new EntityState(new Map(mapToEntries(value)), entityPipe); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9uZ3gtZGlhZ3JhbXMvc3JjLyIsInNvdXJjZXMiOlsibGliL3N0YXRlL3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQTBELE1BQU0sTUFBTSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQU0sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdyRCxNQUFNLE9BQU8sVUFBVTtJQUtyQixZQUFZLEtBQVMsRUFBRSxRQUFxQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxHQUFHLENBQUMsS0FBUTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUtELE1BQU0sQ0FBSSxPQUErQztRQUN2RCxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJ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QUFDLEVBQUU7UUFDbEIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNwRDtTQUFNO1FBQ0wsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNsRTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VFbnRpdHkgfSBmcm9tICcuLi9iYXNlLmVudGl0eSc7XG5pbXBvcnQgeyBJRCwgaXNBcnJheSwgbWFwVG9FbnRyaWVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRW50aXR5TWFwLCBFbnRyaWVzLCBIYXNoTWFwIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgVmFsdWVTdGF0ZTxUPiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdHJlYW0kOiBCZWhhdmlvclN1YmplY3Q8VD47XG5cbiAgcmVhZG9ubHkgdmFsdWUkOiBPYnNlcnZhYmxlPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlPzogVCwgb3BlcmF0b3I/OiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgYW55Pikge1xuICAgIHRoaXMuc3RyZWFtJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodmFsdWUpO1xuICAgIHRoaXMudmFsdWUkID0gb3BlcmF0b3IgPyB0aGlzLnN0cmVhbSQucGlwZShvcGVyYXRvcikgOiB0aGlzLnN0cmVhbSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0KHZhbHVlOiBUKTogVmFsdWVTdGF0ZTxUPiB7XG4gICAgdGhpcy5zdHJlYW0kLm5leHQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZW1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0cmVhbSQubmV4dCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHNlbGVjdCgpOiBPYnNlcnZhYmxlPFQ+O1xuICBzZWxlY3QocHJvamVjdDogKHZhbHVlOiBUKSA9PiBUKTogT2JzZXJ2YWJsZTxUPjtcbiAgc2VsZWN0PFI+KHByb2plY3Q6ICh2YWx1ZTogVCkgPT4gUik6IE9ic2VydmFibGU8Uj47XG4gIHNlbGVjdDxSPihwcm9qZWN0PzogKCh2YWx1ZTogVCkgPT4gVCkgfCAoKHZhbHVlOiBUKSA9PiBSKSk6IE9ic2VydmFibGU8VCB8IFI+IHtcbiAgICBjb25zdCBtYXBGbiA9IHByb2plY3QgfHwgKCh2KSA9PiB2KTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSQucGlwZShcbiAgICAgIG1hcCgodmFsdWUpID0+IG1hcEZuKHZhbHVlKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmFsdWVTdGF0ZTxUPih2YWx1ZTogVCwgb3BlcmF0b3I/OiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgYW55Pik6IFZhbHVlU3RhdGU8VD4ge1xuICByZXR1cm4gbmV3IFZhbHVlU3RhdGU8VD4odmFsdWUsIG9wZXJhdG9yKTtcbn1cblxuZXhwb3J0IGNsYXNzIEVudGl0eVN0YXRlPFQgZXh0ZW5kcyBCYXNlRW50aXR5PiBleHRlbmRzIFZhbHVlU3RhdGU8RW50aXR5TWFwPFQ+PiB7XG4gIHByb3RlY3RlZCBzdHJlYW0kOiBCZWhhdmlvclN1YmplY3Q8RW50aXR5TWFwPFQ+PjtcblxuICB2YWx1ZSQ6IE9ic2VydmFibGU8RW50aXR5TWFwPFQ+PjtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZT86IEVudGl0eU1hcDxUPiwgZW50aXR5UGlwZT86IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxFbnRpdHlNYXA8VD4+KSB7XG4gICAgc3VwZXIodmFsdWUsIGVudGl0eVBpcGUpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5zdHJlYW0kID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlJCA9IG51bGw7XG4gIH1cblxuICBjbGVhcihkZXN0cm95ID0gdHJ1ZSkge1xuICAgIGlmIChkZXN0cm95KSB7XG4gICAgICB0aGlzLmZvckVhY2goKGVudGl0eSkgPT4gZW50aXR5LmRlc3Ryb3koKSk7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZS5jbGVhcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGlkOiBJRCk6IFQge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmdldChpZCk7XG4gIH1cblxuICBoYXMoaWQ6IElEKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUuaGFzKGlkKTtcbiAgfVxuXG4gIGFkZChlbnRpdHk6IFQpOiBFbnRpdHlTdGF0ZTxUPiB7XG4gICAgdGhpcy52YWx1ZS5zZXQoZW50aXR5LmlkLCBlbnRpdHkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkTWFueShlbnRpdGllczogVFtdKTogRW50aXR5U3RhdGU8VD4ge1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgICB0aGlzLmFkZChlbnRpdHkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbW92ZShpZDogSUQsIGRlc3Ryb3kgPSB0cnVlKTogRW50aXR5U3RhdGU8VD4ge1xuICAgIGlmIChkZXN0cm95KSB7XG4gICAgICB0aGlzLnZhbHVlLmdldChpZCk/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlLmRlbGV0ZShpZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhcnJheSgpOiBUW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudmFsdWUudmFsdWVzKCkpO1xuICB9XG5cbiAgYXJyYXkkKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KCh2YWx1ZSkgPT4gQXJyYXkuZnJvbSh2YWx1ZS52YWx1ZXMoKSkpO1xuICB9XG5cbiAgZm9yRWFjaChjYjogKHZhbHVlOiBULCBrZXk6IHN0cmluZywgbWFwOiBFbnRpdHlNYXA8VD4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLmZvckVhY2goY2IpO1xuICB9XG5cbiAgbWFwPFIgPSBhbnk+KGNiOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBUW10pID0+IFIpOiBSW10ge1xuICAgIHJldHVybiB0aGlzLmFycmF5KCkubWFwKGNiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW50aXR5U3RhdGU8VCBleHRlbmRzIEJhc2VFbnRpdHk+KFxuICB2YWx1ZTogSGFzaE1hcDxUPiB8IEVudHJpZXM8VD4gPSBbXSxcbiAgZW50aXR5UGlwZTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPE1hcDxJRCwgVD4+XG4pOiBFbnRpdHlTdGF0ZTxUPiB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBuZXcgRW50aXR5U3RhdGUobmV3IE1hcCh2YWx1ZSksIGVudGl0eVBpcGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRW50aXR5U3RhdGUobmV3IE1hcChtYXBUb0VudHJpZXModmFsdWUpKSwgZW50aXR5UGlwZSk7XG4gIH1cbn1cbiJdfQ==