mirror of
https://github.com/nasa/openmct.git
synced 2025-01-31 08:25:31 +00:00
Plot view policy fix (#3995)
* deny plot view for non-numeric telemetry * revert plot type for backwards compatibility
This commit is contained in:
parent
10da314a4a
commit
4a7ebe326c
@ -24,19 +24,23 @@ import Plot from './Plot.vue';
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
|
||||||
export default function PlotViewProvider(openmct) {
|
export default function PlotViewProvider(openmct) {
|
||||||
function hasTelemetry(domainObject) {
|
function hasNumericTelemetry(domainObject) {
|
||||||
if (!Object.prototype.hasOwnProperty.call(domainObject, 'telemetry')) {
|
if (!Object.prototype.hasOwnProperty.call(domainObject, 'telemetry')) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let metadata = openmct.telemetry.getMetadata(domainObject);
|
let metadata = openmct.telemetry.getMetadata(domainObject);
|
||||||
|
|
||||||
return metadata.values().length > 0 && hasDomainAndRange(metadata);
|
return metadata.values().length > 0 && hasDomainAndNumericRange(metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasDomainAndRange(metadata) {
|
function hasDomainAndNumericRange(metadata) {
|
||||||
return (metadata.valuesForHints(['range']).length > 0
|
const rangeValues = metadata.valuesForHints(['range']);
|
||||||
&& metadata.valuesForHints(['domain']).length > 0);
|
const domains = metadata.valuesForHints(['domain']);
|
||||||
|
|
||||||
|
return domains.length > 0
|
||||||
|
&& rangeValues.length > 0
|
||||||
|
&& !rangeValues.every(value => value.format === 'string');
|
||||||
}
|
}
|
||||||
|
|
||||||
function isCompactView(objectPath) {
|
function isCompactView(objectPath) {
|
||||||
@ -44,11 +48,11 @@ export default function PlotViewProvider(openmct) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
key: 'plot-simple',
|
key: 'plot-single',
|
||||||
name: 'Plot',
|
name: 'Plot',
|
||||||
cssClass: 'icon-telemetry',
|
cssClass: 'icon-telemetry',
|
||||||
canView(domainObject, objectPath) {
|
canView(domainObject, objectPath) {
|
||||||
return hasTelemetry(domainObject, openmct);
|
return hasNumericTelemetry(domainObject);
|
||||||
},
|
},
|
||||||
|
|
||||||
view: function (domainObject, objectPath) {
|
view: function (domainObject, objectPath) {
|
||||||
|
@ -201,15 +201,57 @@ describe("the plugin", function () {
|
|||||||
hints: {
|
hints: {
|
||||||
range: 1
|
range: 1
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "yet-another-key",
|
||||||
|
format: "string",
|
||||||
|
hints: {
|
||||||
|
range: 2
|
||||||
|
}
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const applicableViews = openmct.objectViews.get(testTelemetryObject, mockObjectPath);
|
const applicableViews = openmct.objectViews.get(testTelemetryObject, mockObjectPath);
|
||||||
let plotView = applicableViews.find((viewProvider) => viewProvider.key === "plot-simple");
|
const plotView = applicableViews.find((viewProvider) => viewProvider.key === "plot-single");
|
||||||
|
|
||||||
expect(plotView).toBeDefined();
|
expect(plotView).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("does not provide a plot view if the telemetry is entirely non numeric", () => {
|
||||||
|
const testTelemetryObject = {
|
||||||
|
id: "test-object",
|
||||||
|
type: "test-object",
|
||||||
|
telemetry: {
|
||||||
|
values: [{
|
||||||
|
key: "some-key",
|
||||||
|
hints: {
|
||||||
|
domain: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "other-key",
|
||||||
|
format: "string",
|
||||||
|
hints: {
|
||||||
|
range: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "yet-another-key",
|
||||||
|
format: "string",
|
||||||
|
hints: {
|
||||||
|
range: 1
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const applicableViews = openmct.objectViews.get(testTelemetryObject, mockObjectPath);
|
||||||
|
const plotView = applicableViews.find((viewProvider) => viewProvider.key === "plot-single");
|
||||||
|
|
||||||
|
expect(plotView).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
it("provides an overlay plot view for objects with telemetry", () => {
|
it("provides an overlay plot view for objects with telemetry", () => {
|
||||||
const testTelemetryObject = {
|
const testTelemetryObject = {
|
||||||
id: "test-object",
|
id: "test-object",
|
||||||
@ -323,7 +365,7 @@ describe("the plugin", function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
applicableViews = openmct.objectViews.get(testTelemetryObject, mockObjectPath);
|
applicableViews = openmct.objectViews.get(testTelemetryObject, mockObjectPath);
|
||||||
plotViewProvider = applicableViews.find((viewProvider) => viewProvider.key === "plot-simple");
|
plotViewProvider = applicableViews.find((viewProvider) => viewProvider.key === "plot-single");
|
||||||
plotView = plotViewProvider.view(testTelemetryObject, [testTelemetryObject]);
|
plotView = plotViewProvider.view(testTelemetryObject, [testTelemetryObject]);
|
||||||
plotView.show(child, true);
|
plotView.show(child, true);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user