Skip to content

Commit

Permalink
[Telemetry Tables] Fix sort issues (#7875)
Browse files Browse the repository at this point in the history
* Issue where immutable objects sort order was not being set correctly in telemetry tables. 
* Configuration couldn't be saved and the sort order was not being saved in memory. 
* Telemetry was not being re-requested when the sort order of a table was changed and the table was in performance (limited) mode.
* We've moved sort order to both configuration and in-memory and we will re-request telemetry if changing sort order in performance mode.

---------

Co-authored-by: Andrew Henry <[email protected]>
  • Loading branch information
jvigliotta and akhenry authored Oct 10, 2024
1 parent f4cf9c7 commit c43ef64
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 17 deletions.
26 changes: 10 additions & 16 deletions src/plugins/telemetryTable/TelemetryTable.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import _ from 'lodash';

import StalenessUtils from '../../utils/staleness.js';
import TableRowCollection from './collections/TableRowCollection.js';
import { MODE, ORDER } from './constants.js';
import { MODE } from './constants.js';
import TelemetryTableColumn from './TelemetryTableColumn.js';
import TelemetryTableConfiguration from './TelemetryTableConfiguration.js';
import TelemetryTableNameColumn from './TelemetryTableNameColumn.js';
Expand Down Expand Up @@ -130,14 +130,7 @@ export default class TelemetryTable extends EventEmitter {
createTableRowCollections() {
this.tableRows = new TableRowCollection();

//Fetch any persisted default sort
let sortOptions = this.configuration.getConfiguration().sortOptions;

//If no persisted sort order, default to sorting by time system, descending.
sortOptions = sortOptions || {
key: this.openmct.time.getTimeSystem().key,
direction: ORDER.DESCENDING
};
const sortOptions = this.configuration.getSortOptions();

this.updateRowLimit();

Expand Down Expand Up @@ -172,8 +165,8 @@ export default class TelemetryTable extends EventEmitter {

this.removeTelemetryCollection(keyString);

let sortOptions = this.configuration.getConfiguration().sortOptions;
requestOptions.order = sortOptions?.direction ?? ORDER.DESCENDING; // default to descending
let sortOptions = this.configuration.getSortOptions();
requestOptions.order = sortOptions.direction;

if (this.telemetryMode === MODE.PERFORMANCE) {
requestOptions.size = this.rowLimit;
Expand Down Expand Up @@ -442,12 +435,13 @@ export default class TelemetryTable extends EventEmitter {
}

sortBy(sortOptions) {
this.tableRows.sortBy(sortOptions);
this.configuration.setSortOptions(sortOptions);

if (this.openmct.editor.isEditing()) {
let configuration = this.configuration.getConfiguration();
configuration.sortOptions = sortOptions;
this.configuration.updateConfiguration(configuration);
if (this.telemetryMode === MODE.PERFORMANCE) {
this.tableRows.setSortOptions(sortOptions);
this.clearAndResubscribe();
} else {
this.tableRows.sortBy(sortOptions);
}
}

Expand Down
24 changes: 24 additions & 0 deletions src/plugins/telemetryTable/TelemetryTableConfiguration.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@
import { EventEmitter } from 'eventemitter3';
import _ from 'lodash';

import { ORDER } from './constants';

export default class TelemetryTableConfiguration extends EventEmitter {
#sortOptions;

constructor(domainObject, openmct, options) {
super();

Expand All @@ -44,6 +48,26 @@ export default class TelemetryTableConfiguration extends EventEmitter {
this.notPersistable = !this.openmct.objects.isPersistable(this.domainObject.identifier);
}

getSortOptions() {
return (
this.#sortOptions ||
this.getConfiguration().sortOptions || {
key: this.openmct.time.getTimeSystem().key,
direction: ORDER.DESCENDING
}
);
}

setSortOptions(sortOptions) {
this.#sortOptions = sortOptions;

if (this.openmct.editor.isEditing()) {
let configuration = this.getConfiguration();
configuration.sortOptions = sortOptions;
this.updateConfiguration(configuration);
}
}

getConfiguration() {
let configuration = this.domainObject.configuration || {};
configuration.hiddenColumns = configuration.hiddenColumns || {};
Expand Down
6 changes: 5 additions & 1 deletion src/plugins/telemetryTable/collections/TableRowCollection.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ export default class TableRowCollection extends EventEmitter {
*/
sortBy(sortOptions) {
if (arguments.length > 0) {
this.sortOptions = sortOptions;
this.setSortOptions(sortOptions);
this.rows = _.orderBy(
this.rows,
(row) => row.getParsedValue(sortOptions.key),
Expand All @@ -286,6 +286,10 @@ export default class TableRowCollection extends EventEmitter {
return Object.assign({}, this.sortOptions);
}

setSortOptions(sortOptions) {
this.sortOptions = sortOptions;
}

setColumnFilter(columnKey, filter) {
filter = filter.trim().toLowerCase();
let wasBlank = this.columnFilters[columnKey] === undefined;
Expand Down

0 comments on commit c43ef64

Please sign in to comment.