@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
85 lines • 12.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { ConduitSubject } from './conduit-subject';
import * as i0 from "@angular/core";
export class ConduitZone {
/** Create a global subject store */
static { this.subjects = []; }
/** Expose an event stream of new values */
static { this.events = new Subject(); }
ngOnDestroy() {
// find all conduit subjects that are part of this zone
ConduitZone.subjects
.filter(_subject => _subject.zoneId === this._zoneId)
.forEach(_subject => this.unregisterConduit(_subject.conduit));
}
/** Store reference to the repository and begin watching for and emitting changes */
registerConduit(conduit) {
ConduitZone.subjects.push(new ConduitSubject(conduit, this, this._zoneId));
}
/** Destroy a conduit */
unregisterConduit(conduit) {
const subject = this.getConduitSubject(conduit.subject);
if (subject) {
// remove the subject from the internal list of conduit subjects
ConduitZone.subjects = ConduitZone.subjects.filter(_subject => _subject !== subject);
// perform all unsubscriptions
subject.destroy();
}
}
/** Provide the zone with an ID */
setZoneId(zoneId) {
this._zoneId = zoneId;
}
/** Emit a value to all zones for checking */
emit(event) {
ConduitZone.events.next(event);
}
/** Retrieve a conduit subsject object from the rxjs subject */
getConduitSubject(subject) {
return ConduitZone.subjects.find(_subject => _subject.conduit.subject === subject);
}
/** Get all subjects from all zones */
getSubjects() {
return ConduitZone.subjects;
}
/** Alter the properties of a conduit dynamically */
setConduitProperties(subject, properties) {
// find the conduit with the matching subject
const conduitSubject = this.getSubjects().find(_conduit => _conduit.conduit.subject === subject);
// if a match was found update the properties
if (conduitSubject) {
// update each specified property
for (const prop in properties) {
conduitSubject.conduit[prop] = properties[prop];
}
}
}
/** Programmatically create a conduit at runtime */
createConduit(subject, properties) {
// register the conduit with the zone
this.registerConduit({ ...properties, subject });
}
/** Register all conduits in a component */
registerConduits(component) {
if (Array.isArray(component._conduits)) {
component._conduits.forEach((conduit) => this.registerConduit({ ...conduit, subject: component[conduit.propertyKey] }));
}
}
/** Register all conduits in a component */
unregisterConduits(component) {
if (Array.isArray(component._conduits)) {
component._conduits.forEach((conduit) => this.unregisterConduit(conduit));
}
}
/** Return the global event stream */
getEvents() {
return ConduitZone.events;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ConduitZone, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ConduitZone }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ConduitZone, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZHVpdC16b25lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jb25kdWl0L2NvbmR1aXQtem9uZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBTW5ELE1BQU0sT0FBTyxXQUFXO0lBQ3BCLG9DQUFvQzthQUM3QixhQUFRLEdBQXFCLEVBQUUsQUFBdkIsQ0FBd0I7SUFFdkMsMkNBQTJDO2FBQ3BDLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBZ0IsQUFBOUIsQ0FBK0I7SUFLNUMsV0FBVztRQUNQLHVEQUF1RDtRQUN2RCxXQUFXLENBQUMsUUFBUTthQUNmLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUNwRCxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixlQUFlLENBQUMsT0FBd0I7UUFDcEMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGlCQUFpQixDQUFDLE9BQXdCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLGdFQUFnRTtZQUNoRSxXQUFXLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBRXJGLDhCQUE4QjtZQUM5QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNMLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsU0FBUyxDQUFDLE1BQWM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxJQUFJLENBQUMsS0FBbUI7UUFDcEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxpQkFBaUIsQ0FBQyxPQUFzQjtRQUNwQyxPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxXQUFXO1FBQ1AsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsb0JBQW9CLENBQUMsT0FBd0IsRUFBRSxVQUFzQztRQUNqRiw2Q0FBNkM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FDMUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQ25ELENBQUM7UUFFRiw2Q0FBNkM7UUFDN0MsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQixpQ0FBaUM7WUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELGFBQWEsQ0FBQyxPQUFzQixFQUFFLFVBQTZCO1FBQy9ELHFDQUFxQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsMkNBQTJDO0lBRTNDLGdCQUFnQixDQUFDLFNBQWM7UUFDM0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBd0IsRUFBRSxFQUFFLENBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQ2hGLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQztJQUVELDJDQUEyQztJQUUzQyxrQkFBa0IsQ0FBQyxTQUFjO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQXdCLEVBQUUsRUFBRSxDQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQ2xDLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxTQUFTO1FBQ0wsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7K0dBcEdRLFdBQVc7bUhBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZHVpdFN1YmplY3QgfSBmcm9tICcuL2NvbmR1aXQtc3ViamVjdCc7XG5pbXBvcnQgeyBDb25kdWl0RXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZHVpdC1ldmVudCc7XG5pbXBvcnQgeyBDb25kdWl0TWV0YWRhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZHVpdC1tZXRhZGF0YSc7XG5pbXBvcnQgeyBDb25kdWl0UHJvcGVydGllcyB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25kdWl0LXByb3BlcnRpZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uZHVpdFpvbmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKiBDcmVhdGUgYSBnbG9iYWwgc3ViamVjdCBzdG9yZSAqL1xuICAgIHN0YXRpYyBzdWJqZWN0czogQ29uZHVpdFN1YmplY3RbXSA9IFtdO1xuXG4gICAgLyoqIEV4cG9zZSBhbiBldmVudCBzdHJlYW0gb2YgbmV3IHZhbHVlcyAqL1xuICAgIHN0YXRpYyBldmVudHMgPSBuZXcgU3ViamVjdDxDb25kdWl0RXZlbnQ+KCk7XG5cbiAgICAvKiogU3RvcmUgdGhlIHpvbmUgbmFtZSAqL1xuICAgIHByaXZhdGUgX3pvbmVJZDogc3RyaW5nO1xuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIGZpbmQgYWxsIGNvbmR1aXQgc3ViamVjdHMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIHpvbmVcbiAgICAgICAgQ29uZHVpdFpvbmUuc3ViamVjdHNcbiAgICAgICAgICAgIC5maWx0ZXIoX3N1YmplY3QgPT4gX3N1YmplY3Quem9uZUlkID09PSB0aGlzLl96b25lSWQpXG4gICAgICAgICAgICAuZm9yRWFjaChfc3ViamVjdCA9PiB0aGlzLnVucmVnaXN0ZXJDb25kdWl0KF9zdWJqZWN0LmNvbmR1aXQpKTtcbiAgICB9XG5cbiAgICAvKiogU3RvcmUgcmVmZXJlbmNlIHRvIHRoZSByZXBvc2l0b3J5IGFuZCBiZWdpbiB3YXRjaGluZyBmb3IgYW5kIGVtaXR0aW5nIGNoYW5nZXMgKi9cbiAgICByZWdpc3RlckNvbmR1aXQoY29uZHVpdDogQ29uZHVpdE1ldGFkYXRhKTogdm9pZCB7XG4gICAgICAgIENvbmR1aXRab25lLnN1YmplY3RzLnB1c2gobmV3IENvbmR1aXRTdWJqZWN0KGNvbmR1aXQsIHRoaXMsIHRoaXMuX3pvbmVJZCkpO1xuICAgIH1cblxuICAgIC8qKiBEZXN0cm95IGEgY29uZHVpdCAqL1xuICAgIHVucmVnaXN0ZXJDb25kdWl0KGNvbmR1aXQ6IENvbmR1aXRNZXRhZGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5nZXRDb25kdWl0U3ViamVjdChjb25kdWl0LnN1YmplY3QpO1xuXG4gICAgICAgIGlmIChzdWJqZWN0KSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIHN1YmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgbGlzdCBvZiBjb25kdWl0IHN1YmplY3RzXG4gICAgICAgICAgICBDb25kdWl0Wm9uZS5zdWJqZWN0cyA9IENvbmR1aXRab25lLnN1YmplY3RzLmZpbHRlcihfc3ViamVjdCA9PiBfc3ViamVjdCAhPT0gc3ViamVjdCk7XG5cbiAgICAgICAgICAgIC8vIHBlcmZvcm0gYWxsIHVuc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgc3ViamVjdC5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgem9uZSB3aXRoIGFuIElEICovXG4gICAgc2V0Wm9uZUlkKHpvbmVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3pvbmVJZCA9IHpvbmVJZDtcbiAgICB9XG5cbiAgICAvKiogRW1pdCBhIHZhbHVlIHRvIGFsbCB6b25lcyBmb3IgY2hlY2tpbmcgKi9cbiAgICBlbWl0KGV2ZW50OiBDb25kdWl0RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgQ29uZHVpdFpvbmUuZXZlbnRzLm5leHQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBSZXRyaWV2ZSBhIGNvbmR1aXQgc3Vic2plY3Qgb2JqZWN0IGZyb20gdGhlIHJ4anMgc3ViamVjdCAqL1xuICAgIGdldENvbmR1aXRTdWJqZWN0KHN1YmplY3Q6IFN1YmplY3Q8dm9pZD4pOiBDb25kdWl0U3ViamVjdCB8IG51bGwge1xuICAgICAgICByZXR1cm4gQ29uZHVpdFpvbmUuc3ViamVjdHMuZmluZChfc3ViamVjdCA9PiBfc3ViamVjdC5jb25kdWl0LnN1YmplY3QgPT09IHN1YmplY3QpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYWxsIHN1YmplY3RzIGZyb20gYWxsIHpvbmVzICovXG4gICAgZ2V0U3ViamVjdHMoKTogQ29uZHVpdFN1YmplY3RbXSB7XG4gICAgICAgIHJldHVybiBDb25kdWl0Wm9uZS5zdWJqZWN0cztcbiAgICB9XG5cbiAgICAvKiogQWx0ZXIgdGhlIHByb3BlcnRpZXMgb2YgYSBjb25kdWl0IGR5bmFtaWNhbGx5ICovXG4gICAgc2V0Q29uZHVpdFByb3BlcnRpZXMoc3ViamVjdDogU3ViamVjdDxzdHJpbmc+LCBwcm9wZXJ0aWVzOiBQYXJ0aWFsPENvbmR1aXRQcm9wZXJ0aWVzPik6IHZvaWQge1xuICAgICAgICAvLyBmaW5kIHRoZSBjb25kdWl0IHdpdGggdGhlIG1hdGNoaW5nIHN1YmplY3RcbiAgICAgICAgY29uc3QgY29uZHVpdFN1YmplY3QgPSB0aGlzLmdldFN1YmplY3RzKCkuZmluZChcbiAgICAgICAgICAgIF9jb25kdWl0ID0+IF9jb25kdWl0LmNvbmR1aXQuc3ViamVjdCA9PT0gc3ViamVjdFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGlmIGEgbWF0Y2ggd2FzIGZvdW5kIHVwZGF0ZSB0aGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoY29uZHVpdFN1YmplY3QpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBlYWNoIHNwZWNpZmllZCBwcm9wZXJ0eVxuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25kdWl0U3ViamVjdC5jb25kdWl0W3Byb3BdID0gcHJvcGVydGllc1twcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBQcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGNvbmR1aXQgYXQgcnVudGltZSAqL1xuICAgIGNyZWF0ZUNvbmR1aXQoc3ViamVjdDogU3ViamVjdDx2b2lkPiwgcHJvcGVydGllczogQ29uZHVpdFByb3BlcnRpZXMpOiB2b2lkIHtcbiAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGNvbmR1aXQgd2l0aCB0aGUgem9uZVxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ29uZHVpdCh7IC4uLnByb3BlcnRpZXMsIHN1YmplY3QgfSk7XG4gICAgfVxuXG4gICAgLyoqIFJlZ2lzdGVyIGFsbCBjb25kdWl0cyBpbiBhIGNvbXBvbmVudCAqL1xuICAgICBcbiAgICByZWdpc3RlckNvbmR1aXRzKGNvbXBvbmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBvbmVudC5fY29uZHVpdHMpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuX2NvbmR1aXRzLmZvckVhY2goKGNvbmR1aXQ6IENvbmR1aXRNZXRhZGF0YSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyQ29uZHVpdCh7IC4uLmNvbmR1aXQsIHN1YmplY3Q6IGNvbXBvbmVudFtjb25kdWl0LnByb3BlcnR5S2V5XSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZWdpc3RlciBhbGwgY29uZHVpdHMgaW4gYSBjb21wb25lbnQgKi9cbiAgICAgXG4gICAgdW5yZWdpc3RlckNvbmR1aXRzKGNvbXBvbmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBvbmVudC5fY29uZHVpdHMpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuX2NvbmR1aXRzLmZvckVhY2goKGNvbmR1aXQ6IENvbmR1aXRNZXRhZGF0YSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXJDb25kdWl0KGNvbmR1aXQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiB0aGUgZ2xvYmFsIGV2ZW50IHN0cmVhbSAqL1xuICAgIGdldEV2ZW50cygpOiBTdWJqZWN0PENvbmR1aXRFdmVudD4ge1xuICAgICAgICByZXR1cm4gQ29uZHVpdFpvbmUuZXZlbnRzO1xuICAgIH1cbn1cbiJdfQ==