From d8fa8500dae330fd9dc45c38f4ce34ab392b804e Mon Sep 17 00:00:00 2001 From: vcoppe Date: Thu, 23 May 2024 15:08:34 +0200 Subject: [PATCH] select all in current subtree --- .../src/lib/components/file-list/Selection.ts | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/website/src/lib/components/file-list/Selection.ts b/website/src/lib/components/file-list/Selection.ts index 04a874fe..4a26a6e4 100644 --- a/website/src/lib/components/file-list/Selection.ts +++ b/website/src/lib/components/file-list/Selection.ts @@ -1,5 +1,5 @@ import { get, writable } from "svelte/store"; -import { ListFileItem, ListItem, ListRootItem, SelectionTreeType } from "./FileList"; +import { ListFileItem, ListItem, ListRootItem, ListTrackItem, ListTrackSegmentItem, ListWaypointItem, SelectionTreeType } from "./FileList"; import { fileObservers } from "$lib/db"; export const selection = writable(new SelectionTreeType(new ListRootItem())); @@ -25,9 +25,39 @@ export function addSelect(fileId: string) { export function selectAll() { selection.update(($selection) => { - get(fileObservers).forEach((_file, fileId) => { - $selection.set(new ListFileItem(fileId), true); + let item: ListItem = new ListRootItem(); + $selection.forEach((i) => { + item = i; }); + + if (item instanceof ListRootItem || item instanceof ListFileItem) { + $selection.clear(); + get(fileObservers).forEach((_file, fileId) => { + $selection.set(new ListFileItem(fileId), true); + }); + } else if (item instanceof ListTrackItem) { + let fileStore = get(fileObservers).get(item.getFileId()); + if (fileStore) { + get(fileStore)?.file.trk.forEach((_track, trackId) => { + $selection.set(new ListTrackItem(item.getFileId(), trackId), true); + }); + } + } else if (item instanceof ListTrackSegmentItem) { + let fileStore = get(fileObservers).get(item.getFileId()); + if (fileStore) { + get(fileStore)?.file.trk[item.getTrackIndex()].trkseg.forEach((_segment, segmentId) => { + $selection.set(new ListTrackSegmentItem(item.getFileId(), item.getTrackIndex(), segmentId), true); + }); + } + } else if (item instanceof ListWaypointItem) { + let fileStore = get(fileObservers).get(item.getFileId()); + if (fileStore) { + get(fileStore)?.file.wpt.forEach((_waypoint, waypointId) => { + $selection.set(new ListWaypointItem(item.getFileId(), waypointId), true); + }); + } + } + return $selection; }); } \ No newline at end of file