From 738530a960b6b25fe3c8fb743356509b9d8efdc4 Mon Sep 17 00:00:00 2001 From: vcoppe Date: Mon, 10 Nov 2025 15:26:12 +0100 Subject: [PATCH] remove active layers when removed from selection --- .../layer-control/LayerControlSettings.svelte | 53 ++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/website/src/lib/components/map/layer-control/LayerControlSettings.svelte b/website/src/lib/components/map/layer-control/LayerControlSettings.svelte index f0d9d9e9a..982ec6bb8 100644 --- a/website/src/lib/components/map/layer-control/LayerControlSettings.svelte +++ b/website/src/lib/components/map/layer-control/LayerControlSettings.svelte @@ -19,6 +19,7 @@ import { map } from '$lib/components/map/map'; import CustomLayers from './CustomLayers.svelte'; import { settings } from '$lib/logic/settings'; + import { untrack } from 'svelte'; const { selectedBasemapTree, @@ -26,6 +27,7 @@ selectedOverpassTree, currentBasemap, currentOverlays, + currentOverpassQueries, customLayers, opacities, } = settings; @@ -60,19 +62,44 @@ }); $effect(() => { - if ($selectedOverlayTree && $currentOverlays) { - let overlayLayers = getLayers($currentOverlays); - let toRemove = Object.entries(overlayLayers).filter( - ([id, checked]) => checked && !isSelected($selectedOverlayTree, id) - ); - if (toRemove.length > 0) { - currentOverlays.update((tree) => { - toRemove.forEach(([id]) => { - toggle(tree, id); - }); - return tree; - }); - } + if ($selectedOverlayTree) { + untrack(() => { + if ($currentOverlays) { + let overlayLayers = getLayers($currentOverlays); + let toRemove = Object.entries(overlayLayers).filter( + ([id, checked]) => checked && !isSelected($selectedOverlayTree, id) + ); + if (toRemove.length > 0) { + currentOverlays.update((tree) => { + toRemove.forEach(([id]) => { + toggle(tree, id); + }); + return tree; + }); + } + } + }); + } + }); + + $effect(() => { + if ($selectedOverpassTree) { + untrack(() => { + if ($currentOverpassQueries) { + let overlayLayers = getLayers($currentOverpassQueries); + let toRemove = Object.entries(overlayLayers).filter( + ([id, checked]) => checked && !isSelected($selectedOverpassTree, id) + ); + if (toRemove.length > 0) { + currentOverpassQueries.update((tree) => { + toRemove.forEach(([id]) => { + toggle(tree, id); + }); + return tree; + }); + } + } + }); } });