diff --git a/webapp/src/components/modalComponents/calibrationWizard.vue b/webapp/src/components/modalComponents/calibrationWizard.vue index 4625c4fa..6a4763fc 100644 --- a/webapp/src/components/modalComponents/calibrationWizard.vue +++ b/webapp/src/components/modalComponents/calibrationWizard.vue @@ -34,7 +34,7 @@ export default { data: function() { return { isNeeded: undefined, - calibrateableThings: [], + availableCalibrationTasks: {}, tasks: [], taskIndex: 0, movingBackward: false @@ -56,46 +56,42 @@ export default { mounted() { this.$refs["calibrationModalEl"].addEventListener("hidden", this.onHide); // Check which Things are available on mount. - const thingsToCheck = [ - "camera", - "camera_stage_mapping" - ]; - this.calibrateableThings = thingsToCheck.filter(name => this.thingAvailable(name)); - this.tasks = [ - {component: singleStepTask, props: {stepComponent: welcomeStep}}, - {component: cameraCalibrationTask}, - {component: cameraStageMappingTask}, - {component: singleStepTask, props: {stepComponent: finalStep}}, - ] + const allCalibrationTasks = { + camera: cameraCalibrationTask, + camera_stage_mapping: cameraStageMappingTask + }; + this.availableCalibrationTasks = Object.fromEntries( + Object.entries(allCalibrationTasks) + .filter(([thing]) => this.thingAvailable(thing)) + ); + }, methods: { /** - * Check all calibratable Things to see if any require calibration. + * Check all calibratable Things to see which require calibration. * - * Iterates over `this.calibrateableThings` (set during mounted()) and reads the + * Iterates over `this.availableCalibrationTasks` (set during mounted()) and reads the * `calibration_required` property. * - * Returns `true` if any Thing reports that calibration is required. - * + * Returns a list of thing names that report calibration is required. */ - async check_if_needed() { - let wizardNeeded = false; - let thingNeedsCal = false; + async check_things_needing_calibration() { + const needsCalibration = []; + const calibrateableThings = Object.keys(this.availableCalibrationTasks); - for (const name of this.calibrateableThings) { + for (const name of calibrateableThings) { try { - thingNeedsCal = await this.readThingProperty(name, "calibration_required"); + const thingNeedsCal = await this.readThingProperty(name, "calibration_required"); + if (thingNeedsCal) { + needsCalibration.push(name); + } } catch (e) { console.error(`${name}: missing calibration_required property`, e); - thingNeedsCal = false; } - - // OR it into the function-level flag - wizardNeeded = wizardNeeded || thingNeedsCal; } - return wizardNeeded; + return needsCalibration; }, resetData: function() { @@ -103,13 +99,38 @@ export default { this.taskIndex = 0; }, + /** + * Create the calibration wizard task list dynamically. + */ + create_task_list: function(thingsToCal, includeWelcome=true) { + const tasks = []; + + // Optionally include the welcome screen + if (includeWelcome) { + tasks.push({ component: singleStepTask, props: { stepComponent: welcomeStep } }); + } + + // Add calibration task for each thing + for (const thing of thingsToCal) { + const taskComponent = this.availableCalibrationTasks[thing]; + tasks.push({ component: taskComponent }); + } + + // Always include the final step + tasks.push({ component: singleStepTask, props: { stepComponent: finalStep } }); + + this.tasks = tasks; + }, + show_if_needed: async function() { // Check if the calibration modal is needed, and only show it if it is. - let needed = await this.check_if_needed() + let thingsToCal = await this. check_things_needing_calibration() + const needed = thingsToCal.length > 0; // Check if this calibration wizard can actually do anything useful if (needed) { this.resetData(); + this.create_task_list(thingsToCal); this.show(); } else { // If not needed, we just return the onClose event immediately @@ -119,7 +140,10 @@ export default { // Forces modal to show on button press force_show: function() { + const allThings = Object.keys(this.availableCalibrationTasks); + this.resetData(); + this.create_task_list(allThings, false); this.show(); }, diff --git a/webapp/src/components/modalComponents/calibrationWizardComponents/calibrationWizardContents.vue b/webapp/src/components/modalComponents/calibrationWizardComponents/calibrationWizardContents.vue deleted file mode 100644 index 81c43230..00000000 --- a/webapp/src/components/modalComponents/calibrationWizardComponents/calibrationWizardContents.vue +++ /dev/null @@ -1,166 +0,0 @@ - -
- -
- -
-

Lens-shading

-
-

- Your lens-shading table has already been calibrated. Click Next - to move on. -

-
-
- - - - -

Once you're ready, click auto-calibrate.

- - -
-
- -
-

Adjust z height

-

- Insert a sample and adjust the z position of - the stage using the buttons below, until the - sample is in focus. -

-

- You may also adjust the z position with page up and page down. -

- - -
- - -
-
- -
-

Camera-stage mapping

-
-

- Your camera-stage mapping has already been calibrated. Click Next - to move on. -

-
-
-

- No stage connected. Please skip this step, or connect a valid - stage, then reboot your microscope. -

-
-
-

- Follow the important steps below before starting camera-stage - mapping calibration! -

- - - - -

Once you're ready, click auto-calibrate.

- - -
-
- -
-

- Calibration complete -

-

- Click Finish to return to your microscope, or Restart to re-run the - calibration routine -

-
- - - diff --git a/webapp/src/components/modalComponents/calibrationWizardComponents/csmSteps/csmExplanation.vue b/webapp/src/components/modalComponents/calibrationWizardComponents/csmSteps/csmExplanation.vue index b2e62cde..0ed4bfcc 100644 --- a/webapp/src/components/modalComponents/calibrationWizardComponents/csmSteps/csmExplanation.vue +++ b/webapp/src/components/modalComponents/calibrationWizardComponents/csmSteps/csmExplanation.vue @@ -16,7 +16,6 @@