diff --git a/src/plugins/displayLayout/components/DisplayLayout.vue b/src/plugins/displayLayout/components/DisplayLayout.vue index 5adfd7bc92..7624ab358b 100644 --- a/src/plugins/displayLayout/components/DisplayLayout.vue +++ b/src/plugins/displayLayout/components/DisplayLayout.vue @@ -177,13 +177,13 @@ this.openmct.objects.mutate(this.internalDomainObject, path, value); }, handleDrop($event) { - if (!$event.dataTransfer.types.includes('openmct/domain-object')) { + if (!$event.dataTransfer.types.includes('openmct/domain-object-path')) { return; } $event.preventDefault(); - let domainObject = JSON.parse($event.dataTransfer.getData('openmct/domain-object')); + let domainObject = JSON.parse($event.dataTransfer.getData('openmct/domain-object-path'))[0]; let elementRect = this.$el.getBoundingClientRect(); let droppedObjectPosition = [ Math.floor(($event.pageX - elementRect.left) / this.gridSize[0]), diff --git a/src/plugins/flexibleLayout/components/container.vue b/src/plugins/flexibleLayout/components/container.vue index 8639319c5d..a169ffe1b3 100644 --- a/src/plugins/flexibleLayout/components/container.vue +++ b/src/plugins/flexibleLayout/components/container.vue @@ -100,7 +100,7 @@ export default { }, methods: { allowDrop(event, index) { - if (event.dataTransfer.getData('openmct/domain-object')) { + if (event.dataTransfer.types.includes('openmct/domain-object-path')) { return true; } let frameId = event.dataTransfer.getData('frameid'), @@ -124,9 +124,9 @@ export default { } }, moveOrCreateFrame(insertIndex, event) { - if (event.dataTransfer.types.includes('openmct/domain-object')) { + if (event.dataTransfer.types.includes('openmct/domain-object-path')) { // create frame using domain object - let domainObject = JSON.parse(event.dataTransfer.getData('openmct/domain-object')); + let domainObject = JSON.parse(event.dataTransfer.getData('openmct/domain-object-path'))[0]; this.$emit( 'create-frame', this.index, diff --git a/src/plugins/notebook/src/controllers/EntryController.js b/src/plugins/notebook/src/controllers/EntryController.js index 758790cf5e..d23ee4f3c0 100644 --- a/src/plugins/notebook/src/controllers/EntryController.js +++ b/src/plugins/notebook/src/controllers/EntryController.js @@ -107,10 +107,10 @@ function ( EntryController.prototype.dropOnEntry = function (entryid, event) { - var data = event.dataTransfer.getData('openmct/domain-object'); + var data = event.dataTransfer.getData('openmct/domain-object-path'); if (data) { - var selectedObject = JSON.parse(data), + var selectedObject = JSON.parse(data)[0], selectedObjectId = selectedObject.identifier.key, cssClass = this.openmct.types.get(selectedObject.type), entryPos = this.entryPosById(entryid), diff --git a/src/plugins/notebook/src/controllers/NotebookController.js b/src/plugins/notebook/src/controllers/NotebookController.js index 0d9b91f7ba..aa537555ae 100644 --- a/src/plugins/notebook/src/controllers/NotebookController.js +++ b/src/plugins/notebook/src/controllers/NotebookController.js @@ -120,8 +120,8 @@ function ( var date = Date.now(), embed; - if (event.dataTransfer && event.dataTransfer.getData('openmct/domain-object')) { - var selectedObject = JSON.parse(event.dataTransfer.getData('openmct/domain-object')), + if (event.dataTransfer && event.dataTransfer.getData('openmct/domain-object-path')) { + var selectedObject = JSON.parse(event.dataTransfer.getData('openmct/domain-object-path'))[0], selectedObjectId = selectedObject.identifier.key, cssClass = this.openmct.types.get(selectedObject.type); diff --git a/src/plugins/tabs/components/tabs.vue b/src/plugins/tabs/components/tabs.vue index d13cace7ad..2823d1d79b 100644 --- a/src/plugins/tabs/components/tabs.vue +++ b/src/plugins/tabs/components/tabs.vue @@ -147,7 +147,7 @@ export default { this.setCurrentTab = true; }, dragstart (e) { - if (e.dataTransfer.getData('openmct/domain-object')) { + if (e.dataTransfer.types.includes('openmct/domain-object-path')) { this.isDragging = true; } }, diff --git a/src/ui/components/ObjectLabel.vue b/src/ui/components/ObjectLabel.vue index bc6ed4ecc5..14b3736989 100644 --- a/src/ui/components/ObjectLabel.vue +++ b/src/ui/components/ObjectLabel.vue @@ -65,11 +65,19 @@ export default { }, dragStart(event) { let navigatedObject = this.openmct.router.path[0]; - let serializedObject = JSON.stringify(this.observedObject); + let serializedPath = JSON.stringify(this.objectPath); + + /* + * Cannot inspect data transfer objects on dragover/dragenter so impossible to determine composability at + * that point. If dragged object can be composed by navigated object, then indicate with presence of + * 'composable-domain-object' in data transfer + */ if (this.openmct.composition.checkPolicy(navigatedObject, this.observedObject)) { - event.dataTransfer.setData("openmct/composable-domain-object", serializedObject); + event.dataTransfer.setData("openmct/composable-domain-object", JSON.stringify(this.domainObject)); } - event.dataTransfer.setData("openmct/domain-object", serializedObject); + // serialize domain object anyway, because some views can drag-and-drop objects without composition + // (eg. notabook.) + event.dataTransfer.setData("openmct/domain-object-path", serializedPath); } } }