diff --git a/frontend/components/SelectionRect.vue b/frontend/components/SelectionRect.vue
index 792c465..2abc65b 100644
--- a/frontend/components/SelectionRect.vue
+++ b/frontend/components/SelectionRect.vue
@@ -1,15 +1,109 @@
diff --git a/frontend/layouts/share.vue b/frontend/layouts/share.vue
index 16c6d23..3d62735 100644
--- a/frontend/layouts/share.vue
+++ b/frontend/layouts/share.vue
@@ -2,6 +2,7 @@
+
diff --git a/frontend/pages/share.vue b/frontend/pages/share.vue
index cd72363..f657cac 100644
--- a/frontend/pages/share.vue
+++ b/frontend/pages/share.vue
@@ -7,6 +7,7 @@ definePageMeta({
layout: 'share',
});
+const selectionRect = useSelectionRect();
const warrenStore = useWarrenStore();
const route = useRoute();
@@ -96,12 +97,13 @@ async function loadFiles() {
}
async function onEntryClicked(entry: DirectoryEntry, event: MouseEvent) {
+ event.stopPropagation();
+
if (warrenStore.current == null) {
return;
}
- if (event.ctrlKey) {
- warrenStore.toggleSelection(entry);
+ if (warrenStore.handleSelectionClick(entry, event)) {
return;
}
@@ -171,7 +173,7 @@ function onEntryDownload(entry: DirectoryEntry) {
);
} else {
downloadName = 'download.zip';
- const paths = Array.from(warrenStore.selection).map((entry) =>
+ const paths = Array.from(warrenStore.selection.values()).map((entry) =>
joinPaths(warrenStore.current!.path, entry.name)
);
@@ -182,12 +184,22 @@ function onEntryDownload(entry: DirectoryEntry) {
downloadFile(downloadName, downloadApiUrl);
}
+
+function onParentClick() {
+ if (selectionRect.dirty) {
+ selectionRect.dirty = false;
+ return;
+ }
+
+ warrenStore.clearSelection();
+}