diff --git a/src/plugins/telemetryTable/TelemetryTable.js b/src/plugins/telemetryTable/TelemetryTable.js index dceaa9e605..028c706fc6 100644 --- a/src/plugins/telemetryTable/TelemetryTable.js +++ b/src/plugins/telemetryTable/TelemetryTable.js @@ -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'; @@ -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(); @@ -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; @@ -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); } } diff --git a/src/plugins/telemetryTable/TelemetryTableConfiguration.js b/src/plugins/telemetryTable/TelemetryTableConfiguration.js index 6b9af55f14..1a94c96d23 100644 --- a/src/plugins/telemetryTable/TelemetryTableConfiguration.js +++ b/src/plugins/telemetryTable/TelemetryTableConfiguration.js @@ -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(); @@ -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 || {}; diff --git a/src/plugins/telemetryTable/collections/TableRowCollection.js b/src/plugins/telemetryTable/collections/TableRowCollection.js index 20f294d3d7..1e9fcc2f2b 100644 --- a/src/plugins/telemetryTable/collections/TableRowCollection.js +++ b/src/plugins/telemetryTable/collections/TableRowCollection.js @@ -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), @@ -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;