Skip to content

Comments

Minor fix#854

Merged
nizzyabi merged 4 commits intostagingfrom
minor-fix
May 5, 2025
Merged

Minor fix#854
nizzyabi merged 4 commits intostagingfrom
minor-fix

Conversation

@nizzyabi
Copy link
Collaborator

@nizzyabi nizzyabi commented May 3, 2025

minor fix

Summary by CodeRabbit

  • Refactor
    • Improved rendering and layout of email threads, chat messages, and attachments for better clarity and consistency.
    • Updated star toggling for threads and emails to use optimistic UI updates with error handling and rollback.
    • Restructured sidebar and prompt dialog layout, including resizing the sidebar and enhancing tooltip usage.
  • Style
    • Enhanced visual feedback for disabled buttons and improved button styling.
    • Adjusted icon colors and tooltip behavior for mail categories.
    • Refined attachment display with better text truncation and wrapping.
  • Bug Fixes
    • Prevented overlay elements from interfering with user interactions by disabling pointer events.

@vercel
Copy link

vercel bot commented May 3, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
0 ✅ Ready (Inspect) Visit Preview 💬 Add feedback May 5, 2025 2:43am

@coderabbitai
Copy link
Contributor

coderabbitai bot commented May 3, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This set of changes focuses on UI and UX refinements across several components in the mail application. The updates include visual and structural adjustments to email threads, chat messages, attachments, and sidebar layouts. Optimistic UI patterns are introduced for starring threads, with immediate feedback and error handling. Several components receive improved tooltip logic, conditional rendering, and enhanced button states for better user feedback. No core business logic or exported API signatures are altered; all changes are internal to component render logic, state management, or styling.

Changes

Files/Group Change Summary
apps/mail/components/create/ai-chat.tsx Refactored thread and chat message rendering for clearer structure; replaced custom textarea with standard input; adjusted input/button styling; added example thread comment in empty state; minor text and layout tweaks.
apps/mail/components/create/email-composer.tsx Updated button class names to visually indicate disabled state with opacity and cursor changes; no logic changes.
apps/mail/components/icons/icons.tsx Modified Paper SVG icon's viewBox width from 10 to 14 units for scaling adjustment.
apps/mail/components/mail/mail-display.tsx Enabled attachment list wrapping with flex-wrap; constrained/truncated filename and file size display for attachments.
apps/mail/components/mail/mail-list.tsx
apps/mail/components/mail/thread-display.tsx
Refactored star toggling to use optimistic UI updates with rollback on error; improved tooltip positioning for quick actions; removed unused imports; added effect to reset optimistic state on data changes.
apps/mail/components/mail/mail.tsx Updated mail category icon coloring to be dynamic; tooltips now conditionally rendered and repositioned; overlay divs set to ignore pointer events.
apps/mail/components/ui/ai-sidebar.tsx Reduced sidebar width range; restructured prompts dialog and new chat button with improved tooltip usage and layout; adjusted header padding.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant UI
    participant Server

    User->>UI: Clicks star/unstar on thread
    UI->>UI: Optimistically update star state
    UI->>User: Show success toast
    UI->>Server: Send toggleStar request
    alt Success
        Server-->>UI: Responds OK
        UI->>UI: Mutate thread and thread list
    else Failure
        Server-->>UI: Responds with error
        UI->>UI: Roll back optimistic state
        UI->>User: Show error toast
    end
Loading

Possibly related PRs

  • Mail-0/Zero#845: Refactors JSX formatting and tooltip logic in the Categories and CategorySelect components, overlapping with this PR's tooltip and icon fill color changes in the same components.

Suggested labels

design

Poem

A bunny hopped through lines of code,
Tweaked stars and threads on email road.
Tooltips shimmer, buttons glow,
Attachments wrap in tidy row.
Sidebars slim, icons gleam,
UI now a rabbit’s dream!
🐇✨


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.

❤️ Share
🪧 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.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in 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 generate unit testing code.
    • @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 pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file 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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
apps/mail/components/mail/mail.tsx (1)

620-624: Conditional tooltip looks good – minor alignment improvement only

Good call rendering the tooltip only when the category is not selected; this removes redundant hover noise.
Consider extracting the idx === 0 ? 'ml-4' : '' logic into a small helper (getTooltipOffset(idx)) to keep JSX tidy, but totally optional.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d73ebfa and 9a6000e.

📒 Files selected for processing (8)
  • apps/mail/components/create/ai-chat.tsx (5 hunks)
  • apps/mail/components/create/email-composer.tsx (3 hunks)
  • apps/mail/components/icons/icons.tsx (1 hunks)
  • apps/mail/components/mail/mail-display.tsx (2 hunks)
  • apps/mail/components/mail/mail-list.tsx (4 hunks)
  • apps/mail/components/mail/mail.tsx (4 hunks)
  • apps/mail/components/mail/thread-display.tsx (2 hunks)
  • apps/mail/components/ui/ai-sidebar.tsx (2 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
apps/mail/components/mail/thread-display.tsx (2)
apps/mail/hooks/use-threads.ts (1)
  • useThreads (59-140)
apps/mail/actions/mail.ts (1)
  • toggleStar (84-123)
🔇 Additional comments (16)
apps/mail/components/icons/icons.tsx (1)

1332-1336: Adjusted the viewBox width to improve icon proportions.

The change in the Paper icon's viewBox parameter from "0 -3 10 28" to "0 -3 14 28" increases the width from 10 to 14 units, improving the icon's visible area without altering its height or origin. This minor adjustment ensures the icon appears with better proportions and may display more of its horizontal content.

apps/mail/components/create/email-composer.tsx (3)

652-654: Enhanced visual feedback for the disabled send button.

Adding disabled:opacity-50 disabled:cursor-not-allowed classes improves user feedback when the send button is in a disabled state. The cursor change prevents users from trying to click when the button isn't active, while the opacity reduction provides a clear visual cue.


850-852: Improved disabled state styling for the Casual button.

Adding the disabled:opacity-50 class provides visual feedback when the button is disabled, making the interface state more clear to users.


864-866: Added consistent disabled styling to message length indicator button.

The addition of disabled:opacity-50 to this button aligns its disabled state appearance with other disabled buttons in the interface, creating a more consistent user experience.

apps/mail/components/mail/mail-display.tsx (3)

764-764: Improved attachment layout with flex-wrap.

The addition of flex-wrap allows attachments to wrap to new lines when there are multiple attachments, preventing horizontal overflow and improving the overall layout.


795-796: Enhanced filename display with truncation.

Adding max-w-[15ch] text-sm truncate classes constrains the filename width and applies text truncation with ellipsis for long filenames, preventing layout issues while maintaining readability.


798-798: Improved file size text formatting.

The text-sm whitespace-nowrap classes ensure file size text doesn't wrap to a new line and maintains consistent sizing, keeping attachment information compact and aligned.

apps/mail/components/ui/ai-sidebar.tsx (3)

112-114: Optimized sidebar dimensions for better screen real estate balance.

Reducing the defaultSize from 25 to 20 and maxSize from 45 to 35 makes the AI sidebar more compact, allowing more space for the main content while still providing sufficient room for the chat interface.


119-119: Refined vertical spacing in the sidebar header.

Reducing the bottom padding from 10px to 2.5px creates a tighter, more efficient vertical layout in the header section, allowing more space for chat content.


136-208: Improved UI organization and tooltip feedback for sidebar actions.

The changes reorganize the UI controls with several improvements:

  1. Added tooltips for both the "Prompts" and "New chat" buttons, enhancing discoverability
  2. Grouped related actions in a flex container for better visual alignment
  3. Simplified the UI by removing direct text labels and using tooltips instead
  4. Maintained all functionality while improving the interface's clarity

These changes make the interface more intuitive while maintaining the same functionality.

apps/mail/components/mail/thread-display.tsx (1)

291-312: Success toast fires before the server round-trip

Because the success toast is shown optimistically before the API call, users will briefly see a success message even if the server ultimately fails (and then an error message).
Consider moving the success toast inside the try block after the call succeeds, or replacing it with an optimistic “Updating…” toast that is resolved/replaced on success.

[ suggest_optional_refactor ]

apps/mail/components/mail/mail-list.tsx (5)

188-188: Good addition of mutateThread function.

This explicit name makes the mutation intent clearer than the previous generic variable name.


191-197: Great implementation of optimistic UI pattern for star toggle.

The implementation of optimisticStarred state with the useMemo for deriving the effective isStarred value is an excellent pattern. This provides immediate user feedback while waiting for the server response, significantly improving the perceived performance of the UI.


203-219: Well-implemented error handling with state rollback.

The star toggle handler now properly:

  1. Updates state optimistically
  2. Shows appropriate user feedback via toast
  3. Handles errors with state rollback
  4. Mutates both local thread and thread list

This is a robust implementation that provides a good user experience even when server operations fail.


221-224: Good effect for state consistency.

This effect ensures the optimistic state is reset whenever the underlying thread data changes, maintaining consistency between client and server state.


511-517: Nice improvement to tooltip positioning.

The conditional class names and side positioning based on the item's index improve the UI by ensuring tooltips are always visible within the viewport, regardless of whether the item is at the top or elsewhere in the list.

Also applies to: 532-538, 553-559

Comment on lines 244 to 250
form="ai-chat-form"
type="submit"
className="absolute right-1 top-1/2 -translate-y-1/2 inline-flex h-6 cursor-pointer items-center justify-center gap-1.5 overflow-hidden rounded-lg "
disabled={!input.trim() || status !== 'ready'}
>
<div className="flex h-5 items-center justify-center gap-1 rounded-sm bg-black/10 px-1 dark:bg[#141414]">
<CurvedArrow className="mt-1.5 h-4 w-4 fill-black dark:fill-[#929292]" />
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Tailwind class name is malformed – dark theme colour will never apply

dark:bg[#141414] is missing the dash after bg.
Tailwind will ignore the rule, so the button background stays transparent in dark mode.

-<div className="flex h-5 items-center justify-center gap-1 rounded-sm bg-black/10 px-1 dark:bg[#141414]">
+<div className="flex h-5 items-center justify-center gap-1 rounded-sm bg-black/10 px-1 dark:bg-[#141414]">
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
form="ai-chat-form"
type="submit"
className="absolute right-1 top-1/2 -translate-y-1/2 inline-flex h-6 cursor-pointer items-center justify-center gap-1.5 overflow-hidden rounded-lg "
disabled={!input.trim() || status !== 'ready'}
>
<div className="flex h-5 items-center justify-center gap-1 rounded-sm bg-black/10 px-1 dark:bg[#141414]">
<CurvedArrow className="mt-1.5 h-4 w-4 fill-black dark:fill-[#929292]" />
<div className="flex h-5 items-center justify-center gap-1 rounded-sm bg-black/10 px-1 dark:bg-[#141414]">
<CurvedArrow className="mt-1.5 h-4 w-4 fill-black dark:fill-[#929292]" />

Comment on lines 201 to 206
{toolParts.map((part, idx) => (
'result' in part.toolInvocation &&
'threads' in part.toolInvocation.result ? (
<RenderThreads threads={part.toolInvocation.result.threads} key={idx} />
) : null
))}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Guard against undefined toolInvocation to avoid runtime crash

'in' operator will throw if part.toolInvocation is undefined.
A single malformed part will therefore break the whole chat render.

-  {toolParts.map((part, idx) => (
-    'result' in part.toolInvocation &&
-    'threads' in part.toolInvocation.result ? (
-      <RenderThreads threads={part.toolInvocation.result.threads} key={idx} />
-    ) : null
-  ))}
+  {toolParts.map((part, idx) =>
+    part.toolInvocation?.result?.threads ? (
+      <RenderThreads
+        threads={part.toolInvocation.result.threads}
+        key={idx}
+      />
+    ) : null,
+  )}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{toolParts.map((part, idx) => (
'result' in part.toolInvocation &&
'threads' in part.toolInvocation.result ? (
<RenderThreads threads={part.toolInvocation.result.threads} key={idx} />
) : null
))}
{toolParts.map((part, idx) =>
part.toolInvocation?.result?.threads ? (
<RenderThreads
threads={part.toolInvocation.result.threads}
key={idx}
/>
) : null,
)}

Comment on lines 304 to 306
try {
await toggleStar({ ids: [id] });
await Promise.all([mutateThread(), mutateThreads()]);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

toggleStar is used but never imported – compilation will fail

toggleStar comes from @/actions/mail, yet the import list only contains modifyLabels.
Add the missing import:

-import { Button } from '@/components/ui/button';
-import { modifyLabels } from '@/actions/mail';
+import { Button } from '@/components/ui/button';
+import { modifyLabels, toggleStar } from '@/actions/mail';

@MrgSub MrgSub marked this pull request as draft May 3, 2025 20:40
@nizzyabi nizzyabi changed the base branch from main to staging May 5, 2025 02:27
@nizzyabi nizzyabi marked this pull request as ready for review May 5, 2025 02:42
@nizzyabi nizzyabi merged commit f478f2e into staging May 5, 2025
4 of 5 checks passed
@nizzyabi nizzyabi deleted the minor-fix branch May 5, 2025 02:42
@coderabbitai coderabbitai bot mentioned this pull request Jun 18, 2025
34 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant