mirror of
https://github.com/nasa/openmct.git
synced 2025-06-06 01:11:41 +00:00
169 lines
6.7 KiB
JavaScript
169 lines
6.7 KiB
JavaScript
/*****************************************************************************
|
|
* Open MCT, Copyright (c) 2014-2018, United States Government
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
* Administration. All rights reserved.
|
|
*
|
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
* Open MCT includes source code licensed under additional open source
|
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
* this source code distribution or the Licensing information page available
|
|
* at runtime from the About dialog for additional information.
|
|
*****************************************************************************/
|
|
|
|
define([
|
|
'lodash',
|
|
'EventEmitter'
|
|
], function (_, EventEmitter) {
|
|
|
|
class TelemetryTableConfiguration extends EventEmitter {
|
|
constructor(domainObject, openmct) {
|
|
super();
|
|
|
|
this.domainObject = domainObject;
|
|
this.openmct = openmct;
|
|
this.columns = {};
|
|
|
|
this.removeColumnsForObject = this.removeColumnsForObject.bind(this);
|
|
this.objectMutated = this.objectMutated.bind(this);
|
|
//Make copy of configuration, otherwise change detection is impossible if shared instance is being modified.
|
|
this.oldConfiguration = JSON.parse(JSON.stringify(this.getConfiguration()));
|
|
|
|
this.unlistenFromMutation = openmct.objects.observe(domainObject, '*', this.objectMutated);
|
|
}
|
|
|
|
getConfiguration() {
|
|
let configuration = this.domainObject.configuration || {};
|
|
configuration.hiddenColumns = configuration.hiddenColumns || {};
|
|
configuration.columnWidths = configuration.columnWidths || {};
|
|
configuration.columnOrder = configuration.columnOrder || [];
|
|
configuration.cellFormat = configuration.cellFormat || {};
|
|
configuration.autosize = configuration.autosize === undefined ? true : configuration.autosize;
|
|
|
|
return configuration;
|
|
}
|
|
|
|
updateConfiguration(configuration) {
|
|
this.openmct.objects.mutate(this.domainObject, 'configuration', configuration);
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* @param {*} object
|
|
*/
|
|
objectMutated(object) {
|
|
//Synchronize domain object reference. Duplicate object otherwise change detection becomes impossible.
|
|
this.domainObject = object;
|
|
//Was it the configuration that changed?
|
|
if (object.configuration !== undefined && !_.eq(object.configuration, this.oldConfiguration)) {
|
|
//Make copy of configuration, otherwise change detection is impossible if shared instance is being modified.
|
|
this.oldConfiguration = JSON.parse(JSON.stringify(this.getConfiguration()));
|
|
this.emit('change', object.configuration);
|
|
}
|
|
}
|
|
|
|
addSingleColumnForObject(telemetryObject, column, position) {
|
|
let objectKeyString = this.openmct.objects.makeKeyString(telemetryObject.identifier);
|
|
this.columns[objectKeyString] = this.columns[objectKeyString] || [];
|
|
position = position || this.columns[objectKeyString].length;
|
|
this.columns[objectKeyString].splice(position, 0, column);
|
|
}
|
|
|
|
removeColumnsForObject(objectIdentifier) {
|
|
let objectKeyString = this.openmct.objects.makeKeyString(objectIdentifier);
|
|
let columnsToRemove = this.columns[objectKeyString];
|
|
|
|
delete this.columns[objectKeyString];
|
|
|
|
let configuration = this.domainObject.configuration;
|
|
let configurationChanged = false;
|
|
columnsToRemove.forEach((column) => {
|
|
//There may be more than one column with the same key (eg. time system columns)
|
|
if (!this.hasColumnWithKey(column.getKey())) {
|
|
delete configuration.hiddenColumns[column.getKey()];
|
|
configurationChanged = true;
|
|
}
|
|
});
|
|
if (configurationChanged) {
|
|
this.updateConfiguration(configuration);
|
|
}
|
|
}
|
|
|
|
hasColumnWithKey(columnKey) {
|
|
return _.flatten(Object.values(this.columns))
|
|
.findIndex(column => column.getKey() === columnKey) !== -1;
|
|
}
|
|
|
|
getColumns() {
|
|
return this.columns;
|
|
}
|
|
|
|
getAllHeaders() {
|
|
let flattenedColumns = _.flatten(Object.values(this.columns));
|
|
let headers = _.uniq(flattenedColumns, false, column => column.getKey())
|
|
.reduce(fromColumnsToHeadersMap, {});
|
|
|
|
function fromColumnsToHeadersMap(headersMap, column) {
|
|
headersMap[column.getKey()] = column.getTitle();
|
|
return headersMap;
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
getVisibleHeaders() {
|
|
let allHeaders = this.getAllHeaders();
|
|
let configuration = this.getConfiguration();
|
|
|
|
let orderedColumns = this.getColumnOrder();
|
|
let unorderedColumns = _.difference(Object.keys(allHeaders), orderedColumns);
|
|
|
|
return orderedColumns.concat(unorderedColumns)
|
|
.filter((headerKey) => {
|
|
return configuration.hiddenColumns[headerKey] !== true;
|
|
})
|
|
.reduce((headers, headerKey) => {
|
|
headers[headerKey] = allHeaders[headerKey];
|
|
return headers;
|
|
}, {});
|
|
}
|
|
|
|
getColumnWidths() {
|
|
let configuration = this.getConfiguration();
|
|
return configuration.columnWidths;
|
|
}
|
|
|
|
setColumnWidths(columnWidths) {
|
|
let configuration = this.getConfiguration();
|
|
configuration.columnWidths = columnWidths;
|
|
this.updateConfiguration(configuration);
|
|
}
|
|
|
|
getColumnOrder() {
|
|
let configuration = this.getConfiguration();
|
|
return configuration.columnOrder;
|
|
}
|
|
|
|
setColumnOrder(columnOrder) {
|
|
let configuration = this.getConfiguration();
|
|
configuration.columnOrder = columnOrder;
|
|
this.updateConfiguration(configuration);
|
|
}
|
|
|
|
destroy() {
|
|
this.unlistenFromMutation();
|
|
}
|
|
}
|
|
|
|
return TelemetryTableConfiguration;
|
|
});
|