From 981b412180bd89cdafe4064f366ffb48cb5e74ef Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 23 Apr 2025 10:43:07 +0200 Subject: [PATCH] Fix: don't crash if an unselected element is selected (by not selecting it) --- .../ThemeViewState/WithSelectedElementState.ts | 15 +++++++++++++-- src/UI/BigComponents/SelectedElementTitle.svelte | 4 +++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Models/ThemeViewState/WithSelectedElementState.ts b/src/Models/ThemeViewState/WithSelectedElementState.ts index a09a849d5..7d4253780 100644 --- a/src/Models/ThemeViewState/WithSelectedElementState.ts +++ b/src/Models/ThemeViewState/WithSelectedElementState.ts @@ -32,11 +32,13 @@ export class WithSelectedElementState extends UserMapFeatureswitchState { if (lastClick.mode !== "left") { return } - this.setSelectedElement(lastClick.nearestFeature) + const nearestFeature = lastClick.nearestFeature + this.setSelectedElement(nearestFeature) }) // Add the selected element to the recently visited history this.selectedElement.addCallbackD((selected) => { + console.trace("Selected element is", selected) const [osm_type, osm_id] = selected.properties.id.split("/") const [lon, lat] = GeoOperations.centerpointCoordinates(selected) const layer = this.theme.getMatchingLayer(selected.properties) @@ -65,12 +67,21 @@ export class WithSelectedElementState extends UserMapFeatureswitchState { } protected setSelectedElement(feature: Feature) { + if (!feature) { + this.selectedElement.setData(undefined) + return + } + const layer = this.theme.getMatchingLayer(feature?.properties) + if (layer?.title === undefined) { + console.log("Not selecting feature", feature, ": no title (or no matching layer) found, unselectable element") + return + } + const current = this.selectedElement.data if ( current?.properties?.id !== undefined && current.properties.id === feature?.properties?.id ) { - console.log("Not setting selected, same id", current, feature) return // already set } this.selectedElement.setData(feature) diff --git a/src/UI/BigComponents/SelectedElementTitle.svelte b/src/UI/BigComponents/SelectedElementTitle.svelte index 89359820a..83245e895 100644 --- a/src/UI/BigComponents/SelectedElementTitle.svelte +++ b/src/UI/BigComponents/SelectedElementTitle.svelte @@ -1,6 +1,6 @@