mirror of
https://github.com/nasa/openmct.git
synced 2025-05-13 22:13:18 +00:00
* if user provider, user added to notebook enntries and snapshot entries, updated code to work with asynnc nature of user api Co-authored-by: Andrew Henry <akhenry@gmail.com> Co-authored-by: Nikhil <nikhil.k.mandlik@nasa.gov>
118 lines
4.3 KiB
JavaScript
118 lines
4.3 KiB
JavaScript
import { addNotebookEntry, createNewEmbed } from './utils/notebook-entries';
|
|
import { getDefaultNotebook, getNotebookSectionAndPage, getDefaultNotebookLink, setDefaultNotebook } from './utils/notebook-storage';
|
|
import { NOTEBOOK_DEFAULT } from '@/plugins/notebook/notebook-constants';
|
|
import { createNotebookImageDomainObject, saveNotebookImageDomainObject, updateNamespaceOfDomainObject, DEFAULT_SIZE } from './utils/notebook-image';
|
|
|
|
import SnapshotContainer from './snapshot-container';
|
|
import ImageExporter from '../../exporters/ImageExporter';
|
|
|
|
export default class Snapshot {
|
|
constructor(openmct) {
|
|
this.openmct = openmct;
|
|
this.snapshotContainer = new SnapshotContainer(openmct);
|
|
this.imageExporter = new ImageExporter(openmct);
|
|
|
|
this.capture = this.capture.bind(this);
|
|
this._saveSnapShot = this._saveSnapShot.bind(this);
|
|
}
|
|
|
|
capture(snapshotMeta, notebookType, domElement) {
|
|
const options = {
|
|
className: 's-status-taking-snapshot',
|
|
thumbnailSize: DEFAULT_SIZE
|
|
};
|
|
this.imageExporter.exportPNGtoSRC(domElement, options)
|
|
.then(function ({blob, thumbnail}) {
|
|
const reader = new window.FileReader();
|
|
reader.readAsDataURL(blob);
|
|
reader.onloadend = function () {
|
|
this._saveSnapShot(notebookType, reader.result, thumbnail, snapshotMeta);
|
|
}.bind(this);
|
|
}.bind(this));
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
_saveSnapShot(notebookType, fullSizeImageURL, thumbnailImageURL, snapshotMeta) {
|
|
const object = createNotebookImageDomainObject(fullSizeImageURL);
|
|
const thumbnailImage = { src: thumbnailImageURL || '' };
|
|
const snapshot = {
|
|
fullSizeImageObjectIdentifier: object.identifier,
|
|
thumbnailImage
|
|
};
|
|
createNewEmbed(snapshotMeta, snapshot).then(embed => {
|
|
if (notebookType === NOTEBOOK_DEFAULT) {
|
|
const notebookStorage = getDefaultNotebook();
|
|
|
|
this._saveToDefaultNoteBook(notebookStorage, embed);
|
|
const notebookImageDomainObject = updateNamespaceOfDomainObject(object, notebookStorage.identifier.namespace);
|
|
saveNotebookImageDomainObject(this.openmct, notebookImageDomainObject);
|
|
} else {
|
|
this._saveToNotebookSnapshots(object, embed);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
_saveToDefaultNoteBook(notebookStorage, embed) {
|
|
this.openmct.objects.get(notebookStorage.identifier)
|
|
.then((domainObject) => {
|
|
return addNotebookEntry(this.openmct, domainObject, notebookStorage, embed).then(async () => {
|
|
let link = notebookStorage.link;
|
|
|
|
// Backwards compatibility fix (old notebook model without link)
|
|
if (!link) {
|
|
link = await getDefaultNotebookLink(this.openmct, domainObject);
|
|
notebookStorage.link = link;
|
|
setDefaultNotebook(this.openmct, notebookStorage);
|
|
}
|
|
|
|
const { section, page } = getNotebookSectionAndPage(domainObject, notebookStorage.defaultSectionId, notebookStorage.defaultPageId);
|
|
if (!section || !page) {
|
|
return;
|
|
}
|
|
|
|
const defaultPath = `${domainObject.name} - ${section.name} - ${page.name}`;
|
|
const msg = `Saved to Notebook ${defaultPath}`;
|
|
this._showNotification(msg, link);
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
_saveToNotebookSnapshots(notebookImageDomainObject, embed) {
|
|
this.snapshotContainer.addSnapshot(notebookImageDomainObject, embed);
|
|
}
|
|
|
|
_showNotification(msg, url) {
|
|
const options = {
|
|
autoDismissTimeout: 30000
|
|
};
|
|
|
|
if (!this.openmct.editor.isEditing()) {
|
|
options.link = {
|
|
cssClass: '',
|
|
text: 'click to view',
|
|
onClick: this._navigateToNotebook(url)
|
|
};
|
|
}
|
|
|
|
this.openmct.notifications.info(msg, options);
|
|
}
|
|
|
|
_navigateToNotebook(url = null) {
|
|
if (!url) {
|
|
return () => {};
|
|
}
|
|
|
|
return () => {
|
|
location.hash = url;
|
|
};
|
|
}
|
|
}
|