From 031c4048a6a18ef12859491a25d9f68819294d04 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 01:44:38 +0200 Subject: [PATCH] Remove theme import layers from ElementsInViewDetector, fix #1485 --- Logic/Actors/NoElementsInViewDetector.ts | 31 +++++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/Logic/Actors/NoElementsInViewDetector.ts b/Logic/Actors/NoElementsInViewDetector.ts index 8721348f08..475a9b4d2e 100644 --- a/Logic/Actors/NoElementsInViewDetector.ts +++ b/Logic/Actors/NoElementsInViewDetector.ts @@ -16,6 +16,7 @@ export default class NoElementsInViewDetector { const minZoom = Math.min( ...themeViewState.layout.layers .filter((l) => Constants.priviliged_layers.indexOf(l.id) < 0) + .filter((l) => !l.id.startsWith("note_import")) .map((l) => l.minzoom) ) const mapProperties = themeViewState.mapProperties @@ -24,28 +25,33 @@ export default class NoElementsInViewDetector { this.hasFeatureInView = state.mapProperties.bounds.stabilized(100).map( (bbox) => { + if (!bbox) { + return undefined + } if (mapProperties.zoom.data < minZoom) { // Not a single layer will display anything as the zoom is to low return "zoom-to-low" } + let minzoomWithData = 9999 + for (const [layerName, source] of themeViewState.perLayerFiltered) { if (priviliged.has(layerName)) { continue } - if ( - mapProperties.zoom.data < themeViewState.layout.getLayer(layerName).minzoom - ) { - continue - } - if (!state.layerState.filteredLayers.get(layerName).isDisplayed.data) { - continue - } const feats = source.features.data if (!(feats?.length > 0)) { // Nope, no data loaded continue } + const layer = themeViewState.layout.getLayer(layerName) + if (mapProperties.zoom.data < layer.minzoom) { + minzoomWithData = Math.min(layer.minzoom) + continue + } + if (!state.layerState.filteredLayers.get(layerName).isDisplayed.data) { + continue + } for (const feat of feats) { if (BBox.get(feat).overlapsWith(bbox)) { @@ -56,13 +62,14 @@ export default class NoElementsInViewDetector { } // If we arrive here, data might have been filtered away - for (const [layerName, source] of themeViewState.perLayer) { + + for (const [layerName, source] of themeViewState.perLayerFiltered) { if (priviliged.has(layerName)) { continue } - if ( - mapProperties.zoom.data < themeViewState.layout.getLayer(layerName).minzoom - ) { + + const layer = themeViewState.layout.getLayer(layerName) + if (mapProperties.zoom.data < layer.minzoom) { continue } const feats = source.features.data