When dropping an unsupported file onto a notebook entry, tell the user it isnt supported (#7115)
* handle unknown files and deal with copy/paste * add some nice errors if couch pukes * added how to adjust couchdb limits * throw error on anntotation change * keep blockquotes * add test for blockquotes * allow multi-file drop of images too * add test for big files * spell check * check for null * need to ignore console errors * reorder tests so we can ignore console errors * when creating new entry, ready it for editing * fix tests and empty embeds * fix tests * found similar issue from notebooks in plots
This commit is contained in:
@@ -625,21 +625,35 @@ export default {
|
||||
dropEvent.preventDefault();
|
||||
dropEvent.stopImmediatePropagation();
|
||||
|
||||
const localImageDropped = dropEvent.dataTransfer.files?.[0]?.type.includes('image');
|
||||
const imageUrl = dropEvent.dataTransfer.getData('URL');
|
||||
const dataTransferFiles = Array.from(dropEvent.dataTransfer.files);
|
||||
const localImageDropped = dataTransferFiles.some((file) => file.type.includes('image'));
|
||||
const snapshotId = dropEvent.dataTransfer.getData('openmct/snapshot/id');
|
||||
const domainObjectData = dropEvent.dataTransfer.getData('openmct/domain-object-path');
|
||||
const imageUrl = dropEvent.dataTransfer.getData('URL');
|
||||
if (localImageDropped) {
|
||||
// local image dropped from disk (file)
|
||||
const imageData = dropEvent.dataTransfer.files[0];
|
||||
const imageEmbed = await createNewImageEmbed(imageData, this.openmct, imageData?.name);
|
||||
this.newEntry(imageEmbed);
|
||||
// local image(s) dropped from disk (file)
|
||||
const embeds = [];
|
||||
await Promise.all(
|
||||
dataTransferFiles.map(async (file) => {
|
||||
if (file.type.includes('image')) {
|
||||
const imageData = file;
|
||||
const imageEmbed = await createNewImageEmbed(
|
||||
imageData,
|
||||
this.openmct,
|
||||
imageData?.name
|
||||
);
|
||||
embeds.push(imageEmbed);
|
||||
}
|
||||
})
|
||||
);
|
||||
this.newEntry(embeds);
|
||||
} else if (imageUrl) {
|
||||
// remote image dropped (URL)
|
||||
try {
|
||||
const response = await fetch(imageUrl);
|
||||
const imageData = await response.blob();
|
||||
const imageEmbed = await createNewImageEmbed(imageData, this.openmct);
|
||||
this.newEntry(imageEmbed);
|
||||
this.newEntry([imageEmbed]);
|
||||
} catch (error) {
|
||||
this.openmct.notifications.alert(`Unable to add image: ${error.message} `);
|
||||
console.error(`Problem embedding remote image`, error);
|
||||
@@ -647,7 +661,7 @@ export default {
|
||||
} else if (snapshotId.length) {
|
||||
// snapshot object
|
||||
const snapshot = this.snapshotContainer.getSnapshot(snapshotId);
|
||||
this.newEntry(snapshot.embedObject);
|
||||
this.newEntry([snapshot.embedObject]);
|
||||
this.snapshotContainer.removeSnapshot(snapshotId);
|
||||
|
||||
const namespace = this.domainObject.identifier.namespace;
|
||||
@@ -656,10 +670,9 @@ export default {
|
||||
namespace
|
||||
);
|
||||
saveNotebookImageDomainObject(this.openmct, notebookImageDomainObject);
|
||||
} else {
|
||||
} else if (domainObjectData) {
|
||||
// plain domain object
|
||||
const data = dropEvent.dataTransfer.getData('openmct/domain-object-path');
|
||||
const objectPath = JSON.parse(data);
|
||||
const objectPath = JSON.parse(domainObjectData);
|
||||
const bounds = this.openmct.time.bounds();
|
||||
const snapshotMeta = {
|
||||
bounds,
|
||||
@@ -668,8 +681,15 @@ export default {
|
||||
openmct: this.openmct
|
||||
};
|
||||
const embed = await createNewEmbed(snapshotMeta);
|
||||
|
||||
this.newEntry(embed);
|
||||
this.newEntry([embed]);
|
||||
} else {
|
||||
this.openmct.notifications.error(
|
||||
`Unknown object(s) dropped and cannot embed. Try again with an image or domain object.`
|
||||
);
|
||||
console.warn(
|
||||
`Unknown object(s) dropped and cannot embed. Try again with an image or domain object.`
|
||||
);
|
||||
return;
|
||||
}
|
||||
},
|
||||
focusOnEntryId() {
|
||||
@@ -838,12 +858,12 @@ export default {
|
||||
getSelectedSectionId() {
|
||||
return this.selectedSection?.id;
|
||||
},
|
||||
async newEntry(embed, event) {
|
||||
async newEntry(embeds, event) {
|
||||
this.startTransaction();
|
||||
this.resetSearch();
|
||||
const notebookStorage = this.createNotebookStorageObject();
|
||||
this.updateDefaultNotebook(notebookStorage);
|
||||
const id = await addNotebookEntry(this.openmct, this.domainObject, notebookStorage, embed);
|
||||
const id = await addNotebookEntry(this.openmct, this.domainObject, notebookStorage, embeds);
|
||||
|
||||
const element = this.$refs.notebookEntries.querySelector(`#${id}`);
|
||||
const entryAnnotations = this.notebookAnnotations[id] ?? {};
|
||||
@@ -861,6 +881,11 @@ export default {
|
||||
this.filterAndSortEntries();
|
||||
this.focusEntryId = id;
|
||||
this.selectedEntryId = id;
|
||||
|
||||
// put entry into edit mode
|
||||
this.$nextTick(() => {
|
||||
element.dispatchEvent(new Event('click'));
|
||||
});
|
||||
},
|
||||
orientationChange() {
|
||||
this.formatSidebar();
|
||||
|
||||
Reference in New Issue
Block a user