feat: add select-all checkbox and lift selection state to parent#12900
feat: add select-all checkbox and lift selection state to parent#12900RobinAngele wants to merge 2 commits into
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>
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>
|
Thank you for your contributions Please update the branch. #12899 was merged. The first commit is here is obsolete. |
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 <git@robin4consulting.com>
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 <git@robin4consulting.com>
|
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |
|
df5a120 is still there. Marking as draft. |
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