From f405116bb1b4f5cc5855542b5a8ef9883c7569b4 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 7 Feb 2025 01:37:36 +0100 Subject: [PATCH] Refactoring: introduce 'isPrivileged' --- scripts/generateLayerOverview.ts | 10 +++------- src/Logic/Actors/NoElementsInViewDetector.ts | 2 +- .../TiledFeatureSource/SummaryTileSource.ts | 2 +- src/Logic/Search/FilterSearch.ts | 2 +- src/Models/Constants.ts | 12 ++++++++++++ .../ThemeConfig/Conversion/PrevalidateLayer.ts | 4 ++-- src/Models/ThemeConfig/Conversion/Validation.ts | 2 +- src/Models/ThemeConfig/LayerConfig.ts | 7 +------ src/Models/ThemeViewState/WithSpecialLayers.ts | 4 ++-- src/UI/Search/SearchResults.svelte | 10 ++++------ src/UI/Studio/StudioServer.ts | 2 +- 11 files changed, 29 insertions(+), 28 deletions(-) diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 33322b1574..f5d259deee 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -9,16 +9,12 @@ import { DoesImageExist, PrevalidateTheme, ValidateLayer, - ValidateThemeEnsemble, + ValidateThemeEnsemble } from "../src/Models/ThemeConfig/Conversion/Validation" import { Translation } from "../src/UI/i18n/Translation" import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer" import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme" -import { - Conversion, - DesugaringContext, - DesugaringStep, -} from "../src/Models/ThemeConfig/Conversion/Conversion" +import { Conversion, DesugaringContext, DesugaringStep } from "../src/Models/ThemeConfig/Conversion/Conversion" import { Utils } from "../src/Utils" import Script from "./Script" import { AllSharedLayers } from "../src/Customizations/AllSharedLayers" @@ -625,7 +621,7 @@ class LayerOverviewUtils extends Script { if (whitelist.size > 0) { const idByPath = sharedLayerPath.split("/").at(-1).split(".")[0] if ( - Constants.priviliged_layers.indexOf(idByPath) < 0 && + !Constants.isPriviliged(idByPath) && !whitelist.has(idByPath) ) { continue diff --git a/src/Logic/Actors/NoElementsInViewDetector.ts b/src/Logic/Actors/NoElementsInViewDetector.ts index 663eb04a93..d073420857 100644 --- a/src/Logic/Actors/NoElementsInViewDetector.ts +++ b/src/Logic/Actors/NoElementsInViewDetector.ts @@ -15,7 +15,7 @@ export default class NoElementsInViewDetector { const state = themeViewState const minZoom = Math.min( ...themeViewState.theme.layers - .filter((l) => Constants.priviliged_layers.indexOf(l.id) < 0) + .filter((l) => !Constants.isPriviliged(l)) .map((l) => l.minzoom) ) const mapProperties = themeViewState.mapProperties diff --git a/src/Logic/FeatureSource/TiledFeatureSource/SummaryTileSource.ts b/src/Logic/FeatureSource/TiledFeatureSource/SummaryTileSource.ts index 4256f7abfb..026a355aa8 100644 --- a/src/Logic/FeatureSource/TiledFeatureSource/SummaryTileSource.ts +++ b/src/Logic/FeatureSource/TiledFeatureSource/SummaryTileSource.ts @@ -23,7 +23,7 @@ export class SummaryTileSourceRewriter implements FeatureSource { filteredLayers: ReadonlyMap ) { this.filteredLayers = Array.from(filteredLayers.values()).filter( - (l) => Constants.priviliged_layers.indexOf(l.layerDef.id) < 0 + (l) => !Constants.isPriviliged(l.layerDef) ) this._summarySource = summarySource filteredLayers.forEach((v) => { diff --git a/src/Logic/Search/FilterSearch.ts b/src/Logic/Search/FilterSearch.ts index d82a141601..b0b737f01f 100644 --- a/src/Logic/Search/FilterSearch.ts +++ b/src/Logic/Search/FilterSearch.ts @@ -99,7 +99,7 @@ export default class FilterSearch { if (!Array.isArray(filteredLayer.layerDef.filters)) { continue } - if (Constants.priviliged_layers.indexOf(id) >= 0) { + if (Constants.isPriviliged(id)) { continue } for (const filter of filteredLayer.layerDef.filters) { diff --git a/src/Models/Constants.ts b/src/Models/Constants.ts index 1831b894b6..8eb2984674 100644 --- a/src/Models/Constants.ts +++ b/src/Models/Constants.ts @@ -242,4 +242,16 @@ export default class Constants { (window.devicePixelRatio && window.devicePixelRatio >= 2) ) } + + private static priviligedLayerSet = new Set(Constants.priviliged_layers) + + public static isPriviliged(layer: string | { id: string }) { + let id: string + if (typeof layer === "string") { + id = layer + } else { + id = layer.id + } + return this.priviligedLayerSet.has(id) + } } diff --git a/src/Models/ThemeConfig/Conversion/PrevalidateLayer.ts b/src/Models/ThemeConfig/Conversion/PrevalidateLayer.ts index ca5245cf98..92ac3b77fb 100644 --- a/src/Models/ThemeConfig/Conversion/PrevalidateLayer.ts +++ b/src/Models/ThemeConfig/Conversion/PrevalidateLayer.ts @@ -136,7 +136,7 @@ export class PrevalidateLayer extends DesugaringStep { } if (json.source === "special") { - if (!Constants.priviliged_layers.find((x) => x == json.id)) { + if (!Constants.isPriviliged(json)) { context.err( "Layer " + json.id + @@ -150,7 +150,7 @@ export class PrevalidateLayer extends DesugaringStep { json.allowMove === undefined && json.source["geoJson"] === undefined ) { - if (!Constants.priviliged_layers.find((x) => x == json.id)) { + if (!Constants.isPriviliged(json)) { context.err("Layer " + json.id + " does not have an explicit 'allowMove'") } } diff --git a/src/Models/ThemeConfig/Conversion/Validation.ts b/src/Models/ThemeConfig/Conversion/Validation.ts index 7b48158fdc..cbccb9df3f 100644 --- a/src/Models/ThemeConfig/Conversion/Validation.ts +++ b/src/Models/ThemeConfig/Conversion/Validation.ts @@ -1128,7 +1128,7 @@ export class ValidateThemeEnsemble extends Conversion< if (typeof layer.source === "string") { continue } - if (Constants.priviliged_layers.indexOf(layer.id) >= 0) { + if (Constants.isPriviliged(layer)) { continue } if (!layer.source) { diff --git a/src/Models/ThemeConfig/LayerConfig.ts b/src/Models/ThemeConfig/LayerConfig.ts index 072611a31f..46efc9429f 100644 --- a/src/Models/ThemeConfig/LayerConfig.ts +++ b/src/Models/ThemeConfig/LayerConfig.ts @@ -13,7 +13,6 @@ import PointRenderingConfig from "./PointRenderingConfig" import WithContextLoader from "./WithContextLoader" import LineRenderingConfig from "./LineRenderingConfig" import { TagRenderingConfigJson } from "./Json/TagRenderingConfigJson" -import BaseUIElement from "../../UI/BaseUIElement" import Link from "../../UI/Base/Link" import { Utils } from "../../Utils" import { TagsFilter } from "../../Logic/Tags/TagsFilter" @@ -23,10 +22,6 @@ import Constants from "../Constants" import { QuestionableTagRenderingConfigJson } from "./Json/QuestionableTagRenderingConfigJson" import MarkdownUtils from "../../Utils/MarkdownUtils" import { And } from "../../Logic/Tags/And" -import Combine from "../../UI/Base/Combine" -import SvelteUIElement from "../../UI/Base/SvelteUIElement" -import DynamicMarker from "../../UI/Map/DynamicMarker.svelte" -import { ImmutableStore } from "../../Logic/UIEventSource" export default class LayerConfig extends WithContextLoader { public static readonly syncSelectionAllowed = ["no", "local", "theme-only", "global"] as const @@ -257,7 +252,7 @@ export default class LayerConfig extends WithContextLoader { } else if ( !hasCenterRendering && this.lineRendering.length === 0 && - Constants.priviliged_layers.indexOf(this.id) < 0 && + !Constants.isPriviliged(this) && this.source !== null /*library layer*/ && !this.source?.geojsonSource?.startsWith( "https://api.openstreetmap.org/api/0.6/notes.json" diff --git a/src/Models/ThemeViewState/WithSpecialLayers.ts b/src/Models/ThemeViewState/WithSpecialLayers.ts index 0b413d415f..97ddb070e6 100644 --- a/src/Models/ThemeViewState/WithSpecialLayers.ts +++ b/src/Models/ThemeViewState/WithSpecialLayers.ts @@ -18,7 +18,7 @@ import { Store, UIEventSource } from "../../Logic/UIEventSource" import NearbyFeatureSource from "../../Logic/FeatureSource/Sources/NearbyFeatureSource" import { SummaryTileSource, - SummaryTileSourceRewriter, + SummaryTileSourceRewriter } from "../../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource" import { ShowDataLayerOptions } from "../../UI/Map/ShowDataLayerOptions" @@ -95,7 +95,7 @@ export class WithSpecialLayers extends WithChangesState { const layers = this.theme.layers.filter( (l) => - ((Constants.priviliged_layers)).indexOf(l.id) < 0 && + !Constants.isPriviliged(l) && l.source.geojsonSource === undefined && l.doCount ) diff --git a/src/UI/Search/SearchResults.svelte b/src/UI/Search/SearchResults.svelte index 70d68f9e68..34ec64895b 100644 --- a/src/UI/Search/SearchResults.svelte +++ b/src/UI/Search/SearchResults.svelte @@ -3,29 +3,27 @@ import ActiveFilters from "./ActiveFilters.svelte" import Constants from "../../Models/Constants" import type { ActiveFilter } from "../../Logic/State/LayerState" - import ThemeViewState from "../../Models/ThemeViewState" import ThemeResults from "./ThemeResults.svelte" import GeocodeResults from "./GeocodeResults.svelte" import FilterResults from "./FilterResults.svelte" import Tr from "../Base/Tr.svelte" import Translations from "../i18n/Translations" import type { FilterSearchResult } from "../../Logic/Search/FilterSearch" + import { WithSearchState } from "../../Models/ThemeViewState/WithSearchState" - export let state: ThemeViewState + export let state: WithSearchState let activeFilters: Store<(ActiveFilter & FilterSearchResult)[]> = state.layerState.activeFilters.map((fs) => fs .filter( - (f) => - f.filter.options[0].fields.length === 0 && - Constants.priviliged_layers.indexOf(f.layer.id) < 0 + (f) => f.filter.options[0].fields.length === 0 && !Constants.isPriviliged(f.layer) ) .map((af) => { const index = af.control.data const r: FilterSearchResult & ActiveFilter = { ...af, index, - option: af.filter.options[index], + option: af.filter.options[index] } return r }) diff --git a/src/UI/Studio/StudioServer.ts b/src/UI/Studio/StudioServer.ts index bf6ad5ca27..9d439eaaf5 100644 --- a/src/UI/Studio/StudioServer.ts +++ b/src/UI/Studio/StudioServer.ts @@ -62,7 +62,7 @@ export default class StudioServer { } const category = <"layers" | "themes">parts[0] const id = file.substring(file.lastIndexOf("/") + 1, file.length - ".json".length) - if (Constants.priviliged_layers.indexOf(id) > 0) { + if (Constants.isPriviliged(id)) { continue } layerOverview.push({ id, owner, category })