Compare commits

...

9 Commits

Author SHA1 Message Date
David Tsay
a14cd62878 Merge branch 'release/1.8.3' into vista-r4.9-release 2022-01-10 13:49:05 -08:00
Shefali Joshi
8314d03af5 Fix Link Action to accept the right input for validation (#4696) 2022-01-07 14:46:31 -08:00
Nikhil
187da3c462 Snapshot notice link not navigating as expected #4194 (#4686) 2022-01-07 11:51:11 -08:00
Shefali Joshi
e4f134ca59 Mct 4555 rebased v3 (#4689)
* Preserve the previousFocusedImage for subscription updates, bound change for local and fixed time

* Only preserve previous focused image if paused

* Forcibly reset imageContainer size to prevent aspect ratio distortion

* Remove unneccesary mixin invocation

* Use image history instead of imagehistory size for watcher. Revert other changes

* Added check if last image index is selected

* isPaused instead of paused

Co-authored-by: Michael Rogers <contact@mhrogers.com>
2022-01-07 11:09:09 -06:00
Shefali Joshi
76829ad252 Check for ref when trying to get the style receiver. (#4687)
Also ensure that the property being displayed in Properties is actually a part of the domainObject.
2022-01-07 10:57:10 -06:00
Nikhil
a8da0d5917 Notebook Snapshotting to the default Notebook isn't working (#4475)
* Notebook Snapshotting to the default Notebook isn't working #4469
2022-01-06 16:44:21 -08:00
David Tsay
488beb5b3f new colors show better on espresso and snow themes 2022-01-06 11:25:33 -08:00
David Tsay
2f63718385 use relative path (#4683) 2022-01-06 11:14:21 -08:00
Shefali Joshi
433f1bf28e Fix object creation (#4675)
* Save the object before adding it to the parent so that transaction committing works properly
* Fix object creation - composition policy changes
2022-01-05 11:05:02 -08:00
15 changed files with 106 additions and 91 deletions

View File

@@ -39,8 +39,10 @@ export default class ConditionSetViewProvider {
return isConditionSet && this.openmct.router.isNavigatedObject(objectPath); return isConditionSet && this.openmct.router.isNavigatedObject(objectPath);
} }
canEdit(domainObject) { canEdit(domainObject, objectPath) {
return domainObject.type === 'conditionSet'; const isConditionSet = domainObject.type === 'conditionSet';
return isConditionSet && this.openmct.router.isNavigatedObject(objectPath);
} }
view(domainObject, objectPath) { view(domainObject, objectPath) {

View File

@@ -99,6 +99,7 @@ export default class CreateAction extends PropertiesAction {
*/ */
async _navigateAndEdit(domainObject, parentDomainObjectpath) { async _navigateAndEdit(domainObject, parentDomainObjectpath) {
let objectPath; let objectPath;
let self = this;
if (parentDomainObjectpath) { if (parentDomainObjectpath) {
objectPath = parentDomainObjectpath && [domainObject].concat(parentDomainObjectpath); objectPath = parentDomainObjectpath && [domainObject].concat(parentDomainObjectpath);
} else { } else {
@@ -110,13 +111,18 @@ export default class CreateAction extends PropertiesAction {
.reverse() .reverse()
.join('/'); .join('/');
this.openmct.router.navigate(url); function editObject() {
const objectView = self.openmct.objectViews.get(domainObject, objectPath)[0];
const canEdit = objectView && objectView.canEdit && objectView.canEdit(domainObject, objectPath);
const objectView = this.openmct.objectViews.get(domainObject, objectPath)[0]; if (canEdit) {
const canEdit = objectView && objectView.canEdit && objectView.canEdit(domainObject, objectPath); self.openmct.editor.edit();
if (canEdit) { }
this.openmct.editor.edit();
} }
this.openmct.router.once('afterNavigation', editObject);
this.openmct.router.navigate(url);
} }
/** /**

View File

@@ -65,13 +65,8 @@ export default {
keyString: undefined keyString: undefined
}; };
}, },
computed: {
imageHistorySize() {
return this.imageHistory.length;
}
},
watch: { watch: {
imageHistorySize(newSize, oldSize) { imageHistory(newHistory, oldHistory) {
this.updatePlotImagery(); this.updatePlotImagery();
} }
}, },

View File

@@ -240,9 +240,6 @@ export default {
}; };
}, },
computed: { computed: {
imageHistorySize() {
return this.imageHistory.length;
},
compassRoseSizingClasses() { compassRoseSizingClasses() {
let compassRoseSizingClasses = ''; let compassRoseSizingClasses = '';
if (this.sizedImageDimensions.width < 300) { if (this.sizedImageDimensions.width < 300) {
@@ -409,19 +406,23 @@ export default {
} }
}, },
watch: { watch: {
imageHistorySize(newSize, oldSize) { imageHistory: {
let imageIndex; handler(newHistory, oldHistory) {
if (this.focusedImageTimestamp !== undefined) { const newSize = newHistory.length;
const foundImageIndex = this.imageHistory.findIndex(image => { let imageIndex;
return image.time === this.focusedImageTimestamp; if (this.focusedImageTimestamp !== undefined) {
}); const foundImageIndex = this.imageHistory.findIndex(image => {
imageIndex = foundImageIndex > -1 ? foundImageIndex : newSize - 1; return image.time === this.focusedImageTimestamp;
} else { });
imageIndex = newSize > 0 ? newSize - 1 : undefined; imageIndex = foundImageIndex > -1 ? foundImageIndex : newSize - 1;
} } else {
imageIndex = newSize > 0 ? newSize - 1 : undefined;
}
this.setFocusedImage(imageIndex, false); this.setFocusedImage(imageIndex, false);
this.scrollToRight(); this.scrollToRight();
},
deep: true
}, },
focusedImageIndex() { focusedImageIndex() {
this.trackDuration(); this.trackDuration();
@@ -510,12 +511,6 @@ export default {
this.timeContext.off("clock", this.trackDuration); this.timeContext.off("clock", this.trackDuration);
} }
}, },
boundsChange(bounds, isTick) {
if (!isTick) {
this.previousFocusedImage = this.focusedImage ? JSON.parse(JSON.stringify(this.focusedImage)) : undefined;
this.requestHistory();
}
},
expand() { expand() {
const actionCollection = this.openmct.actions.getActionsCollection(this.objectPath, this.currentView); const actionCollection = this.openmct.actions.getActionsCollection(this.objectPath, this.currentView);
const visibleActions = actionCollection.getVisibleActions(); const visibleActions = actionCollection.getVisibleActions();
@@ -690,22 +685,32 @@ export default {
return; return;
} }
if (this.previousFocusedImage) {
// determine if the previous image exists in the new bounds of imageHistory
const matchIndex = this.matchIndexOfPreviousImage(
this.previousFocusedImage,
this.imageHistory
);
focusedIndex = matchIndex > -1 ? matchIndex : this.imageHistory.length - 1;
delete this.previousFocusedImage;
}
if (thumbnailClick) { if (thumbnailClick) {
//We use the props till the user changes what they want to see //We use the props till the user changes what they want to see
this.focusedImageTimestamp = undefined; this.focusedImageTimestamp = undefined;
//set the previousFocusedImage when a user chooses an image
this.previousFocusedImage = this.imageHistory[focusedIndex] ? JSON.parse(JSON.stringify(this.imageHistory[focusedIndex])) : undefined;
} }
if (this.previousFocusedImage) {
// determine if the previous image exists in the new bounds of imageHistory
if (!thumbnailClick) {
const matchIndex = this.matchIndexOfPreviousImage(
this.previousFocusedImage,
this.imageHistory
);
focusedIndex = matchIndex > -1 ? matchIndex : this.imageHistory.length - 1;
}
if (!(this.isPaused || thumbnailClick)
|| focusedIndex === this.imageHistory.length - 1) {
delete this.previousFocusedImage;
}
}
this.focusedImageIndex = focusedIndex;
//TODO: do we even need this anymore?
if (this.isPaused && !thumbnailClick && this.focusedImageTimestamp === undefined) { if (this.isPaused && !thumbnailClick && this.focusedImageTimestamp === undefined) {
this.nextImageIndex = focusedIndex; this.nextImageIndex = focusedIndex;
//this could happen if bounds changes //this could happen if bounds changes
@@ -716,8 +721,6 @@ export default {
return; return;
} }
this.focusedImageIndex = focusedIndex;
if (thumbnailClick && !this.isPaused) { if (thumbnailClick && !this.isPaused) {
this.paused(true); this.paused(true);
} }

View File

@@ -120,9 +120,15 @@ export default {
return this.timeFormatter.parse(datum); return this.timeFormatter.parse(datum);
}, },
boundsChange(bounds, isTick) { boundsChange(bounds, isTick) {
if (!isTick) { if (isTick) {
this.requestHistory(); return;
} }
// forcibly reset the imageContainer size to prevent an aspect ratio distortion
delete this.imageContainerWidth;
delete this.imageContainerHeight;
return this.requestHistory();
}, },
async requestHistory() { async requestHistory() {
let bounds = this.timeContext.bounds(); let bounds = this.timeContext.bounds();

View File

@@ -91,11 +91,11 @@ export default class LinkAction {
} }
validate(currentParent) { validate(currentParent) {
return (object, data) => { return (data) => {
const parentCandidate = data.value; const parentCandidate = data.value[0];
const currentParentKeystring = this.openmct.objects.makeKeyString(currentParent.identifier); const currentParentKeystring = this.openmct.objects.makeKeyString(currentParent.identifier);
const parentCandidateKeystring = this.openmct.objects.makeKeyString(parentCandidate.identifier); const parentCandidateKeystring = this.openmct.objects.makeKeyString(parentCandidate.identifier);
const objectKeystring = this.openmct.objects.makeKeyString(object.identifier); const objectKeystring = this.openmct.objects.makeKeyString(this.object.identifier);
if (!parentCandidateKeystring || !currentParentKeystring) { if (!parentCandidateKeystring || !currentParentKeystring) {
return false; return false;
@@ -114,7 +114,7 @@ export default class LinkAction {
return false; return false;
} }
return parentCandidate && this.openmct.composition.checkPolicy(parentCandidate, object); return parentCandidate && this.openmct.composition.checkPolicy(parentCandidate, this.object);
}; };
} }
} }

View File

@@ -142,7 +142,6 @@ import { clearDefaultNotebook, getDefaultNotebook, setDefaultNotebook, setDefaul
import { addNotebookEntry, createNewEmbed, getEntryPosById, getNotebookEntries, mutateObject } from '../utils/notebook-entries'; import { addNotebookEntry, createNewEmbed, getEntryPosById, getNotebookEntries, mutateObject } from '../utils/notebook-entries';
import { saveNotebookImageDomainObject, updateNamespaceOfDomainObject } from '../utils/notebook-image'; import { saveNotebookImageDomainObject, updateNamespaceOfDomainObject } from '../utils/notebook-image';
import { NOTEBOOK_VIEW_TYPE } from '../notebook-constants'; import { NOTEBOOK_VIEW_TYPE } from '../notebook-constants';
import objectUtils from 'objectUtils';
import { debounce } from 'lodash'; import { debounce } from 'lodash';
import objectLink from '../../../ui/mixins/object-link'; import objectLink from '../../../ui/mixins/object-link';
@@ -455,11 +454,6 @@ export default {
? getDefaultNotebook().defaultSectionId ? getDefaultNotebook().defaultSectionId
: undefined; : undefined;
}, },
getDefaultNotebookObject() {
const defaultNotebook = getDefaultNotebook();
return defaultNotebook && this.openmct.objects.get(defaultNotebook.identifier);
},
getLinktoNotebook() { getLinktoNotebook() {
const objectPath = this.openmct.router.path; const objectPath = this.openmct.router.path;
const link = objectLink.computed.objectLink.call({ const link = objectLink.computed.objectLink.call({
@@ -619,12 +613,12 @@ export default {
this.sectionsChanged({ sections }); this.sectionsChanged({ sections });
}, },
removeDefaultClass(domainObject) { removeDefaultClass(defaultNotebookIdentifier) {
if (!domainObject) { if (!defaultNotebookIdentifier) {
return; return;
} }
this.openmct.status.delete(domainObject.identifier); this.openmct.status.delete(defaultNotebookIdentifier);
}, },
resetSearch() { resetSearch() {
this.search = ''; this.search = '';
@@ -633,15 +627,16 @@ export default {
toggleNav() { toggleNav() {
this.showNav = !this.showNav; this.showNav = !this.showNav;
}, },
async updateDefaultNotebook(notebookStorage) { updateDefaultNotebook(notebookStorage) {
const defaultNotebookObject = await this.getDefaultNotebookObject(); const defaultNotebook = getDefaultNotebook();
const isSameNotebook = defaultNotebookObject const defaultNotebookIdentifier = defaultNotebook && defaultNotebook.identifier;
&& objectUtils.makeKeyString(defaultNotebookObject.identifier) === objectUtils.makeKeyString(notebookStorage.identifier); const isSameNotebook = defaultNotebookIdentifier
&& this.openmct.objects.areIdsEqual(defaultNotebookIdentifier, notebookStorage.identifier);
if (!isSameNotebook) { if (!isSameNotebook) {
this.removeDefaultClass(defaultNotebookObject); this.removeDefaultClass(defaultNotebookIdentifier);
} }
if (!defaultNotebookObject || !isSameNotebook) { if (!defaultNotebookIdentifier || !isSameNotebook) {
setDefaultNotebook(this.openmct, notebookStorage, this.domainObject); setDefaultNotebook(this.openmct, notebookStorage, this.domainObject);
} }

View File

@@ -110,7 +110,8 @@ export default class Snapshot {
} }
return () => { return () => {
window.location.href = window.location.origin + url; const path = window.location.href.split('#');
window.location.href = path[0] + url;
}; };
} }
} }

View File

@@ -105,11 +105,6 @@ export function addNotebookEntry(openmct, domainObject, notebookStorage, embed =
const date = Date.now(); const date = Date.now();
const configuration = domainObject.configuration; const configuration = domainObject.configuration;
const entries = configuration.entries || {}; const entries = configuration.entries || {};
if (!entries) {
return;
}
const embeds = embed const embeds = embed
? [embed] ? [embed]
: []; : [];
@@ -125,7 +120,8 @@ export function addNotebookEntry(openmct, domainObject, notebookStorage, embed =
const newEntries = addEntryIntoPage(notebookStorage, entries, entry); const newEntries = addEntryIntoPage(notebookStorage, entries, entry);
addDefaultClass(domainObject, openmct); addDefaultClass(domainObject, openmct);
domainObject.configuration.entries = newEntries;
mutateObject(openmct, domainObject, 'configuration.entries', newEntries);
return id; return id;
} }

View File

@@ -29,10 +29,9 @@ define(
} }
SummaryWidgetsCompositionPolicy.prototype.allow = function (parent, child) { SummaryWidgetsCompositionPolicy.prototype.allow = function (parent, child) {
const parentType = parent.getCapability('type'); const parentType = parent.type;
const newStyleChild = child.useCapability('adapter');
if (parentType.instanceOf('summary-widget') && !this.openmct.telemetry.isTelemetryObject(newStyleChild)) { if (parentType === 'summary-widget' && !this.openmct.telemetry.isTelemetryObject(child)) {
return false; return false;
} }

View File

@@ -21,7 +21,7 @@
*****************************************************************************/ *****************************************************************************/
export const COLOR_PALETTE = [ export const COLOR_PALETTE = [
[0x00, 0x37, 0xFF], [0x43, 0xB0, 0xFF],
[0xF0, 0x60, 0x00], [0xF0, 0x60, 0x00],
[0x00, 0x70, 0x40], [0x00, 0x70, 0x40],
[0xFB, 0x49, 0x49], [0xFB, 0x49, 0x49],
@@ -30,25 +30,25 @@ export const COLOR_PALETTE = [
[0xFF, 0xA6, 0x3D], [0xFF, 0xA6, 0x3D],
[0x05, 0xA3, 0x00], [0x05, 0xA3, 0x00],
[0xF0, 0x00, 0x6C], [0xF0, 0x00, 0x6C],
[0x77, 0x17, 0x7A], [0xAC, 0x54, 0xAE],
[0x23, 0xA9, 0xDB], [0x23, 0xA9, 0xDB],
[0xFA, 0xF0, 0x6F], [0xC7, 0xBE, 0x52],
[0x4E, 0xF0, 0x48], [0x5A, 0xBD, 0x56],
[0xAD, 0x50, 0x72], [0xAD, 0x50, 0x72],
[0x94, 0x25, 0xEA], [0x94, 0x25, 0xEA],
[0x21, 0x87, 0x82], [0x21, 0x87, 0x82],
[0x8F, 0x6E, 0x47], [0x8F, 0x6E, 0x47],
[0xf0, 0x59, 0xcb], [0xf0, 0x59, 0xcb],
[0x34, 0xB6, 0x7D], [0x34, 0xB6, 0x7D],
[0x6A, 0x36, 0xFF], [0x7F, 0x52, 0xFF],
[0x56, 0xF0, 0xE8], [0x46, 0xC7, 0xC0],
[0xA1, 0x8C, 0x1C], [0xA1, 0x8C, 0x1C],
[0xCB, 0xE1, 0x44], [0x95, 0xB1, 0x26],
[0xFF, 0x84, 0x9E], [0xFF, 0x84, 0x9E],
[0xB7, 0x79, 0xE7], [0xB7, 0x79, 0xE7],
[0x8C, 0xC9, 0xFD], [0x8C, 0xC9, 0xFD],
[0xDB, 0xAA, 0x6E], [0xDB, 0xAA, 0x6E],
[0xB8, 0xDF, 0x97], [0x93, 0xB5, 0x77],
[0xFF, 0xBC, 0xDA], [0xFF, 0xBC, 0xDA],
[0xD3, 0xB6, 0xDE] [0xD3, 0xB6, 0xDE]
]; ];

View File

@@ -141,11 +141,15 @@ export default {
this.openmct.objectViews.off('clearData', this.clearData); this.openmct.objectViews.off('clearData', this.clearData);
}, },
getStyleReceiver() { getStyleReceiver() {
let styleReceiver = this.$refs.objectViewWrapper.querySelector('.js-style-receiver') let styleReceiver;
|| this.$refs.objectViewWrapper.querySelector(':first-child');
if (styleReceiver === null) { if (this.$refs.objectViewWrapper !== undefined) {
styleReceiver = undefined; styleReceiver = this.$refs.objectViewWrapper.querySelector('.js-style-receiver')
|| this.$refs.objectViewWrapper.querySelector(':first-child');
if (styleReceiver === null) {
styleReceiver = undefined;
}
} }
return styleReceiver; return styleReceiver;

View File

@@ -186,6 +186,10 @@ export default {
return { return {
name: field.name, name: field.name,
value: field.path.reduce((object, key) => { value: field.path.reduce((object, key) => {
if (object === undefined) {
return object;
}
return object[key]; return object[key];
}, this.domainObject) }, this.domainObject)
}; };

View File

@@ -445,6 +445,10 @@ export default {
} }
// sorting composition items // sorting composition items
if (!a.name || !b.name) {
return 0;
}
if (a.name.toLowerCase() if (a.name.toLowerCase()
> b.name.toLowerCase()) { > b.name.toLowerCase()) {
return 1; return 1;

View File

@@ -1,4 +1,4 @@
import objectPathToUrl from '/src/tools/url'; import objectPathToUrl from '../../tools/url';
export default { export default {
inject: ['openmct'], inject: ['openmct'],