Merge branch 'close-calibration' into 'v3'

Close calibration with confirmation

Closes #677 and openflexure-connect#40

See merge request openflexure/openflexure-microscope-server!542
This commit is contained in:
Julian Stirling 2026-03-17 23:33:24 +00:00
commit 0b3ce54a7e
3 changed files with 47 additions and 2 deletions

View file

@ -1,6 +1,13 @@
<template> <template>
<div id="modal-example" ref="calibrationModalEl" uk-modal="bg-close: false;"> <div id="modal-example" ref="calibrationModalEl" uk-modal="bg-close: false; esc-close:false;">
<div class="uk-modal-dialog uk-modal-body"> <div class="uk-modal-dialog uk-modal-body">
<!-- Get the style from uk-close, but use stop.prevent to avoid it actually closing -->
<button
type="button"
class="uk-modal-close-default"
uk-close
@click.stop.prevent="confirmClose"
></button>
<h2 class="uk-modal-title">Microscope Calibration</h2> <h2 class="uk-modal-title">Microscope Calibration</h2>
<component <component
@ -40,6 +47,8 @@ export default {
tasks: [], tasks: [],
taskIndex: 0, taskIndex: 0,
movingBackward: false, movingBackward: false,
modalOpen: false,
confirmingClose: false,
}; };
}, },
@ -152,12 +161,18 @@ export default {
}, },
show: function () { show: function () {
this.modalOpen = true;
window.addEventListener("keydown", this.handleKeydown);
// Show the modal element // Show the modal element
var el = this.$refs["calibrationModalEl"]; var el = this.$refs["calibrationModalEl"];
this.showModalElement(el); // Calls the mixin this.showModalElement(el); // Calls the mixin
}, },
hide: function () { hide: function () {
this.modalOpen = false;
window.removeEventListener("keydown", this.handleKeydown);
// Show the modal // Show the modal
var el = this.$refs["calibrationModalEl"]; var el = this.$refs["calibrationModalEl"];
this.hideModalElement(el); // Calls the mixin this.hideModalElement(el); // Calls the mixin
@ -167,6 +182,34 @@ export default {
this.$emit("onClose"); this.$emit("onClose");
}, },
handleKeydown(event) {
if (event.key === "Escape" && !event.repeat && this.modalOpen && !this.confirmingClose) {
event.preventDefault();
this.confirmClose();
}
},
confirmClose() {
if (this.confirmingClose) return;
this.confirmingClose = true;
let confirmationMessage =
"Close calibration wizard?<br><br>This can be re-opened from the Settings tab at any time.";
// Use standard modal confirmation
this.modalConfirm(confirmationMessage)
.then(
() => {
// User clicked YES hide modal
this.hide();
},
() => {
// User clicked NO do nothing, modal stays open
},
)
.finally(() => {
this.confirmingClose = false; // reset flag when confirmation modal is gone
});
},
/* /*
* Move to the previous task. * Move to the previous task.
*/ */

View file

@ -45,5 +45,7 @@ export default {
<style scoped> <style scoped>
.action-button-container { .action-button-container {
padding: 4px; padding: 4px;
display: flex;
justify-content: center;
} }
</style> </style>

View file

@ -51,7 +51,7 @@
</ul> </ul>
</details> </details>
</div> </div>
<p v-else><strong>No Calibration Available</strong></p> <p v-else><strong>No Calibration Data Available</strong></p>
</div> </div>
</template> </template>