From 91c65e08613e76a3383c994b470d179e4c63e50e Mon Sep 17 00:00:00 2001
From: 409 <409dev@protonmail.com>
Date: Thu, 4 Sep 2025 19:02:14 +0200
Subject: [PATCH] refactor rect selection to make it work in shares
---
frontend/components/SelectionRect.vue | 96 +++++++++++++++-
frontend/layouts/share.vue | 1 +
frontend/pages/share.vue | 18 ++-
frontend/pages/warrens/files.vue | 153 +-------------------------
frontend/shared/types/selection.ts | 1 +
frontend/stores/index.ts | 61 ++++++++++
frontend/stores/selectionRect.ts | 11 +-
7 files changed, 187 insertions(+), 154 deletions(-)
create mode 100644 frontend/shared/types/selection.ts
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();
+}