From a126ab3ef2b132ec3d7648e8e56f0602c9ffb8cc Mon Sep 17 00:00:00 2001 From: Richard Steinmetz Date: Tue, 17 Sep 2024 16:27:43 +0200 Subject: [PATCH] fix: select multiple envelopes by holding shift directly Signed-off-by: Richard Steinmetz --- src/components/Envelope.vue | 7 ++++--- src/components/EnvelopeList.vue | 24 +++++++++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/components/Envelope.vue b/src/components/Envelope.vue index 6a965aa56d..4af71ffd13 100644 --- a/src/components/Envelope.vue +++ b/src/components/Envelope.vue @@ -19,8 +19,9 @@ :name="addresses" :details="formatted()" :one-line="oneLineLayout" - @click="onClick" - @click.ctrl.prevent="toggleSelected" + @click.exact="onClick" + @click.ctrl.exact.prevent="toggleSelected" + @click.shift.exact.prevent="onSelectMultiple" @update:menuOpen="closeMoreAndSnoozeOptions"> diff --git a/src/components/EnvelopeList.vue b/src/components/EnvelopeList.vue index dfb04846b1..253678177e 100644 --- a/src/components/EnvelopeList.vue +++ b/src/components/EnvelopeList.vue @@ -548,12 +548,15 @@ export default { this.setEnvelopeSelected(envelope, selected) }, onEnvelopeSelectMultiple(envelope, index) { - if (this.lastToggledIndex === undefined) { + const lastToggledIndex = this.lastToggledIndex + ?? this.findSelectionIndex(parseInt(this.$route.params.threadId)) + ?? undefined + if (lastToggledIndex === undefined) { return } - const start = Math.min(this.lastToggledIndex, index) - const end = Math.max(this.lastToggledIndex, index) + const start = Math.min(lastToggledIndex, index) + const end = Math.max(lastToggledIndex, index) const selected = this.selection.includes(envelope.databaseId) for (let i = start; i <= end; i++) { this.setEnvelopeSelected(this.sortedEnvelops[i], !selected) @@ -585,6 +588,21 @@ export default { this.showMoveModal = false this.unselectAll() }, + /** + * Find the envelope list index of a given envelope's database id. + * + * @param {int} databaseId + * @return {int|undefined} Index or undefined if not found in the envelope list + */ + findSelectionIndex(databaseId) { + for (const [index, envelope] of this.sortedEnvelops.entries()) { + if (envelope.databaseId === databaseId) { + return index + } + } + + return undefined + }, }, }