From 2cd07688c91d23d13fe89d5cfa5bae40232847c0 Mon Sep 17 00:00:00 2001 From: vcoppe Date: Mon, 15 Apr 2024 11:04:36 +0200 Subject: [PATCH] collapsible state memory in layer control --- website/src/lib/assets/layers.ts | 46 +++++++++++-------- .../layer-control/LayerControl.svelte | 2 - .../layer-control/LayerControlSettings.svelte | 2 - .../components/layer-control/LayerTree.svelte | 32 +++---------- .../layer-control/LayerTreeNode.svelte | 23 +++++++--- 5 files changed, 50 insertions(+), 55 deletions(-) diff --git a/website/src/lib/assets/layers.ts b/website/src/lib/assets/layers.ts index d832a4bc..edd1fab1 100644 --- a/website/src/lib/assets/layers.ts +++ b/website/src/lib/assets/layers.ts @@ -372,31 +372,39 @@ export const opacities: { [key: string]: number; } = { }; export type LayerTreeType = string[] | { [key: string]: LayerTreeType; }; +export type CollapsedInfoTreeType = { + self: boolean; + children: { [key: string]: CollapsedInfoTreeType; }; +}; export const basemapTree: LayerTreeType = { - world: ['mapboxOutdoors', 'mapboxSatellite', 'openStreetMap', 'openTopoMap', 'openHikingMap', 'cyclOSM'], - countries: { - bulgaria: ['bgMountains'], - finland: ['finlandTopo'], - france: ['ignPlanV2', 'ignFrScan25', 'ignSatellite'], - newZealand: ['linz', 'linzTopo'], - norway: ['norwayTopo'], - spain: ['ignEs'], - sweden: ['swedenTopo'], - switzerland: ['swisstopo'], - unitedKingdom: ['ordnanceSurvey'], - unitedStates: ['usgs'], + basemaps: { + world: ['mapboxOutdoors', 'mapboxSatellite', 'openStreetMap', 'openTopoMap', 'openHikingMap', 'cyclOSM'], + countries: { + bulgaria: ['bgMountains'], + finland: ['finlandTopo'], + france: ['ignPlanV2', 'ignFrScan25', 'ignSatellite'], + newZealand: ['linz', 'linzTopo'], + norway: ['norwayTopo'], + spain: ['ignEs'], + sweden: ['swedenTopo'], + switzerland: ['swisstopo'], + unitedKingdom: ['ordnanceSurvey'], + unitedStates: ['usgs'], + }, }, } export const overlayTree: LayerTreeType = { - world: { - cyclOSM: ['cyclOSMlite'], - waymarkedTrails: ['waymarkedTrailsHiking', 'waymarkedTrailsCycling', 'waymarkedTrailsMTB', 'waymarkedTrailsSkating', 'waymarkedTrailsHorseRiding', 'waymarkedTrailsWinter'] - }, - countries: { - france: ['ignFrCadastre', 'ignSlope'], - switzerland: ['swisstopoSlope', 'swisstopoCycling', 'swisstopoMountainBike'], + overlays: { + world: { + cyclOSM: ['cyclOSMlite'], + waymarkedTrails: ['waymarkedTrailsHiking', 'waymarkedTrailsCycling', 'waymarkedTrailsMTB', 'waymarkedTrailsSkating', 'waymarkedTrailsHorseRiding', 'waymarkedTrailsWinter'] + }, + countries: { + france: ['ignFrCadastre', 'ignSlope'], + switzerland: ['swisstopoSlope', 'swisstopoCycling', 'swisstopoMountainBike'], + }, }, } diff --git a/website/src/lib/components/layer-control/LayerControl.svelte b/website/src/lib/components/layer-control/LayerControl.svelte index 37b21444..f174941f 100644 --- a/website/src/lib/components/layer-control/LayerControl.svelte +++ b/website/src/lib/components/layer-control/LayerControl.svelte @@ -41,7 +41,6 @@
{ if (map) { @@ -54,7 +53,6 @@
{ diff --git a/website/src/lib/components/layer-control/LayerControlSettings.svelte b/website/src/lib/components/layer-control/LayerControlSettings.svelte index f5963c0f..f69691c5 100644 --- a/website/src/lib/components/layer-control/LayerControlSettings.svelte +++ b/website/src/lib/components/layer-control/LayerControlSettings.svelte @@ -40,7 +40,6 @@ { @@ -52,7 +51,6 @@ { diff --git a/website/src/lib/components/layer-control/LayerTree.svelte b/website/src/lib/components/layer-control/LayerTree.svelte index c40c0ad8..48428ae3 100644 --- a/website/src/lib/components/layer-control/LayerTree.svelte +++ b/website/src/lib/components/layer-control/LayerTree.svelte @@ -1,39 +1,19 @@
- - - - - - +
diff --git a/website/src/lib/components/layer-control/LayerTreeNode.svelte b/website/src/lib/components/layer-control/LayerTreeNode.svelte index 262557b6..0b7e3c53 100644 --- a/website/src/lib/components/layer-control/LayerTreeNode.svelte +++ b/website/src/lib/components/layer-control/LayerTreeNode.svelte @@ -6,7 +6,7 @@ import { ChevronDown, ChevronUp } from 'lucide-svelte'; - import { type LayerTreeType } from '$lib/assets/layers'; + import { type CollapsedInfoTreeType, type LayerTreeType } from '$lib/assets/layers'; export let name: string; export let node: LayerTreeType; @@ -21,10 +21,15 @@ }); } - let open: { [key: string]: boolean } = {}; + export let open: CollapsedInfoTreeType; if (!Array.isArray(node)) { Object.keys(node).forEach((id) => { - open[id] = true; + if (!open.children.hasOwnProperty(id)) { + open.children[id] = { + self: true, + children: {} + }; + } }); } @@ -62,14 +67,14 @@ {:else}
{#each Object.keys(node) as id} - + - + {/each}