From d026bc2134f3342fe5955e9c09ce047b3591f194 Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Wed, 12 Dec 2018 17:17:49 -0800 Subject: [PATCH] Show edit only if view is editable. Rename editable to canEdit --- .../commonUI/edit/src/policies/EditActionPolicy.js | 7 ++++--- src/adapter/views/LegacyViewProvider.js | 4 +++- src/plugins/displayLayout/plugin.js | 3 +++ .../flexibleLayout/flexibleLayoutViewProvider.js | 3 +++ .../src/views/SummaryWidgetViewProvider.js | 4 +++- src/plugins/tabs/tabs.js | 3 +++ .../telemetryTable/TelemetryTableViewProvider.js | 12 ++++++------ src/ui/components/layout/BrowseBar.vue | 10 +++++++++- src/ui/registries/ViewRegistry.js | 12 ++++++++++++ 9 files changed, 46 insertions(+), 12 deletions(-) diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index 2d6dd56b37..d898609bb4 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -41,6 +41,7 @@ define( * @private */ EditActionPolicy.prototype.countEditableViews = function (context) { + console.trace('countEditableViews'); var domainObject = context.domainObject, count = 0, type, views; @@ -65,10 +66,10 @@ define( }); function isEditable(view) { - if (typeof view.editable === Function) { - return view.editable(domainObject.useCapability('adapter')); + if (typeof view.canEdit === Function) { + return view.canEdit(domainObject.useCapability('adapter')); } else { - return view.editable === true; + return view.canEdit === true; } } diff --git a/src/adapter/views/LegacyViewProvider.js b/src/adapter/views/LegacyViewProvider.js index 686175f820..517b9a921c 100644 --- a/src/adapter/views/LegacyViewProvider.js +++ b/src/adapter/views/LegacyViewProvider.js @@ -21,7 +21,9 @@ define([ name: legacyView.name, cssClass: legacyView.cssClass, description: legacyView.description, - editable: legacyView.editable, + canEdit: function () { + return legacyView.editable === true; + }, canView: function (domainObject) { if (!domainObject || !domainObject.identifier) { return false; diff --git a/src/plugins/displayLayout/plugin.js b/src/plugins/displayLayout/plugin.js index 397d3c0b67..a50d6bf2df 100644 --- a/src/plugins/displayLayout/plugin.js +++ b/src/plugins/displayLayout/plugin.js @@ -33,6 +33,9 @@ export default function () { canView: function (domainObject) { return domainObject.type === 'layout'; }, + canEdit: function (domainObject) { + return domainObject.type === 'layout'; + }, view: function (domainObject) { let component; return { diff --git a/src/plugins/flexibleLayout/flexibleLayoutViewProvider.js b/src/plugins/flexibleLayout/flexibleLayoutViewProvider.js index 7dd7dcfcde..f981ba54a9 100644 --- a/src/plugins/flexibleLayout/flexibleLayoutViewProvider.js +++ b/src/plugins/flexibleLayout/flexibleLayoutViewProvider.js @@ -35,6 +35,9 @@ define([ canView: function (domainObject) { return domainObject.type === 'flexible-layout'; }, + canEdit: function (domainObject) { + return domainObject.type === 'flexible-layout'; + }, view: function (domainObject) { let component; diff --git a/src/plugins/summaryWidget/src/views/SummaryWidgetViewProvider.js b/src/plugins/summaryWidget/src/views/SummaryWidgetViewProvider.js index 61a9fb470d..77a9a2f814 100644 --- a/src/plugins/summaryWidget/src/views/SummaryWidgetViewProvider.js +++ b/src/plugins/summaryWidget/src/views/SummaryWidgetViewProvider.js @@ -20,6 +20,9 @@ define([ canView: function (domainObject) { return domainObject.type === 'summary-widget'; }, + canEdit: function (domainObject) { + return domainObject.type === 'summary-widget'; + }, view: function (domainObject) { var statusService = openmct.$injector.get('statusService'); var objectId = objectUtils.makeKeyString(domainObject.identifier); @@ -32,7 +35,6 @@ define([ return new SummaryWidgetView(domainObject, openmct); } }, - editable: true, priority: function (domainObject) { if (domainObject.type === 'summary-widget') { return Number.MAX_VALUE; diff --git a/src/plugins/tabs/tabs.js b/src/plugins/tabs/tabs.js index e896e7acd6..1b40f3f848 100644 --- a/src/plugins/tabs/tabs.js +++ b/src/plugins/tabs/tabs.js @@ -35,6 +35,9 @@ define([ canView: function (domainObject) { return domainObject.type === 'tabs'; }, + canEdit: function (domainObject) { + return domainObject.type === 'tabs'; + }, view: function (domainObject) { let component; diff --git a/src/plugins/telemetryTable/TelemetryTableViewProvider.js b/src/plugins/telemetryTable/TelemetryTableViewProvider.js index 58acc86d7e..b96c1efe53 100644 --- a/src/plugins/telemetryTable/TelemetryTableViewProvider.js +++ b/src/plugins/telemetryTable/TelemetryTableViewProvider.js @@ -36,13 +36,13 @@ define([ key: 'table', name: 'Telemetry Table', cssClass: 'icon-tabular-realtime', - editable: function(domainObject) { - return domainObject.type === 'table'; - }, - canView: function (domainObject) { + canView(domainObject) { return domainObject.type === 'table' || domainObject.hasOwnProperty('telemetry'); }, - view: function (domainObject) { + canEdit(domainObject) { + return domainObject.type === 'table'; + }, + view(domainObject) { let csvExporter = new CSVExporter.default(); let table = new TelemetryTable(domainObject, openmct); let component; @@ -67,7 +67,7 @@ define([ } } }, - priority: function () { + priority() { return 1; } } diff --git a/src/ui/components/layout/BrowseBar.vue b/src/ui/components/layout/BrowseBar.vue index 8416513a42..3ddc9e8427 100644 --- a/src/ui/components/layout/BrowseBar.vue +++ b/src/ui/components/layout/BrowseBar.vue @@ -40,7 +40,7 @@
- +
@@ -119,6 +119,14 @@ return {} } return objectType.definition; + }, + isViewEditable() { + let currentViewKey = this.currentView.key; + if (currentViewKey !== undefined) { + let currentViewProvider = this.openmct.objectViews.getByProviderKey(currentViewKey); + return currentViewProvider.canEdit && currentViewProvider.canEdit(this.domainObject); + } + return false; } }, mounted: function () { diff --git a/src/ui/registries/ViewRegistry.js b/src/ui/registries/ViewRegistry.js index bebde51c7e..480bb79867 100644 --- a/src/ui/registries/ViewRegistry.js +++ b/src/ui/registries/ViewRegistry.js @@ -170,6 +170,18 @@ define([], function () { * otherwise 'false'. */ + /** + * An optional function that defines whether or not this view can be used to edit a given object. + * If not provided, will default to `false` and the view will not support editing. + * + * @method canEdit + * @memberof module:openmct.ViewProvider# + * @param {module:openmct.DomainObject} domainObject the domain object + * to be edited + * @returns {boolean} 'true' if the view can be used to edit the provided object, + * otherwise 'false'. + */ + /** * Optional method determining the priority of a given view. If this * function is not defined on a view provider, then a default priority