diff --git a/src/api/telemetry/TelemetryCollection.js b/src/api/telemetry/TelemetryCollection.js index 0b1887f3cc..3b7cd9d935 100644 --- a/src/api/telemetry/TelemetryCollection.js +++ b/src/api/telemetry/TelemetryCollection.js @@ -485,9 +485,9 @@ export default class TelemetryCollection extends EventEmitter { this.boundedTelemetry = []; this.futureBuffer = []; - this.emit('clear'); + const telemetryLoadPromise = this._requestHistoricalTelemetry(); - this._requestHistoricalTelemetry(); + this.emit('clear', telemetryLoadPromise); } /** diff --git a/src/plugins/comps/CompsManager.js b/src/plugins/comps/CompsManager.js index f9f6ce3542..1d91c1b2fc 100644 --- a/src/plugins/comps/CompsManager.js +++ b/src/plugins/comps/CompsManager.js @@ -9,12 +9,14 @@ export default class CompsManager extends EventEmitter { #dataFrame = {}; #telemetryLoadedPromises = []; #loaded = false; + #compositionLoaded = false; #telemetryProcessors = {}; constructor(openmct, domainObject) { super(); this.#openmct = openmct; this.#domainObject = domainObject; + this.clearData = this.clearData.bind(this); } isValid() { @@ -110,13 +112,16 @@ export default class CompsManager extends EventEmitter { this.#domainObject = passedDomainObject; } - isLoaded() { - return this.#loaded; + isReady() { + return this.isValid() && this.#loaded; } async load() { - if (!this.#loaded) { + if (!this.#compositionLoaded) { await this.#loadComposition(); + this.#compositionLoaded = true; + } + if (!this.#loaded) { await Promise.all(this.#telemetryLoadedPromises); this.#telemetryLoadedPromises = []; this.#loaded = true; @@ -130,7 +135,7 @@ export default class CompsManager extends EventEmitter { if (!this.#telemetryCollections[keyString].loaded) { const specificTelemetryProcessor = this.#getTelemetryProcessor(keyString); this.#telemetryCollections[keyString].on('add', specificTelemetryProcessor); - this.#telemetryCollections[keyString].on('clear', this.#clearData); + this.#telemetryCollections[keyString].on('clear', this.clearData); this.#telemetryCollections[keyString].load(); } }); @@ -142,7 +147,7 @@ export default class CompsManager extends EventEmitter { const specificTelemetryProcessor = this.#telemetryProcessors[keyString]; delete this.#telemetryProcessors[keyString]; this.#telemetryCollections[keyString].off('add', specificTelemetryProcessor); - this.#telemetryCollections[keyString].off('clear', this.#clearData); + this.#telemetryCollections[keyString].off('clear', this.clearData); this.#telemetryCollections[keyString].destroy(); }); } @@ -236,8 +241,10 @@ export default class CompsManager extends EventEmitter { this.emit('underlyingTelemetryUpdated', { [keyString]: newTelemetry }); }; - #clearData() { - console.debug('Clear Data'); + clearData(telemetryLoadedPromise) { + console.debug('💨 Clear Data fired, need to wait for all telemetry collections to load'); + this.#loaded = false; + this.#telemetryLoadedPromises.push(telemetryLoadedPromise); } getOutputFormat() { @@ -256,7 +263,7 @@ export default class CompsManager extends EventEmitter { this.#openmct.telemetry.requestCollection(telemetryObject); this.#telemetryCollections[keyString].on('add', this.#getTelemetryProcessor(keyString)); - this.#telemetryCollections[keyString].on('clear', this.#clearData); + this.#telemetryCollections[keyString].on('clear', this.clearData); const telemetryLoadedPromise = this.#telemetryCollections[keyString].load(); this.#telemetryLoadedPromises.push(telemetryLoadedPromise); console.debug('📢 CompsManager: loaded telemetry collection', keyString); diff --git a/src/plugins/comps/CompsTelemetryProvider.js b/src/plugins/comps/CompsTelemetryProvider.js index d401b5e599..fb1a7083e9 100644 --- a/src/plugins/comps/CompsTelemetryProvider.js +++ b/src/plugins/comps/CompsTelemetryProvider.js @@ -77,17 +77,17 @@ export default class CompsTelemetryProvider { callbackID }; this.#sharedWorker.port.postMessage(payload); + console.debug('🧮 Comps Telemetry Provider: sending request request (bleh)', payload); }); }); } #computeOnNewTelemetry(specificCompsManager, newTelemetry, callbackID) { - if (!specificCompsManager.isValid() || !specificCompsManager.isLoaded()) { + if (!specificCompsManager.isReady()) { return; } const expression = specificCompsManager.getExpression(); const telemetryForComps = specificCompsManager.getFullDataFrame(newTelemetry); - // TODO: this is nasty. instead figure out why a proxy is getting in here const parameters = JSON.parse(JSON.stringify(specificCompsManager.getParameters())); const payload = { type: 'calculateSubscription', @@ -96,7 +96,7 @@ export default class CompsTelemetryProvider { parameters, callbackID }; - console.debug('🧮 Comps Telemetry Provider: sending calculation request', payload); + console.debug('🧮 Comps Telemetry Provider: sending subscription request', payload); this.#sharedWorker.port.postMessage(payload); } diff --git a/src/plugins/comps/components/CompsView.vue b/src/plugins/comps/components/CompsView.vue index d99427b493..2fe710e7e9 100644 --- a/src/plugins/comps/components/CompsView.vue +++ b/src/plugins/comps/components/CompsView.vue @@ -62,7 +62,17 @@ - {{ compsManager.getTelemetryObjectForParameter(parameter.keyString)?.name }} +
+
+
+ {{ compsManager.getTelemetryObjectForParameter(parameter.keyString)?.name }} +
+