Summary
The logic used in TableRowCollection.updateRowInPlace() causes old row data to take priority over new row data. When data exists in a column (not undefined/null), and a row update comes through, the old data remains instead of the new data being shown.
This is a separate issue to [#7938] , but was likely caused by the change that fixed that reactivity issue: [#7940].
Expected vs Current Behavior
When new row data comes in, the new data should override old data.
Steps to Reproduce
- Set up a telemetry provider that supports telemetry subscription. The telemetry must be of a type where updates to existing rows occurs (I am guessing this is why the issue has not been caught yet, as most telemetry sends new rows only). My personal example is commands, in which their state changes as they are queued/sent/received.
- Set up associated object provider, and navigate to the telemetry table.
- Make some data come through, see the table update.
- Make some more data come through that includes an update of on or more existing rows.
- See that the updated data does not override the existing data.
Environment
- Open MCT Version: Version: 4.1.0, Revision: 76d123bfccd97a6ae02a07b8006fe51d48439ef4
- Deployment Type: npm dev
- OS: Linux 5.15 Ubuntu 22.04.5 LTS 22.04.5 LTS (Jammy Jellyfish)
- Browser: Firefox 152.0.5 (64-bit)
Impact Check List
Additional Information
I believe the issue was introduced in [#7940] , when reactivity of telemetry table rows was fixed by updating incomingRow with the data of existingRow instead of the other way around. This was done as incomingRow is a new object reference, which Vue reactivity will pick up as an update. When updating existingRow with the data of incomingRow, Vue would not react as the object reference was unchanged (still existing row).
I believe that this change accidentally inverted the order of the spread operation used to update the data in place. The data from existingRow is now spread over the data from incomingRow, which means the existingRow data takes precedence.
The issue can be located in TableRowCollection.js line 144.
Below is a screenshot with a workaround. It uses the new reference of incomingRow, but spreads data in the opposite direction to updateWithDatum.

Summary
The logic used in
TableRowCollection.updateRowInPlace()causes old row data to take priority over new row data. When data exists in a column (not undefined/null), and a row update comes through, the old data remains instead of the new data being shown.This is a separate issue to [#7938] , but was likely caused by the change that fixed that reactivity issue: [#7940].
Expected vs Current Behavior
When new row data comes in, the new data should override old data.
Steps to Reproduce
Environment
Impact Check List
Additional Information
I believe the issue was introduced in [#7940] , when reactivity of telemetry table rows was fixed by updating
incomingRowwith the data ofexistingRowinstead of the other way around. This was done asincomingRowis a new object reference, which Vue reactivity will pick up as an update. When updatingexistingRowwith the data ofincomingRow, Vue would not react as the object reference was unchanged (still existing row).I believe that this change accidentally inverted the order of the spread operation used to update the data in place. The data from
existingRowis now spread over the data fromincomingRow, which means theexistingRowdata takes precedence.The issue can be located in
TableRowCollection.jsline 144.Below is a screenshot with a workaround. It uses the new reference of
incomingRow, but spreads data in the opposite direction toupdateWithDatum.