From 40f97b7c35360b9e1c305a4d2124d6ae2a0ce8fd Mon Sep 17 00:00:00 2001 From: Pablo Ovelleiro Corral Date: Fri, 17 Apr 2026 20:07:51 +0200 Subject: [PATCH] Fix: overlays bikerouterGravel, cyclOSMlite, mapterhornHillshade, openRailwayMap cannot be toggled in Layer settings (#329) --- website/src/lib/logic/settings.ts | 50 ++++++++++++------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/website/src/lib/logic/settings.ts b/website/src/lib/logic/settings.ts index c27db31c4..facbba2f1 100644 --- a/website/src/lib/logic/settings.ts +++ b/website/src/lib/logic/settings.ts @@ -162,38 +162,26 @@ function getLayerValidator(allowed: Record, fallback: string) { function filterLayerTree(t: LayerTreeType, allowed: LayerTreeType | undefined): LayerTreeType { const filtered: LayerTreeType = {}; - const values = Object.values(t); - if (values.length == 0) return filtered; - if (typeof values[0] === 'boolean') { - if (allowed) { - Object.keys(allowed).forEach((key) => { - if (Object.hasOwn(t, key)) { - filtered[key] = t[key]; - } else { - filtered[key] = allowed[key]; - } - }); + if (!allowed) return filtered; + Object.keys(allowed).forEach((key) => { + const allowedVal = allowed[key]; + if (typeof allowedVal === 'boolean') { + filtered[key] = typeof t?.[key] === 'boolean' ? t[key] : allowedVal; + } else { + filtered[key] = filterLayerTree( + typeof t?.[key] === 'object' ? (t[key] as LayerTreeType) : {}, + allowedVal + ); } - Object.entries(t).forEach(([key, value]) => { - if ( - !Object.hasOwn(filtered, key) && - (key.startsWith('custom-') || key.startsWith('extension-')) - ) { - filtered[key] = value; - } - }); - } else { - Object.entries(t).forEach(([key, value]) => { - if (typeof value === 'object') { - filtered[key] = filterLayerTree( - value, - typeof allowed === 'object' && typeof allowed[key] === 'object' - ? allowed[key] - : undefined - ); - } - }); - } + }); + Object.entries(t ?? {}).forEach(([key, value]) => { + if ( + !Object.hasOwn(filtered, key) && + (key.startsWith('custom-') || key.startsWith('extension-')) + ) { + filtered[key] = value; + } + }); return filtered; }