mirror of
https://github.com/nasa/openmct.git
synced 2025-06-14 21:28:12 +00:00
View Large overlay doesn't allow taking Snapshots (#4091)
* Added NotebookMenuSwitcher in preview header * Use preview component inside viewLargeAction * Added autoHide flag to overlay API that allows developers to specify whether an overlay should remain visible if other overlays are subsequently triggered (eg. the snapshot overlay) * When in edit mode, disable navigation link to notebook entry. Co-authored-by: Andrew Henry <akhenry@gmail.com>
This commit is contained in:
@ -456,12 +456,9 @@ export default {
|
||||
: undefined;
|
||||
},
|
||||
getDefaultNotebookObject() {
|
||||
const oldNotebookStorage = getDefaultNotebook();
|
||||
if (!oldNotebookStorage) {
|
||||
return null;
|
||||
}
|
||||
const defaultNotebook = getDefaultNotebook();
|
||||
|
||||
return this.openmct.objects.get(oldNotebookStorage.identifier);
|
||||
return defaultNotebook && this.openmct.objects.get(defaultNotebook.identifier);
|
||||
},
|
||||
getLinktoNotebook() {
|
||||
const objectPath = this.openmct.router.path;
|
||||
|
@ -17,19 +17,26 @@
|
||||
|
||||
<script>
|
||||
import Snapshot from '../snapshot';
|
||||
import { getDefaultNotebook, getNotebookSectionAndPage, validateNotebookStorageObject } from '../utils/notebook-storage';
|
||||
import { getDefaultNotebook, validateNotebookStorageObject } from '../utils/notebook-storage';
|
||||
import { NOTEBOOK_DEFAULT, NOTEBOOK_SNAPSHOT } from '../notebook-constants';
|
||||
import { getMenuItems } from '../utils/notebook-snapshot-menu';
|
||||
|
||||
export default {
|
||||
inject: ['openmct'],
|
||||
props: {
|
||||
currentView: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
domainObject: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
ignoreLink: {
|
||||
isPreview: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false;
|
||||
@ -50,51 +57,40 @@ export default {
|
||||
},
|
||||
mounted() {
|
||||
validateNotebookStorageObject();
|
||||
this.getDefaultNotebookObject();
|
||||
|
||||
this.notebookSnapshot = new Snapshot(this.openmct);
|
||||
this.setDefaultNotebookStatus();
|
||||
},
|
||||
methods: {
|
||||
getDefaultNotebookObject() {
|
||||
const defaultNotebook = getDefaultNotebook();
|
||||
getPreviewObjectLink() {
|
||||
const relativePath = this.openmct.objects.getRelativePath(this.objectPath);
|
||||
const urlParams = this.openmct.router.getParams();
|
||||
urlParams.view = this.currentView.key;
|
||||
|
||||
return defaultNotebook && this.openmct.objects.get(defaultNotebook.identifier);
|
||||
const urlParamsString = Object.entries(urlParams)
|
||||
.map(([key, value]) => `${key}=${value}`)
|
||||
.join('&');
|
||||
|
||||
return `#/browse/${relativePath}?${urlParamsString}`;
|
||||
},
|
||||
async showMenu(event) {
|
||||
const notebookTypes = [];
|
||||
const menuItemOptions = {
|
||||
default: {
|
||||
cssClass: 'icon-notebook',
|
||||
name: `Save to Notebook`,
|
||||
onItemClicked: () => this.snapshot(NOTEBOOK_DEFAULT, event.target)
|
||||
},
|
||||
snapshot: {
|
||||
cssClass: 'icon-camera',
|
||||
name: 'Save to Notebook Snapshots',
|
||||
onItemClicked: () => this.snapshot(NOTEBOOK_SNAPSHOT, event.target)
|
||||
}
|
||||
};
|
||||
|
||||
const notebookTypes = await getMenuItems(this.openmct, menuItemOptions);
|
||||
const elementBoundingClientRect = this.$el.getBoundingClientRect();
|
||||
const x = elementBoundingClientRect.x;
|
||||
const y = elementBoundingClientRect.y + elementBoundingClientRect.height;
|
||||
|
||||
const defaultNotebookObject = await this.getDefaultNotebookObject();
|
||||
if (defaultNotebookObject) {
|
||||
const defaultNotebook = getDefaultNotebook();
|
||||
const { section, page } = getNotebookSectionAndPage(defaultNotebookObject, defaultNotebook.defaultSectionId, defaultNotebook.defaultPageId);
|
||||
if (section && page) {
|
||||
const name = defaultNotebookObject.name;
|
||||
const sectionName = section.name;
|
||||
const pageName = page.name;
|
||||
const defaultPath = `${name} - ${sectionName} - ${pageName}`;
|
||||
|
||||
notebookTypes.push({
|
||||
cssClass: 'icon-notebook',
|
||||
name: `Save to Notebook ${defaultPath}`,
|
||||
onItemClicked: () => {
|
||||
return this.snapshot(NOTEBOOK_DEFAULT, event.target);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
notebookTypes.push({
|
||||
cssClass: 'icon-camera',
|
||||
name: 'Save to Notebook Snapshots',
|
||||
onItemClicked: () => {
|
||||
return this.snapshot(NOTEBOOK_SNAPSHOT, event.target);
|
||||
}
|
||||
});
|
||||
|
||||
this.openmct.menus.showMenu(x, y, notebookTypes);
|
||||
},
|
||||
snapshot(notebookType, target) {
|
||||
@ -102,15 +98,12 @@ export default {
|
||||
const wrapper = target && target.closest('.js-notebook-snapshot-item-wrapper')
|
||||
|| document;
|
||||
const element = wrapper.querySelector('.js-notebook-snapshot-item');
|
||||
|
||||
const bounds = this.openmct.time.bounds();
|
||||
const link = !this.ignoreLink
|
||||
? window.location.hash
|
||||
: null;
|
||||
|
||||
const objectPath = this.objectPath || this.openmct.router.path;
|
||||
const link = this.isPreview
|
||||
? this.getPreviewObjectLink()
|
||||
: window.location.hash;
|
||||
const snapshotMeta = {
|
||||
bounds,
|
||||
bounds: this.openmct.time.bounds(),
|
||||
link,
|
||||
objectPath,
|
||||
openmct: this.openmct
|
||||
|
@ -90,13 +90,16 @@ export default class Snapshot {
|
||||
|
||||
_showNotification(msg, url) {
|
||||
const options = {
|
||||
autoDismissTimeout: 30000,
|
||||
link: {
|
||||
autoDismissTimeout: 30000
|
||||
};
|
||||
|
||||
if (!this.openmct.editor.isEditing()) {
|
||||
options.link = {
|
||||
cssClass: '',
|
||||
text: 'click to view',
|
||||
onClick: this._navigateToNotebook(url)
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
this.openmct.notifications.info(msg, options);
|
||||
}
|
||||
|
31
src/plugins/notebook/utils/notebook-snapshot-menu.js
Normal file
31
src/plugins/notebook/utils/notebook-snapshot-menu.js
Normal file
@ -0,0 +1,31 @@
|
||||
import { getDefaultNotebook, getNotebookSectionAndPage } from './notebook-storage';
|
||||
|
||||
export async function getMenuItems(openmct, menuItemOptions) {
|
||||
const notebookTypes = [];
|
||||
|
||||
const defaultNotebook = getDefaultNotebook();
|
||||
const defaultNotebookObject = defaultNotebook && await openmct.objects.get(defaultNotebook.identifier);
|
||||
if (defaultNotebookObject) {
|
||||
const { section, page } = getNotebookSectionAndPage(defaultNotebookObject, defaultNotebook.defaultSectionId, defaultNotebook.defaultPageId);
|
||||
if (section && page) {
|
||||
const name = defaultNotebookObject.name;
|
||||
const sectionName = section.name;
|
||||
const pageName = page.name;
|
||||
const defaultPath = `${name} - ${sectionName} - ${pageName}`;
|
||||
|
||||
notebookTypes.push({
|
||||
cssClass: menuItemOptions.default.cssClass,
|
||||
name: `${menuItemOptions.default.name} ${defaultPath}`,
|
||||
onItemClicked: menuItemOptions.default.onItemClicked
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
notebookTypes.push({
|
||||
cssClass: menuItemOptions.snapshot.cssClass,
|
||||
name: menuItemOptions.snapshot.name,
|
||||
onItemClicked: menuItemOptions.snapshot.onItemClicked
|
||||
});
|
||||
|
||||
return notebookTypes;
|
||||
}
|
@ -71,11 +71,7 @@ export async function getDefaultNotebookLink(openmct, domainObject = null) {
|
||||
}
|
||||
|
||||
const path = await openmct.objects.getOriginalPath(domainObject.identifier)
|
||||
.then(objectPath => objectPath
|
||||
.map(o => o && openmct.objects.makeKeyString(o.identifier))
|
||||
.reverse()
|
||||
.join('/')
|
||||
);
|
||||
.then(openmct.objects.getRelativePath);
|
||||
const { defaultPageId, defaultSectionId } = getDefaultNotebook();
|
||||
|
||||
return `#/browse/${path}?sectionId=${defaultSectionId}&pageId=${defaultPageId}`;
|
||||
|
Reference in New Issue
Block a user