feat: add select-all checkbox and lift selection state to parent#12900
Open
RobinAngele wants to merge 2 commits intonextcloud:mainfrom
Open
feat: add select-all checkbox and lift selection state to parent#12900RobinAngele wants to merge 2 commits intonextcloud:mainfrom
RobinAngele wants to merge 2 commits intonextcloud:mainfrom
Conversation
…ctions - Add missing ImportantIcon import and component registration in EnvelopeList so the 'Mark as important' icon renders during bulk selection - Fix favorite/unfavorite bulk action logic: rename methods to favoriteAll/unfavoriteAll and use explicit favFlag values (true/false) instead of inverted computed checks that failed when all selected messages shared the same state AI-assisted: Cline (Claude) Signed-off-by: RobinAngele <robin@robin4consulting.com>
Add a 'Select all X messages' checkbox above the envelope list using NcCheckboxRadioSwitch from @nextcloud/vue, allowing users to select all visible messages at once. Lift envelope selection state from individual EnvelopeList instances up to the Mailbox parent component. This enables: - Cross-group shift-click range selection via flat envelope indexing - Consistent selection state across grouped envelope lists - Global select-all / unselect-all from the parent level Also pass the selection array as a prop to EnvelopeList and add proper event handling for update:selection and select-range. Closes: nextcloud#4285 Refs: nextcloud#7880, nextcloud#6070, nextcloud#7276 AI-assisted: Cline (Claude) Signed-off-by: RobinAngele <robin@robin4consulting.com>
This was referenced May 7, 2026
Closed
RobinAngele
pushed a commit
to RobinAngele/nextcloud-mail
that referenced
this pull request
May 8, 2026
Add a 'Select all matching' button to the search parameters dialog and enable selecting all messages matching a filter across all pages. Search modal: - New 'Select all matching' button in SearchMessages.vue dialog - Emits 'select-all-matching' event via the MailboxThread bus Mass loading: - Mailbox.vue onBusSelectAllMatching forces a fresh load, then iterates loadMore() until all pages are fetched - Spinner + 'Selecting messages…' shown during loading - Checkbox disabled while loading Context-aware labels: - 'Select N loaded messages' when more pages exist - 'Select N matching messages' when a filter is active - 'Select all N messages' when all pages are loaded - Hint row: 'Scroll down to include more messages, use filter to refine, or click an avatar circle to select one at a time' Depends on: nextcloud#12900 (select-all checkbox feature) Closes: nextcloud#4285, nextcloud#7880 Refs: nextcloud#6070, nextcloud#7276, nextcloud#11526 AI-assisted: Cline (Claude) Signed-off-by: RobinAngele <robin@robin4consulting.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on: #12899
Refs #4285
Refs #7880
Refs #6070
Refs #7276
Refs #11526
Follow-up: #12901 adds filter-based mass selection
Summary
Adds a "Select all X messages" checkbox above the envelope list and lifts
envelope selection state from individual
EnvelopeListinstances to theMailboxparent, enabling cross-group shift-click range selection andglobal select-all/unselect-all.
Together with #12901 this fully closes #4285 and #7880.
Changes by file
Mailbox.vueNcCheckboxRadioSwitchat the top of the listmargin-top: 8pxso it doesn't sit flush against the sticky search barselectionarray in data — single source of truth for selection stateselectAll(),unselectAll()methods for global controlflatEnvelopeList,selectMode,allSelectedcomputed propertiesonUpdateSelection(),onSelectRange(),getGroupFlatIndex()methodsselectionprop down toEnvelopeListchildrenupdate:selectionandselect-rangeevents from children.select-all-barCSSEnvelopeList.vueselectionprop (typeArray, replaces localdata().selection)flatIndexprop (typeNumber, for cross-group shift-click indexing)selectionprop withimmediate: trueto syncflags.selectedemitLocalSelection()method — emitsupdate:selectionto parentselect-rangewith global flat indicesselectionfromdata()andsetEnvelopeSelectedmutationsHow to test
Screenshots