mirror of
https://github.com/nasa/openmct.git
synced 2025-01-30 16:13:53 +00:00
Reimplemented Remove Action. Removed confirmation dialog from legacy remove action, which move still relies on (#2290)
This commit is contained in:
parent
402062110d
commit
5151f90bb8
@ -160,7 +160,7 @@ define([
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "remove",
|
"key": "remove",
|
||||||
"category": "contextual",
|
"category": "legacy",
|
||||||
"implementation": RemoveAction,
|
"implementation": RemoveAction,
|
||||||
"cssClass": "icon-trash",
|
"cssClass": "icon-trash",
|
||||||
"name": "Remove",
|
"name": "Remove",
|
||||||
|
@ -23,11 +23,7 @@
|
|||||||
/**
|
/**
|
||||||
* Module defining RemoveAction. Created by vwoeltje on 11/17/14.
|
* Module defining RemoveAction. Created by vwoeltje on 11/17/14.
|
||||||
*/
|
*/
|
||||||
define([
|
define([], function () {
|
||||||
'./RemoveDialog'
|
|
||||||
], function (
|
|
||||||
RemoveDialog
|
|
||||||
) {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct an action which will remove the provided object manifestation.
|
* Construct an action which will remove the provided object manifestation.
|
||||||
@ -114,12 +110,7 @@ define([
|
|||||||
return parent.useCapability('mutation', doMutate);
|
return parent.useCapability('mutation', doMutate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
removeFromContext();
|
||||||
* Pass in the function to remove the domain object so it can be
|
|
||||||
* associated with an 'OK' button press
|
|
||||||
*/
|
|
||||||
dialog = new RemoveDialog(this.openmct, domainObject, removeFromContext);
|
|
||||||
dialog.show();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Object needs to have a parent for Remove to be applicable
|
// Object needs to have a parent for Remove to be applicable
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, 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([], function () {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @callback removeCallback
|
|
||||||
* @param {DomainObject} domainObject the domain object to be removed
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct a new Remove dialog.
|
|
||||||
*
|
|
||||||
* @param {DialogService} dialogService the service that shows the dialog
|
|
||||||
* @param {DomainObject} domainObject the domain object to be removed
|
|
||||||
* @param {removeCallback} removeCallback callback that handles removal of the domain object
|
|
||||||
* @memberof platform/commonUI/edit
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function RemoveDialog(openmct, domainObject, removeCallback) {
|
|
||||||
this.openmct = openmct;
|
|
||||||
this.domainObject = domainObject;
|
|
||||||
this.removeCallback = removeCallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display a dialog to confirm the removal of a domain object.
|
|
||||||
*/
|
|
||||||
RemoveDialog.prototype.show = function () {
|
|
||||||
let dialog = this.openmct.overlays.dialog({
|
|
||||||
title: 'Remove ' + this.domainObject.getModel().name,
|
|
||||||
iconClass: 'alert',
|
|
||||||
message: 'Warning! This action will permanently remove this object. Are you sure you want to continue?',
|
|
||||||
buttons: [
|
|
||||||
{
|
|
||||||
label: 'OK',
|
|
||||||
callback: () => {
|
|
||||||
this.removeCallback();
|
|
||||||
dialog.dismiss();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Cancel',
|
|
||||||
callback: () => {
|
|
||||||
dialog.dismiss();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return RemoveDialog;
|
|
||||||
});
|
|
@ -44,6 +44,7 @@ define([
|
|||||||
'../platform/core/src/objects/DomainObjectImpl',
|
'../platform/core/src/objects/DomainObjectImpl',
|
||||||
'../platform/core/src/capabilities/ContextualDomainObject',
|
'../platform/core/src/capabilities/ContextualDomainObject',
|
||||||
'./ui/preview/plugin',
|
'./ui/preview/plugin',
|
||||||
|
'./plugins/remove/plugin',
|
||||||
'vue'
|
'vue'
|
||||||
], function (
|
], function (
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@ -69,6 +70,7 @@ define([
|
|||||||
DomainObjectImpl,
|
DomainObjectImpl,
|
||||||
ContextualDomainObject,
|
ContextualDomainObject,
|
||||||
PreviewPlugin,
|
PreviewPlugin,
|
||||||
|
RemoveActionPlugin,
|
||||||
Vue
|
Vue
|
||||||
) {
|
) {
|
||||||
/**
|
/**
|
||||||
@ -233,6 +235,7 @@ define([
|
|||||||
this.install(this.plugins.TelemetryTable());
|
this.install(this.plugins.TelemetryTable());
|
||||||
this.install(this.plugins.DisplayLayout());
|
this.install(this.plugins.DisplayLayout());
|
||||||
this.install(PreviewPlugin.default());
|
this.install(PreviewPlugin.default());
|
||||||
|
this.install(RemoveActionPlugin.default());
|
||||||
|
|
||||||
if (typeof BUILD_CONSTANTS !== 'undefined') {
|
if (typeof BUILD_CONSTANTS !== 'undefined') {
|
||||||
this.install(buildInfoPlugin(BUILD_CONSTANTS));
|
this.install(buildInfoPlugin(BUILD_CONSTANTS));
|
||||||
|
101
src/plugins/remove/RemoveAction.js
Normal file
101
src/plugins/remove/RemoveAction.js
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2019, 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
export default class RemoveAction {
|
||||||
|
constructor(openmct) {
|
||||||
|
this.name = 'Remove';
|
||||||
|
this.description = 'Remove this object from its containing object.';
|
||||||
|
this.cssClass = "icon-trash";
|
||||||
|
|
||||||
|
this.openmct = openmct;
|
||||||
|
}
|
||||||
|
|
||||||
|
invoke(objectPath) {
|
||||||
|
let object = objectPath[0];
|
||||||
|
let parent = objectPath[1];
|
||||||
|
this.showConfirmDialog(object).then(() => {
|
||||||
|
this.removeFromComposition(parent, object);
|
||||||
|
if (this.inNavigationPath(object)) {
|
||||||
|
this.navigateTo(objectPath.slice(1));
|
||||||
|
}
|
||||||
|
}).catch(() =>{});
|
||||||
|
}
|
||||||
|
|
||||||
|
showConfirmDialog(object) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let dialog = this.openmct.overlays.dialog({
|
||||||
|
title: `Remove ${object.name}`,
|
||||||
|
iconClass: 'alert',
|
||||||
|
message: 'Warning! This action will remove this object. Are you sure you want to continue?',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
label: 'OK',
|
||||||
|
callback: () => {
|
||||||
|
dialog.dismiss();
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Cancel',
|
||||||
|
callback: () => {
|
||||||
|
dialog.dismiss();
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
inNavigationPath(object) {
|
||||||
|
return this.openmct.router.path
|
||||||
|
.some(objectInPath => this.openmct.objects.areIdsEqual(objectInPath.identifier, object.identifier));
|
||||||
|
}
|
||||||
|
|
||||||
|
navigateTo(objectPath) {
|
||||||
|
let urlPath = objectPath.reverse()
|
||||||
|
.map(object => this.openmct.objects.makeKeyString(object.identifier))
|
||||||
|
.join("/");
|
||||||
|
|
||||||
|
window.location.href = '#/browse/' + urlPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeFromComposition(parent, child) {
|
||||||
|
let composition = parent.composition.filter(id =>
|
||||||
|
!this.openmct.objects.areIdsEqual(id, child.identifier)
|
||||||
|
);
|
||||||
|
|
||||||
|
this.openmct.objects.mutate(parent, 'composition', composition);
|
||||||
|
}
|
||||||
|
|
||||||
|
appliesTo(objectPath) {
|
||||||
|
let object = objectPath[0];
|
||||||
|
let objectType = object && this.openmct.types.get(object.type);
|
||||||
|
let parent = objectPath[1];
|
||||||
|
let parentType = parent && this.openmct.types.get(parent.type);
|
||||||
|
|
||||||
|
return objectType.definition.creatable &&
|
||||||
|
parentType &&
|
||||||
|
parentType.definition.creatable &&
|
||||||
|
Array.isArray(parent.composition);
|
||||||
|
}
|
||||||
|
}
|
28
src/plugins/remove/plugin.js
Normal file
28
src/plugins/remove/plugin.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2019, 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
import RemoveAction from "./RemoveAction";
|
||||||
|
|
||||||
|
export default function () {
|
||||||
|
return function (openmct) {
|
||||||
|
openmct.contextMenu.registerAction(new RemoveAction(openmct));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user