Files
gpx.studio/website/src/lib/components/file-list/Selection.ts

63 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-05-22 16:05:31 +02:00
import { get, writable } from "svelte/store";
2024-05-23 15:08:34 +02:00
import { ListFileItem, ListItem, ListRootItem, ListTrackItem, ListTrackSegmentItem, ListWaypointItem, SelectionTreeType } from "./FileList";
2024-05-22 16:05:31 +02:00
import { fileObservers } from "$lib/db";
export const selection = writable<SelectionTreeType>(new SelectionTreeType(new ListRootItem()));
2024-05-23 14:44:07 +02:00
export function selectItem(item: ListItem) {
2024-05-23 11:21:57 +02:00
selection.update(($selection) => {
$selection.clear();
2024-05-23 14:44:07 +02:00
$selection.set(item, true);
2024-05-23 11:21:57 +02:00
return $selection;
});
}
2024-05-23 14:44:07 +02:00
export function selectFile(fileId: string) {
selectItem(new ListFileItem(fileId));
}
2024-05-23 11:21:57 +02:00
export function addSelect(fileId: string) {
selection.update(($selection) => {
$selection.toggle(new ListFileItem(fileId));
return $selection;
});
}
2024-05-22 16:05:31 +02:00
export function selectAll() {
selection.update(($selection) => {
2024-05-23 15:08:34 +02:00
let item: ListItem = new ListRootItem();
$selection.forEach((i) => {
item = i;
2024-05-22 16:05:31 +02:00
});
2024-05-23 15:08:34 +02:00
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);
});
}
}
2024-05-22 16:05:31 +02:00
return $selection;
});
}