Compass rose fix (#6318)
* won't mount if cameraAngleOfView undefined * fix non-gimbling camera azimuth correct pan to azimuth * reorganize shared props passing * enable hud for non-gimbling cameras * fix unit tests * rotate function needs to work with numbers * avoid -0 * fix: don't delete imagery size, update related telemetry on focusedImage change * refactor: remove unused prop * fix: ensure thumbnail key is unique * fix: watch `focusedImage`, not `focusedImageIndex` - Corrects a false assumption that if the `focusedImageIndex` changes, the `focusedImage` has changed. This was causing us to mistakenly reset a lot of display props that control whether or not the Compass shows. - For example, if an image falls out of bounds, the `focusedImageIndex` will change as the old image is removed from the array. --------- Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov> Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com> Co-authored-by: Andrew Henry <akhenry@gmail.com>
This commit is contained in:
@@ -94,7 +94,6 @@
|
||||
<Compass
|
||||
v-if="shouldDisplayCompass"
|
||||
:image="focusedImage"
|
||||
:natural-aspect-ratio="focusedImageNaturalAspectRatio"
|
||||
:sized-image-dimensions="sizedImageDimensions"
|
||||
/>
|
||||
</div>
|
||||
@@ -171,7 +170,7 @@
|
||||
>
|
||||
<ImageThumbnail
|
||||
v-for="(image, index) in imageHistory"
|
||||
:key="`${image.thumbnailUrl || image.url}${image.time}`"
|
||||
:key="`${image.thumbnailUrl || image.url}-${image.time}-${index}`"
|
||||
:image="image"
|
||||
:active="focusedImageIndex === index"
|
||||
:selected="focusedImageIndex === index && isPaused"
|
||||
@@ -430,9 +429,12 @@ export default {
|
||||
&& imageHeightAndWidth
|
||||
&& this.zoomFactor === 1
|
||||
&& this.imagePanned !== true;
|
||||
const hasCameraConfigurations = this.focusedImage?.transformations !== undefined;
|
||||
const hasHeading = this.focusedImage?.heading !== undefined;
|
||||
const hasCameraAngleOfView = this.focusedImage?.transformations?.cameraAngleOfView > 0;
|
||||
|
||||
return display && hasCameraConfigurations;
|
||||
return display
|
||||
&& hasCameraAngleOfView
|
||||
&& hasHeading;
|
||||
},
|
||||
isSpacecraftPositionFresh() {
|
||||
let isFresh = undefined;
|
||||
@@ -582,11 +584,34 @@ export default {
|
||||
},
|
||||
deep: true
|
||||
},
|
||||
focusedImageIndex() {
|
||||
this.trackDuration();
|
||||
this.resetAgeCSS();
|
||||
this.updateRelatedTelemetryForFocusedImage();
|
||||
this.getImageNaturalDimensions();
|
||||
focusedImage: {
|
||||
handler(newImage, oldImage) {
|
||||
const newTime = newImage?.time;
|
||||
const oldTime = oldImage?.time;
|
||||
const newUrl = newImage?.url;
|
||||
const oldUrl = oldImage?.url;
|
||||
|
||||
// Skip if it's all falsy
|
||||
if (!newTime && !oldTime && !newUrl && !oldUrl) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip if it's the same image
|
||||
if (newTime === oldTime && newUrl === oldUrl) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Update image duration and reset age CSS
|
||||
this.trackDuration();
|
||||
this.resetAgeCSS();
|
||||
|
||||
// Reset image dimensions and calculate new dimensions
|
||||
// on new image load
|
||||
this.getImageNaturalDimensions();
|
||||
|
||||
// Get the related telemetry for the new image
|
||||
this.updateRelatedTelemetryForFocusedImage();
|
||||
}
|
||||
},
|
||||
bounds() {
|
||||
this.scrollHandler();
|
||||
@@ -771,6 +796,10 @@ export default {
|
||||
this.layers = layersMetadata;
|
||||
if (this.domainObject.configuration) {
|
||||
const persistedLayers = this.domainObject.configuration.layers;
|
||||
if (!persistedLayers) {
|
||||
return;
|
||||
}
|
||||
|
||||
layersMetadata.forEach((layer) => {
|
||||
const persistedLayer = persistedLayers.find(object => object.name === layer.name);
|
||||
if (persistedLayer) {
|
||||
|
||||
Reference in New Issue
Block a user