fix: apply labels to all selected emails in bulk operations
- Fixed bulk labeling to work on all selected emails instead of just the right-clicked email
- Updated LabelsList component to use bulkSelected array when applying labels
- Follows same pattern as other bulk operations (favorites, important, read/unread)
- Resolves issue where only the right-clicked email would get labeled despite multiple emails being selected
Closes Can't select multiple emails + Bulk label
See the following screenshots after changes!
Summary by CodeRabbit
-
New Features
- Label changes on email threads are now updated instantly in the interface using optimistic updates, providing immediate visual feedback without waiting for server confirmation.
-
Bug Fixes
- The label checkbox state now accurately reflects the most recent label changes, even before they are saved on the server.
Walkthrough
The changes refactor label toggling in the mail app to use optimistic state updates instead of server mutations and refetching. A new optimistic label action and state property are introduced, and the label toggle logic in the UI is updated to reflect and manage labels optimistically for both single and bulk thread operations.
Changes
| File(s) | Change Summary |
|---|---|
| apps/mail/components/context/thread-context.tsx | Refactored LabelsList to use optimistic state/actions for label toggling; removed mutation/refetch logic. |
| apps/mail/components/mail/optimistic-thread-state.tsx | Added optimisticLabels property to optimistic thread state; updated processing for label actions. |
| apps/mail/hooks/use-optimistic-actions.ts | Added optimisticToggleLabel function and supporting mutation for optimistic label updates. |
Sequence Diagram(s)
sequenceDiagram
participant User
participant LabelsList
participant useOptimisticActions
participant useOptimisticThreadState
participant Server
User->>LabelsList: Clicks label checkbox
LabelsList->>useOptimisticThreadState: Get current optimistic labels
LabelsList->>useOptimisticActions: optimisticToggleLabel(threadIds, labelId, add/remove)
useOptimisticActions->>useOptimisticThreadState: Update optimisticLabels state
useOptimisticActions->>Server: (Async) modifyLabels mutation
useOptimisticActions->>useOptimisticThreadState: Clear bulk selection (if any)
LabelsList->>User: UI updates immediately with optimistic label state
Suggested reviewers
- ahmetskilinc
Poem
In the meadow of mail, where labels once lagged,
Now optimism hops—no more waiting, no drag!
With a twitch of a whisker, a label appears,
No server delay, just bunny-like cheers.
Threads wear their tags with a confident grin,
For the magic of optimism now lives within!
🐇✨
📜 Recent review details
Configuration used: CodeRabbit UI Review profile: CHILL Plan: Pro
📥 Commits
Reviewing files that changed from the base of the PR and between 743143a2314350aae82b93d5f4c6150d8642f8f4 and 5aa75c50639118aa5119606599c7eefffd3b6eda.
📒 Files selected for processing (3)
-
apps/mail/components/context/thread-context.tsx(2 hunks) -
apps/mail/components/mail/optimistic-thread-state.tsx(2 hunks) -
apps/mail/hooks/use-optimistic-actions.ts(3 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- apps/mail/hooks/use-optimistic-actions.ts
- apps/mail/components/context/thread-context.tsx
- apps/mail/components/mail/optimistic-thread-state.tsx
✨ Finishing Touches
- [ ] 📝 Generate Docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
🪧 Tips
Chat
There are 3 ways to chat with CodeRabbit:
- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
-
I pushed a fix in commit <commit_id>, please review it. -
Explain this complex logic. -
Open a follow-up GitHub issue for this discussion.
-
- Files and specific lines of code (under the "Files changed" tab): Tag
@coderabbitaiin a new review comment at the desired location with your query. Examples:-
@coderabbitai explain this code block. -
@coderabbitai modularize this function.
-
- PR comments: Tag
@coderabbitaiin a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:-
@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase. -
@coderabbitai read src/utils.ts and explain its main purpose. -
@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format. -
@coderabbitai help me debug CodeRabbit configuration file.
-
Support
Need help? Create a ticket on our support page for assistance with any issues or questions.
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.
CodeRabbit Commands (Invoked using PR comments)
-
@coderabbitai pauseto pause the reviews on a PR. -
@coderabbitai resumeto resume the paused reviews. -
@coderabbitai reviewto trigger an incremental review. This is useful when automatic reviews are disabled for the repository. -
@coderabbitai full reviewto do a full review from scratch and review all the files again. -
@coderabbitai summaryto regenerate the summary of the PR. -
@coderabbitai generate docstringsto generate docstrings for this PR. -
@coderabbitai generate sequence diagramto generate a sequence diagram of the changes in this PR. -
@coderabbitai resolveresolve all the CodeRabbit review comments. -
@coderabbitai configurationto show the current CodeRabbit configuration for the repository. -
@coderabbitai helpto get help.
Other keywords and placeholders
- Add
@coderabbitai ignoreanywhere in the PR description to prevent this PR from being reviewed. - Add
@coderabbitai summaryto generate the high-level summary at a specific location in the PR description. - Add
@coderabbitaianywhere in the PR title to generate the title automatically.
CodeRabbit Configuration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile to the root of your repository. - Please see the configuration documentation for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
Documentation and Community
- Visit our Documentation for detailed information on how to use CodeRabbit.
- Join our Discord Community to get help, request features, and share feedback.
- Follow us on X/Twitter for updates and announcements.
@Manancode does this also remove labels too?
yes @ahmetskilinc , just select the bulk emails and uncheck the label