From 6148e492828ca3d3a3e2a6a2a3c39b8dd94dc833 Mon Sep 17 00:00:00 2001
From: Julian Stirling
Date: Tue, 30 Jun 2026 10:54:25 +0100
Subject: [PATCH 1/2] Prevent calibration navigation during actions
---
.../serverSpecifiedActionButton.vue | 11 +++++++++-
.../calibrationWizardTask.vue | 20 ++++++++++++++++++-
.../cameraMainCalibrationStep.vue | 12 +++++++++--
.../cameraCalibrationSettings.vue | 14 ++++++++++---
4 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/webapp/src/components/labThingsComponents/serverSpecifiedActionButton.vue b/webapp/src/components/labThingsComponents/serverSpecifiedActionButton.vue
index 24648c51..1d0ddf1d 100644
--- a/webapp/src/components/labThingsComponents/serverSpecifiedActionButton.vue
+++ b/webapp/src/components/labThingsComponents/serverSpecifiedActionButton.vue
@@ -12,6 +12,7 @@
:modal-progress="actionData.modal_progress"
:stream-with-modal="actionData.stream_with_modal"
:is-broken="actionData.broken"
+ @task-started="actionStarted"
@response="actionResponse"
@error="modalError"
@finished="actionFinished"
@@ -36,7 +37,7 @@ export default {
},
},
- emits: ["response", "finished", "requestUpdate"],
+ emits: ["started", "response", "finished", "requestUpdate"],
methods: {
/**
@@ -58,6 +59,14 @@ export default {
this.$emit("response", response);
}
},
+ /**
+ * Runs when the ActionButton's action starts
+ *
+ * This forwards the event to the parent
+ */
+ actionStarted: function () {
+ this.$emit("started");
+ },
/**
* Runs when the ActionButton's action finishes in any way (error, cancel,
* completion).
diff --git a/webapp/src/components/modalComponents/calibrationWizardComponents/calibrationWizardTask.vue b/webapp/src/components/modalComponents/calibrationWizardComponents/calibrationWizardTask.vue
index c00f514b..1d72325d 100644
--- a/webapp/src/components/modalComponents/calibrationWizardComponents/calibrationWizardTask.vue
+++ b/webapp/src/components/modalComponents/calibrationWizardComponents/calibrationWizardTask.vue
@@ -28,17 +28,24 @@ gets very confusing.
v-if="currentStep"
:key="stepIndex"
@awaiting-user="handleAwaitingUser"
+ @prevent-navigation="handlePreventNavigation"
/>
-
@@ -72,6 +79,7 @@ export default {
return {
stepIndex: this.startOnLast ? this.steps.length - 1 : 0,
stepAwaitingUser: false,
+ preventNavigation: false,
};
},
@@ -96,6 +104,7 @@ export default {
* Move to the previous step in this task, or the previous task if first step.
*/
previousStep: function () {
+ if (this.preventNavigation) return;
this.stepAwaitingUser = false;
if (this.stepIndex > 0) {
this.stepIndex = this.stepIndex - 1;
@@ -108,6 +117,7 @@ export default {
* Move to the next step in this task, or the next task if final step.
*/
nextStep: function () {
+ if (this.preventNavigation) return;
this.stepAwaitingUser = false;
if (this.stepIndex < this.steps.length - 1) {
this.stepIndex = this.stepIndex + 1;
@@ -119,6 +129,14 @@ export default {
handleAwaitingUser(isAwaiting) {
this.stepAwaitingUser = isAwaiting;
},
+ handlePreventNavigation(blocked) {
+ this.preventNavigation = blocked;
+ },
},
};
+
diff --git a/webapp/src/components/modalComponents/calibrationWizardComponents/cameraCalibrationSteps/cameraMainCalibrationStep.vue b/webapp/src/components/modalComponents/calibrationWizardComponents/cameraCalibrationSteps/cameraMainCalibrationStep.vue
index 5eb4742a..0f57cdb2 100644
--- a/webapp/src/components/modalComponents/calibrationWizardComponents/cameraCalibrationSteps/cameraMainCalibrationStep.vue
+++ b/webapp/src/components/modalComponents/calibrationWizardComponents/cameraCalibrationSteps/cameraMainCalibrationStep.vue
@@ -12,7 +12,8 @@
@@ -33,7 +34,7 @@ export default {
cameraCalibrationSettings,
},
- emits: ["awaiting-user"],
+ emits: ["prevent-navigation", "awaiting-user"],
computed: {
...mapState(useSettingsStore, ["baseUri"]),
@@ -47,6 +48,13 @@ export default {
},
methods: {
+ onActionStart() {
+ this.$emit("prevent-navigation", true);
+ },
+ async onActionComplete() {
+ await this.checkCalibrationState();
+ this.$emit("prevent-navigation", false);
+ },
async checkCalibrationState() {
const needsCal = await this.readThingProperty("camera", "calibration_required");
this.$emit("awaiting-user", needsCal);
diff --git a/webapp/src/components/tabContentComponents/settingsComponents/cameraSettingsComponents/cameraCalibrationSettings.vue b/webapp/src/components/tabContentComponents/settingsComponents/cameraSettingsComponents/cameraCalibrationSettings.vue
index d1ab24cf..4b81d656 100644
--- a/webapp/src/components/tabContentComponents/settingsComponents/cameraSettingsComponents/cameraCalibrationSettings.vue
+++ b/webapp/src/components/tabContentComponents/settingsComponents/cameraSettingsComponents/cameraCalibrationSettings.vue
@@ -6,7 +6,11 @@
:key="'primary_cal' + index"
class="uk-child-width-expand"
>
-
+
@@ -43,7 +51,7 @@ export default {
},
},
- emits: ["actionFinished"],
+ emits: ["actionStarted", "actionFinished"],
data() {
return {
From 2ffd2378b9f252dfd9a40a0659d63ece44ca1895 Mon Sep 17 00:00:00 2001
From: Julian Stirling
Date: Tue, 30 Jun 2026 11:25:56 +0100
Subject: [PATCH 2/2] Add log to CSM pane of cal wizard rather than use second
pop-up
---
.../csmSteps/runCsmStep.vue | 30 +++++++++++++++----
.../CSMCalibrationSettings.vue | 12 +-------
2 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/webapp/src/components/modalComponents/calibrationWizardComponents/csmSteps/runCsmStep.vue b/webapp/src/components/modalComponents/calibrationWizardComponents/csmSteps/runCsmStep.vue
index 0d73ca72..50f5a93a 100644
--- a/webapp/src/components/modalComponents/calibrationWizardComponents/csmSteps/runCsmStep.vue
+++ b/webapp/src/components/modalComponents/calibrationWizardComponents/csmSteps/runCsmStep.vue
@@ -5,10 +5,19 @@
If it is not in focus, click back and re-focus.
+
-
@@ -16,18 +25,27 @@