Skip to content

Commit

Permalink
fix: select multiple envelopes by holding shift directly
Browse files Browse the repository at this point in the history
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
  • Loading branch information
st3iny authored and backportbot[bot] committed Sep 18, 2024
1 parent e88add6 commit a126ab3
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 6 deletions.
7 changes: 4 additions & 3 deletions src/components/Envelope.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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">
<template #icon>
<Star v-if="data.flags.flagged"
Expand Down Expand Up @@ -51,7 +52,7 @@
:checked="selected">
<label :for="`select-checkbox-${data.uid}`"
@click.exact.prevent="toggleSelected"
@click.shift.prevent="onSelectMultiple" />
@click.shift.exact.prevent="onSelectMultiple" />
</p>
</div>
</template>
Expand Down
24 changes: 21 additions & 3 deletions src/components/EnvelopeList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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

Check warning on line 594 in src/components/EnvelopeList.vue

View workflow job for this annotation

GitHub Actions / NPM lint

The type 'int' is undefined

Check warning on line 594 in src/components/EnvelopeList.vue

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc @param "databaseId" description
* @return {int|undefined} Index or undefined if not found in the envelope list

Check warning on line 595 in src/components/EnvelopeList.vue

View workflow job for this annotation

GitHub Actions / NPM lint

The type 'int' is undefined
*/
findSelectionIndex(databaseId) {
for (const [index, envelope] of this.sortedEnvelops.entries()) {
if (envelope.databaseId === databaseId) {
return index
}
}
return undefined
},
},
}
</script>
Expand Down

0 comments on commit a126ab3

Please sign in to comment.