From 5ba120c05dca4715a7be1bed2dd0a797dc88ed43 Mon Sep 17 00:00:00 2001 From: Kyle Douglass Date: Mon, 3 Feb 2025 08:59:49 +0100 Subject: [PATCH 1/2] DRY the loading of saved datasets and examples into one function --- www/js/src/components/Navbar.js | 87 +++++++++++++++++---------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/www/js/src/components/Navbar.js b/www/js/src/components/Navbar.js index 6596e6fd..63b26f36 100644 --- a/www/js/src/components/Navbar.js +++ b/www/js/src/components/Navbar.js @@ -63,6 +63,24 @@ const Navbar = ( { setIsMobileMenuOpen(!isMobileMenuOpen); }; + const loadDataset = async (newSurfaces, newFields, newAperture, newWavelengths, newAppModes) => { + // Clear materials first + materialsService.clearSelectedMaterials(); + // Use surfaces to add materials + for (const surface of newSurfaces) { + if (surface.material) { + await materialsService.addMaterialToSelectedMaterials(surface.material); + } + } + + setAppModes(newAppModes); + + setSurfaces(newSurfaces); + setFields(newFields); + setAperture(newAperture); + setWavelengths(newWavelengths); + }; + const showAlert = (message) => { // Create alert container if it doesn't exist let alertContainer = document.getElementById('alert-container'); @@ -194,21 +212,11 @@ const Navbar = ( { if (jsonData.specs && jsonData.appModes) { const { surfaces: newSurfaces, fields: newFields, aperture: newAperture, wavelengths: newWavelengths } = jsonData.specs; - // Clear materials first - materialsService.clearSelectedMaterials(); - // Use newSurfaces to add materials - for (const surface of newSurfaces) { - if (surface.material) { - await materialsService.addMaterialToSelectedMaterials(surface.material); - } + if (newSurfaces && newFields && newAperture && newWavelengths) { + await loadDataset(newSurfaces, newFields, newAperture, newWavelengths, jsonData.appModes); + } else { + throw new Error("Invalid file format: missing specific specs data"); } - - setAppModes(jsonData.appModes); - - if (newSurfaces) setSurfaces(newSurfaces); - if (newFields) setFields(newFields); - if (newAperture) setAperture(newAperture); - if (newWavelengths) setWavelengths(newWavelengths); } else { throw new Error("Invalid file format: missing specs data and/or appModes"); } @@ -231,39 +239,34 @@ const Navbar = ( { }; // Examples handlers - const handleConvexplanoLens = () => { - materialsService.clearSelectedMaterials(); - - setSurfaces(cpLensData.surfaces); - setFields(cpLensData.fields); - setAperture(cpLensData.aperture); - setWavelengths(cpLensData.wavelengths); - setAppModes(cpLensData.appModes); + const handleConvexplanoLens = async () => { + await loadDataset( + cpLensData.surfaces, + cpLensData.fields, + cpLensData.aperture, + cpLensData.wavelengths, + cpLensData.appModes + ); }; const handleConvexplanoLensWithMaterials = async () => { - materialsService.clearSelectedMaterials(); - for (const surface of cpmLensData.surfaces) { - if (surface.material) { - await materialsService.addMaterialToSelectedMaterials(surface.material); - } - } - - setSurfaces(cpmLensData.surfaces); - setFields(cpmLensData.fields); - setAperture(cpmLensData.aperture); - setWavelengths(cpmLensData.wavelengths); - setAppModes(cpmLensData.appModes); + await loadDataset( + cpmLensData.surfaces, + cpmLensData.fields, + cpmLensData.aperture, + cpmLensData.wavelengths, + cpmLensData.appModes + ); }; - const handlePetzvalLens = () => { - materialsService.clearSelectedMaterials(); - - setSurfaces(petzvalLensData.surfaces); - setFields(petzvalLensData.fields); - setAperture(petzvalLensData.aperture); - setWavelengths(petzvalLensData.wavelengths); - setAppModes(petzvalLensData.appModes); + const handlePetzvalLens = async () => { + await loadDataset( + petzvalLensData.surfaces, + petzvalLensData.fields, + petzvalLensData.aperture, + petzvalLensData.wavelengths, + petzvalLensData.appModes + ); }; return ( From 9f5df1ef2a1adb9064f97ff930a34deaa2894f45 Mon Sep 17 00:00:00 2001 From: Kyle Douglass Date: Mon, 3 Feb 2025 09:04:11 +0100 Subject: [PATCH 2/2] Fix appMode.refractiveIndex switching bug --- www/js/src/components/Navbar.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/www/js/src/components/Navbar.js b/www/js/src/components/Navbar.js index 63b26f36..f02e8a8b 100644 --- a/www/js/src/components/Navbar.js +++ b/www/js/src/components/Navbar.js @@ -66,11 +66,18 @@ const Navbar = ( { const loadDataset = async (newSurfaces, newFields, newAperture, newWavelengths, newAppModes) => { // Clear materials first materialsService.clearSelectedMaterials(); - // Use surfaces to add materials + for (const surface of newSurfaces) { + // Add any material key to the materials service's selected materials if (surface.material) { await materialsService.addMaterialToSelectedMaterials(surface.material); } + + // Set a default refractive index so that users are not locked out of the RI cell when + // switching to refractive index mode + if (!surface.n) { + surface.n = 1.5; + } } setAppModes(newAppModes);