mirror of
https://github.com/nasa/openmct.git
synced 2025-06-16 06:08:11 +00:00
* making move action location check persistability * adding persistence check instead of creatability for styles * added check for link action to make sure parent is persistable * debug * adding parent to link action and move action form location controls so they can be used in the form * adding parent persistability check for duplicate * updating multilple actions appliesTo methods to check for persistability * updated the tree to not require an initial selection if being used in a form * remove noneditable folder plugin * added persistence check for the parent, in the create wizard * minor name change * removing noneditabl folder from default plugins as well * checking the correct parent for persistability in create wizard * importing file-saver correctly * updated tests for import as json * changes addressing PR review: using consts, removing comments, removing unneccessary code Co-authored-by: Scott Bell <scott@traclabs.com>
129 lines
4.6 KiB
JavaScript
129 lines
4.6 KiB
JavaScript
/*****************************************************************************
|
|
* Open MCT, Copyright (c) 2014-2022, 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.key = 'remove';
|
|
this.description = 'Remove this object from its containing object.';
|
|
this.cssClass = "icon-trash";
|
|
this.group = "action";
|
|
this.priority = 1;
|
|
|
|
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("/");
|
|
|
|
this.openmct.router.navigate('#/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);
|
|
|
|
if (this.inNavigationPath(child) && this.openmct.editor.isEditing()) {
|
|
this.openmct.editor.save();
|
|
}
|
|
|
|
const parentKeyString = this.openmct.objects.makeKeyString(parent.identifier);
|
|
const isAlias = parentKeyString !== child.location;
|
|
|
|
if (!isAlias) {
|
|
this.openmct.objects.mutate(child, 'location', null);
|
|
}
|
|
}
|
|
|
|
appliesTo(objectPath) {
|
|
let parent = objectPath[1];
|
|
let parentType = parent && this.openmct.types.get(parent.type);
|
|
let child = objectPath[0];
|
|
let locked = child.locked ? child.locked : parent && parent.locked;
|
|
let isEditing = this.openmct.editor.isEditing();
|
|
let isPersistable = this.openmct.objects.isPersistable(child.identifier);
|
|
|
|
if (locked || !isPersistable) {
|
|
return false;
|
|
}
|
|
|
|
if (isEditing) {
|
|
let currentItemInView = this.openmct.router.path[0];
|
|
let domainObject = objectPath[0];
|
|
|
|
if (this.openmct.objects.areIdsEqual(currentItemInView.identifier, domainObject.identifier)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return parentType
|
|
&& parentType.definition.creatable
|
|
&& Array.isArray(parent.composition);
|
|
}
|
|
}
|