From 06bc49901d63f1e8e13c8ef05fa6bae6bbb7faf4 Mon Sep 17 00:00:00 2001 From: vcoppe Date: Wed, 19 Jun 2024 18:11:05 +0200 Subject: [PATCH] hide file --- website/src/lib/components/Menu.svelte | 6 ++- .../file-list/FileListNodeLabel.svelte | 46 +++++++++++++++---- .../src/lib/components/gpx-layer/GPXLayer.ts | 12 +++++ website/src/lib/stores.ts | 13 ++++++ website/src/locales/en.json | 4 +- 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/website/src/lib/components/Menu.svelte b/website/src/lib/components/Menu.svelte index d64066ff..36c65e9b 100644 --- a/website/src/lib/components/Menu.svelte +++ b/website/src/lib/components/Menu.svelte @@ -34,7 +34,8 @@ exportSelectedFiles, triggerFileInput, createFile, - loadFiles + loadFiles, + toggleSelectionVisibility } from '$lib/stores'; import { selectAll, selection } from '$lib/components/file-list/Selection'; import { derived } from 'svelte/store'; @@ -337,6 +338,9 @@ } else if (e.key === 'l' && (e.metaKey || e.ctrlKey)) { $verticalFileView = !$verticalFileView; e.preventDefault(); + } else if (e.key === 'h' && (e.metaKey || e.ctrlKey)) { + toggleSelectionVisibility(); + e.preventDefault(); } else if (e.key === 'F1') { switchBasemaps(); e.preventDefault(); diff --git a/website/src/lib/components/file-list/FileListNodeLabel.svelte b/website/src/lib/components/file-list/FileListNodeLabel.svelte index 58263023..2c427e43 100644 --- a/website/src/lib/components/file-list/FileListNodeLabel.svelte +++ b/website/src/lib/components/file-list/FileListNodeLabel.svelte @@ -8,7 +8,18 @@ import * as Popover from '$lib/components/ui/popover'; import Shortcut from '$lib/components/Shortcut.svelte'; import { dbUtils, getFile, settings } from '$lib/db'; - import { Copy, Info, MapPin, PaintBucket, Plus, Save, Trash2, Waypoints } from 'lucide-svelte'; + import { + Copy, + Info, + MapPin, + PaintBucket, + Plus, + Save, + Trash2, + Waypoints, + Eye, + EyeOff + } from 'lucide-svelte'; import { ListFileItem, ListLevel, @@ -19,7 +30,7 @@ import { selectItem, selection } from './Selection'; import { getContext } from 'svelte'; import { get } from 'svelte/store'; - import { gpxLayers, map } from '$lib/stores'; + import { gpxLayers, map, toggleSelectionVisibility } from '$lib/stores'; import { GPXTreeElement, Track, @@ -37,6 +48,7 @@ export let item: ListItem; export let label: string | undefined; let nodeColors: string[] = []; + let hidden = false; let orientation = getContext<'vertical' | 'horizontal'>('orientation'); @@ -169,8 +181,14 @@ { - if (open && !get(selection).has(item)) { - selectItem(item); + if (open) { + if (!get(selection).has(item)) { + selectItem(item); + } + let layer = gpxLayers.get(item.getFileId()); + if (layer) { + hidden = layer.hidden; + } } }} > @@ -347,6 +365,18 @@ {$_('menu.style.button')} + {#if item instanceof ListFileItem} + + {#if hidden} + + {$_('menu.unhide')} + {:else} + + {$_('menu.hide')} + {/if} + + + {/if} {/if} {#if $verticalFileView} @@ -394,10 +424,10 @@ > {/if} - + + {$_('menu.delete')} - + + diff --git a/website/src/lib/components/gpx-layer/GPXLayer.ts b/website/src/lib/components/gpx-layer/GPXLayer.ts index ab29cbe3..a40804f2 100644 --- a/website/src/lib/components/gpx-layer/GPXLayer.ts +++ b/website/src/lib/components/gpx-layer/GPXLayer.ts @@ -50,6 +50,7 @@ export class GPXLayer { fileId: string; file: Readable; layerColor: string; + hidden: boolean = false; markers: mapboxgl.Marker[] = []; selected: boolean = false; draggable: boolean; @@ -362,6 +363,17 @@ export class GPXLayer { } } + toggleVisibility() { + this.hidden = !this.hidden; + if (this.hidden) { + this.map.setLayoutProperty(this.fileId, 'visibility', 'none'); + this.markers.forEach(marker => marker.remove()); + } else { + this.map.setLayoutProperty(this.fileId, 'visibility', 'visible'); + this.markers.forEach(marker => marker.addTo(this.map)); + } + } + getGeoJSON(): GeoJSON.FeatureCollection { let file = get(this.file)?.file; if (!file) { diff --git a/website/src/lib/stores.ts b/website/src/lib/stores.ts index 9a8921be..41f2acac 100644 --- a/website/src/lib/stores.ts +++ b/website/src/lib/stores.ts @@ -255,6 +255,19 @@ export function exportFile(file: GPXFile) { URL.revokeObjectURL(url); } +export function toggleSelectionVisibility() { + let files = new Set(); + get(selection).forEach((item) => { + files.add(item.getFileId()); + }); + files.forEach((fileId) => { + let layer = gpxLayers.get(fileId); + if (layer) { + layer.toggleVisibility(); + } + }); +} + let stravaCookies: any = null; function refreshStravaCookies() { /* diff --git a/website/src/locales/en.json b/website/src/locales/en.json index 6fa247d8..413a0465 100644 --- a/website/src/locales/en.json +++ b/website/src/locales/en.json @@ -52,7 +52,9 @@ "color": "Color", "opacity": "Opacity", "weight": "Weight" - } + }, + "hide": "Hide", + "unhide": "Unhide" }, "toolbar": { "routing": {