diff --git a/website/src/lib/components/FileList.svelte b/website/src/lib/components/FileList.svelte index 39d737af..b4330daa 100644 --- a/website/src/lib/components/FileList.svelte +++ b/website/src/lib/components/FileList.svelte @@ -2,12 +2,13 @@ import { fileOrder, files, selectedFiles, selectFiles } from '$lib/stores'; import { ScrollArea } from '$lib/components/ui/scroll-area/index'; - import Sortable from 'sortablejs/Sortable'; - import { onMount, tick } from 'svelte'; import type { GPXFile } from 'gpx'; + import { onMount } from 'svelte'; + import { get } from 'svelte/store'; + let tabs: HTMLDivElement; let buttons: HTMLButtonElement[] = []; let sortable: Sortable; @@ -27,6 +28,15 @@ }); } + function selectAllFiles() { + selectedFiles.update((selectedFiles) => { + get(files).forEach((file) => { + selectedFiles.add(file); + }); + return selectedFiles; + }); + } + function deselectFile(file: GPXFile) { selectedFiles.update((selectedFiles) => { selectedFiles.delete(file); @@ -81,6 +91,12 @@ Sortable.utils.select(buttons[index]); addSelectFile(file); }, + selectAllFiles: () => { + $files.forEach((file, index) => { + Sortable.utils.select(buttons[index]); + }); + selectAllFiles(); + }, removeSelect: (file: GPXFile) => { const index = $files.indexOf(file); Sortable.utils.deselect(buttons[index]); diff --git a/website/src/lib/components/Menu.svelte b/website/src/lib/components/Menu.svelte index 37245b90..f17f8c56 100644 --- a/website/src/lib/components/Menu.svelte +++ b/website/src/lib/components/Menu.svelte @@ -22,7 +22,8 @@ exportSelectedFiles, removeAllFiles, removeSelectedFiles, - triggerFileInput + triggerFileInput, + selectFiles } from '$lib/stores'; let distanceUnits = 'metric'; @@ -170,6 +171,9 @@ removeSelectedFiles(); } e.preventDefault(); + } else if (e.key === 'a' && (e.metaKey || e.ctrlKey)) { + $selectFiles.selectAllFiles(); + e.preventDefault(); } }} /> diff --git a/website/src/lib/stores.ts b/website/src/lib/stores.ts index 04436c37..3b7ee022 100644 --- a/website/src/lib/stores.ts +++ b/website/src/lib/stores.ts @@ -7,7 +7,7 @@ export const map = writable(null); export const files = writable([]); export const fileOrder = writable([]); export const selectedFiles = writable>(new Set()); -export const selectFiles = writable<{ [key: string]: (file: GPXFile) => void }>({}); +export const selectFiles = writable<{ [key: string]: (file?: GPXFile) => void }>({}); export function triggerFileInput() { const input = document.createElement('input');