summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/lib/selection/Selectable.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/lib/selection/Selectable.svelte')
-rw-r--r--frontend/src/lib/selection/Selectable.svelte24
1 files changed, 24 insertions, 0 deletions
diff --git a/frontend/src/lib/selection/Selectable.svelte b/frontend/src/lib/selection/Selectable.svelte
new file mode 100644
index 0000000..48b6ac7
--- /dev/null
+++ b/frontend/src/lib/selection/Selectable.svelte
@@ -0,0 +1,24 @@
+<script lang="ts">
+ import { getSelectionContext } from '$lib/Selection';
+
+ export let id: number;
+ export let index: number;
+
+ export let edit: ((id: number) => void) | undefined = undefined;
+
+ const selection = getSelectionContext();
+
+ $: selected = $selection.contains(id);
+
+ const handle = (event: MouseEvent) => {
+ if ($selection.active) {
+ $selection = $selection.update(index, event.shiftKey);
+ event.preventDefault();
+ } else if (edit) {
+ edit(id);
+ event.preventDefault();
+ }
+ };
+</script>
+
+<slot {handle} {selected} />