ngx-diagrams
Version:
> Light Weight, Modular, Typed Diagram Engine for Angular
88 lines • 10.5 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9uZ3gtZGlhZ3JhbXMvc3JjLyIsInNvdXJjZXMiOlsibGliL3N0YXRlL3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQTBELE1BQU0sTUFBTSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQU0sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdyRCxNQUFNLE9BQU8sVUFBVTtJQUtyQixZQUFZLEtBQVMsRUFBRSxRQUFxQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxHQUFHLENBQUMsS0FBUTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUtELE1BQU0sQ0FBSSxPQUErQztRQUN2RCxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDckIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDNUIsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBSSxLQUFRLEVBQUUsUUFBcUM7SUFDakYsT0FBTyxJQUFJLFVBQVUsQ0FBSSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELE1BQU0sT0FBTyxXQUFrQyxTQUFRLFVBQXdCO0lBSzdFLFlBQVksS0FBb0IsRUFBRSxVQUFtRDtRQUNuRixLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSTtRQUNsQixJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxHQUFHLENBQUMsRUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELEdBQUcsQ0FBQyxFQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQVM7UUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFhO1FBQ25CLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBTSxFQUFFLE9BQU8sR0FBRyxJQUFJOztRQUMzQixJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLDBDQUFFLE9BQU8sR0FBRztTQUMvQjtRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFzRDtRQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsR0FBRyxDQUFVLEVBQThDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLFFBQWlDLEVBQUUsRUFDbkMsVUFBZ0Q7SUFFaEQsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNwRDtTQUFNO1FBQ0wsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNsRTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VFbnRpdHkgfSBmcm9tICcuLi9iYXNlLmVudGl0eSc7XG5pbXBvcnQgeyBJRCwgaXNBcnJheSwgbWFwVG9FbnRyaWVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRW50aXR5TWFwLCBFbnRyaWVzLCBIYXNoTWFwIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgVmFsdWVTdGF0ZTxUPiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdHJlYW0kOiBCZWhhdmlvclN1YmplY3Q8VD47XG5cbiAgcmVhZG9ubHkgdmFsdWUkOiBPYnNlcnZhYmxlPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlPzogVCwgb3BlcmF0b3I/OiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgYW55Pikge1xuICAgIHRoaXMuc3RyZWFtJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodmFsdWUpO1xuICAgIHRoaXMudmFsdWUkID0gb3BlcmF0b3IgPyB0aGlzLnN0cmVhbSQucGlwZShvcGVyYXRvcikgOiB0aGlzLnN0cmVhbSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0KHZhbHVlOiBUKTogVmFsdWVTdGF0ZTxUPiB7XG4gICAgdGhpcy5zdHJlYW0kLm5leHQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZW1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0cmVhbSQubmV4dCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHNlbGVjdCgpOiBPYnNlcnZhYmxlPFQ+O1xuICBzZWxlY3QocHJvamVjdDogKHZhbHVlOiBUKSA9PiBUKTogT2JzZXJ2YWJsZTxUPjtcbiAgc2VsZWN0PFI+KHByb2plY3Q6ICh2YWx1ZTogVCkgPT4gUik6IE9ic2VydmFibGU8Uj47XG4gIHNlbGVjdDxSPihwcm9qZWN0PzogKCh2YWx1ZTogVCkgPT4gVCkgfCAoKHZhbHVlOiBUKSA9PiBSKSk6IE9ic2VydmFibGU8VCB8IFI+IHtcbiAgICBjb25zdCBtYXBGbiA9IHByb2plY3QgfHwgKCh2KSA9PiB2KTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSQucGlwZShcbiAgICAgIG1hcCgodmFsdWUpID0+IG1hcEZuKHZhbHVlKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmFsdWVTdGF0ZTxUPih2YWx1ZTogVCwgb3BlcmF0b3I/OiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgYW55Pik6IFZhbHVlU3RhdGU8VD4ge1xuICByZXR1cm4gbmV3IFZhbHVlU3RhdGU8VD4odmFsdWUsIG9wZXJhdG9yKTtcbn1cblxuZXhwb3J0IGNsYXNzIEVudGl0eVN0YXRlPFQgZXh0ZW5kcyBCYXNlRW50aXR5PiBleHRlbmRzIFZhbHVlU3RhdGU8RW50aXR5TWFwPFQ+PiB7XG4gIHByb3RlY3RlZCBzdHJlYW0kOiBCZWhhdmlvclN1YmplY3Q8RW50aXR5TWFwPFQ+PjtcblxuICB2YWx1ZSQ6IE9ic2VydmFibGU8RW50aXR5TWFwPFQ+PjtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZT86IEVudGl0eU1hcDxUPiwgZW50aXR5UGlwZT86IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxFbnRpdHlNYXA8VD4+KSB7XG4gICAgc3VwZXIodmFsdWUsIGVudGl0eVBpcGUpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5zdHJlYW0kID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlJCA9IG51bGw7XG4gIH1cblxuICBjbGVhcihkZXN0cm95ID0gdHJ1ZSkge1xuICAgIGlmIChkZXN0cm95KSB7XG4gICAgICB0aGlzLmZvckVhY2goKGVudGl0eSkgPT4gZW50aXR5LmRlc3Ryb3koKSk7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZS5jbGVhcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGlkOiBJRCk6IFQge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmdldChpZCk7XG4gIH1cblxuICBoYXMoaWQ6IElEKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUuaGFzKGlkKTtcbiAgfVxuXG4gIGFkZChlbnRpdHk6IFQpOiBFbnRpdHlTdGF0ZTxUPiB7XG4gICAgdGhpcy52YWx1ZS5zZXQoZW50aXR5LmlkLCBlbnRpdHkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkTWFueShlbnRpdGllczogVFtdKTogRW50aXR5U3RhdGU8VD4ge1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgICB0aGlzLmFkZChlbnRpdHkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbW92ZShpZDogSUQsIGRlc3Ryb3kgPSB0cnVlKTogRW50aXR5U3RhdGU8VD4ge1xuICAgIGlmIChkZXN0cm95KSB7XG4gICAgICB0aGlzLnZhbHVlLmdldChpZCk/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlLmRlbGV0ZShpZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhcnJheSgpOiBUW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudmFsdWUudmFsdWVzKCkpO1xuICB9XG5cbiAgYXJyYXkkKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KCh2YWx1ZSkgPT4gQXJyYXkuZnJvbSh2YWx1ZS52YWx1ZXMoKSkpO1xuICB9XG5cbiAgZm9yRWFjaChjYjogKHZhbHVlOiBULCBrZXk6IHN0cmluZywgbWFwOiBFbnRpdHlNYXA8VD4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLmZvckVhY2goY2IpO1xuICB9XG5cbiAgbWFwPFIgPSBhbnk+KGNiOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBUW10pID0+IFIpOiBSW10ge1xuICAgIHJldHVybiB0aGlzLmFycmF5KCkubWFwKGNiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW50aXR5U3RhdGU8VCBleHRlbmRzIEJhc2VFbnRpdHk+KFxuICB2YWx1ZTogSGFzaE1hcDxUPiB8IEVudHJpZXM8VD4gPSBbXSxcbiAgZW50aXR5UGlwZTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPE1hcDxJRCwgVD4+XG4pOiBFbnRpdHlTdGF0ZTxUPiB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBuZXcgRW50aXR5U3RhdGUobmV3IE1hcCh2YWx1ZSksIGVudGl0eVBpcGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRW50aXR5U3RhdGUobmV3IE1hcChtYXBUb0VudHJpZXModmFsdWUpKSwgZW50aXR5UGlwZSk7XG4gIH1cbn1cbiJdfQ==