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 @@