Compare commits

...

2 Commits

Author SHA1 Message Date
ea45e7f636 Committed as reference 2021-07-07 18:46:24 -07:00
cbb3f32d1e 1.7.4 into master (#3985)
catching any errors from a user canceling from dialog (#3968)
Fix navigation errors (#3970)
Only add listeners to observables on creation
Do not double destroy mutable objects
Disallow pause and play in time strip view for plots. (#3972)
Update version

Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
2021-06-29 09:40:30 -07:00
8 changed files with 107 additions and 39 deletions

View File

@ -194,6 +194,7 @@
['table', 'telemetry.plot.overlay', 'telemetry.plot.stacked'], ['table', 'telemetry.plot.overlay', 'telemetry.plot.stacked'],
{indicator: true} {indicator: true}
)); ));
openmct.install(openmct.plugins.CodeWalkthrough);
openmct.start(); openmct.start();
</script> </script>
</html> </html>

View File

@ -1,6 +1,6 @@
{ {
"name": "openmct", "name": "openmct",
"version": "1.7.4-SNAPSHOT", "version": "1.7.4",
"description": "The Open MCT core platform", "description": "The Open MCT core platform",
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {

View File

@ -399,25 +399,25 @@ ObjectAPI.prototype._toMutable = function (object) {
mutableObject = object; mutableObject = object;
} else { } else {
mutableObject = MutableDomainObject.createMutable(object, this.eventEmitter); mutableObject = MutableDomainObject.createMutable(object, this.eventEmitter);
}
// Check if provider supports realtime updates // Check if provider supports realtime updates
let identifier = utils.parseKeyString(mutableObject.identifier); let identifier = utils.parseKeyString(mutableObject.identifier);
let provider = this.getProvider(identifier); let provider = this.getProvider(identifier);
if (provider !== undefined if (provider !== undefined
&& provider.observe !== undefined && provider.observe !== undefined
&& this.SYNCHRONIZED_OBJECT_TYPES.includes(object.type)) { && this.SYNCHRONIZED_OBJECT_TYPES.includes(object.type)) {
let unobserve = provider.observe(identifier, (updatedModel) => { let unobserve = provider.observe(identifier, (updatedModel) => {
if (updatedModel.persisted > mutableObject.modified) { if (updatedModel.persisted > mutableObject.modified) {
//Don't replace with a stale model. This can happen on slow connections when multiple mutations happen //Don't replace with a stale model. This can happen on slow connections when multiple mutations happen
//in rapid succession and intermediate persistence states are returned by the observe function. //in rapid succession and intermediate persistence states are returned by the observe function.
mutableObject.$refresh(updatedModel); mutableObject.$refresh(updatedModel);
} }
}); });
mutableObject.$on('$_destroy', () => { mutableObject.$on('$_destroy', () => {
unobserve(); unobserve();
}); });
}
} }
return mutableObject; return mutableObject;

View File

@ -0,0 +1,71 @@
import Vue from 'Vue';
export default function install(openmct) {
openmct.objectViews.addProvider({
name: "Latest Data Table",
key: "latest-table",
cssClass: "icon-packet",
description: "A tabular view of telemetry contents.",
canView: function () {
return true;
},
view: function (domainObject) {
let unsubscribe;
return {
show: function (element) {
//element.innerText = 'Hello World!';
let telemetryMetadata = openmct.telemetry.getMetadata(domainObject).values();
let tableEl = document.createElement('table');
let tableHeader = document.createElement('thead');
let tableHeaderRow = document.createElement('tr');
let tableBody = document.createElement('tbody');
element.appendChild(tableEl);
tableHeader.appendChild(tableHeaderRow);
tableEl.appendChild(tableHeader);
tableEl.appendChild(tableBody);
telemetryMetadata.forEach(metadatum => {
let tableHeader = document.createElement('td');
tableHeader.innerText = metadatum.name;
tableHeaderRow.appendChild(tableHeader);
});
openmct.time.on('bounds', (newBounds) => {
tableBody.innerHTML = '';
requestTelemetry(newBounds);
});
requestTelemetry();
// unsubscribe = openmct.telemetry.subscribe(domainObject, (datum) => {
// addRow(datum);
// });
function addRow(telemetryDatum) {
let dataRow = document.createElement('tr');
telemetryMetadata.forEach(metadatum => {
let tableCell = document.createElement('td');
let formatter = openmct.telemetry.getValueFormatter(metadatum);
tableCell.innerText = formatter.format(telemetryDatum[metadatum.key]);
dataRow.appendChild(tableCell);
tableBody.appendChild(dataRow);
});
}
function requestTelemetry(bounds) {
openmct.telemetry.request(domainObject, {bounds}).then(arrayOfTelemetry => {
arrayOfTelemetry.forEach(addRow);
});
}
},
destroy: function (element) {
unsubscribe();
}
};
}
});
}

View File

@ -37,7 +37,15 @@ export default class DuplicateAction {
let duplicationTask = new DuplicateTask(this.openmct); let duplicationTask = new DuplicateTask(this.openmct);
let originalObject = objectPath[0]; let originalObject = objectPath[0];
let parent = objectPath[1]; let parent = objectPath[1];
let userInput = await this.getUserInput(originalObject, parent); let userInput;
try {
userInput = await this.getUserInput(originalObject, parent);
} catch (error) {
// user most likely canceled
return;
}
let newParent = userInput.location; let newParent = userInput.location;
let inNavigationPath = this.inNavigationPath(originalObject); let inNavigationPath = this.inNavigationPath(originalObject);

View File

@ -102,7 +102,7 @@
> >
</button> </button>
</div> </div>
<div v-if="isRealTime" <div v-if="isRealTime && !options.compact"
class="c-button-set c-button-set--strip-h js-pause" class="c-button-set c-button-set--strip-h js-pause"
> >
<button v-if="!isFrozen" <button v-if="!isFrozen"

View File

@ -65,7 +65,8 @@ define([
'./interceptors/plugin', './interceptors/plugin',
'./performanceIndicator/plugin', './performanceIndicator/plugin',
'./CouchDBSearchFolder/plugin', './CouchDBSearchFolder/plugin',
'./timeline/plugin' './timeline/plugin',
'./codeWalkthrough/plugin'
], function ( ], function (
_, _,
UTCTimeSystem, UTCTimeSystem,
@ -111,7 +112,8 @@ define([
ObjectInterceptors, ObjectInterceptors,
PerformanceIndicator, PerformanceIndicator,
CouchDBSearchFolder, CouchDBSearchFolder,
Timeline Timeline,
codeWalkthroughPlugin
) { ) {
const bundleMap = { const bundleMap = {
LocalStorage: 'platform/persistence/local', LocalStorage: 'platform/persistence/local',
@ -212,6 +214,7 @@ define([
plugins.PerformanceIndicator = PerformanceIndicator.default; plugins.PerformanceIndicator = PerformanceIndicator.default;
plugins.CouchDBSearchFolder = CouchDBSearchFolder.default; plugins.CouchDBSearchFolder = CouchDBSearchFolder.default;
plugins.Timeline = Timeline.default; plugins.Timeline = Timeline.default;
plugins.CodeWalkthrough = codeWalkthroughPlugin.default;
return plugins; return plugins;
}); });

View File

@ -10,7 +10,6 @@ define([
let unobserve = undefined; let unobserve = undefined;
let currentObjectPath; let currentObjectPath;
let isRoutingInProgress = false; let isRoutingInProgress = false;
let mutable;
openmct.router.route(/^\/browse\/?$/, navigateToFirstChildOfRoot); openmct.router.route(/^\/browse\/?$/, navigateToFirstChildOfRoot);
openmct.router.route(/^\/browse\/(.*)$/, (path, results, params) => { openmct.router.route(/^\/browse\/(.*)$/, (path, results, params) => {
@ -37,24 +36,10 @@ define([
} }
function viewObject(object, viewProvider) { function viewObject(object, viewProvider) {
if (mutable) {
openmct.objects.destroyMutable(mutable);
mutable = undefined;
}
if (openmct.objects.supportsMutation(object.identifier)) {
mutable = openmct.objects._toMutable(object);
}
currentObjectPath = openmct.router.path; currentObjectPath = openmct.router.path;
if (mutable !== undefined) { openmct.layout.$refs.browseObject.show(object, viewProvider.key, true, currentObjectPath);
openmct.layout.$refs.browseObject.show(mutable, viewProvider.key, true, currentObjectPath); openmct.layout.$refs.browseBar.domainObject = object;
openmct.layout.$refs.browseBar.domainObject = mutable;
} else {
openmct.layout.$refs.browseObject.show(object, viewProvider.key, true, currentObjectPath);
openmct.layout.$refs.browseBar.domainObject = object;
}
openmct.layout.$refs.browseBar.viewKey = viewProvider.key; openmct.layout.$refs.browseBar.viewKey = viewProvider.key;
} }