Skip to content

CORE-2201 Rewrite App settings panel copy and group into sections#3358

Open
jeanfbrito wants to merge 9 commits into
masterfrom
feat/core-2201-settings-ux-rewrite
Open

CORE-2201 Rewrite App settings panel copy and group into sections#3358
jeanfbrito wants to merge 9 commits into
masterfrom
feat/core-2201-settings-ux-rewrite

Conversation

@jeanfbrito

@jeanfbrito jeanfbrito commented Jun 18, 2026

Copy link
Copy Markdown
Member

Implements CORE-2201: a UX-writing pass over the desktop app's settings panel. Renames the panel to App settings, groups the previously flat toggle list into five labelled sections, and rewrites every label and description against Rocket.Chat's writing conventions. Strings and structure only — no setting changes its backing preference or behavior.

Changes

  • Rename panel "Settings" → App settings; add five section headings (App UI, System UI, System behavior, Calling, Other & technical) and reorder settings per-platform to match the spec
  • Rewrite all labels to sentence case and add a description to every setting; use "workspace" instead of "server" in user-facing copy
  • Add macOS-specific Menu bar extra (tray icon) and Bounce dock icon (flash frame) variants; show a "Tray icon must be disabled." hint when Minimize on close is disabled
  • Rename the workspace-bar overflow menu and native app menu items that open the panel to match the new "App settings" name
  • Hide the telephony preferred server picker that leaked to master — the unreleased click-to-call feature (UI included) lands via Click-to-Call: Dial Phone Numbers Directly from Any App #3325; backend code stays dormant
  • Preserve all platform gating (macOS-only: transparent window, menu bar extra, bounce dock; Windows-only: minimize on close, menu bar, flash frame, screen capture fallback, NTLM)

i18n

New keys added (settings.sections.*, trayIcon.titleDarwin/descriptionDarwin, minimizeOnClose.disabledHint); no existing key removed, so other locales keep resolving until translations land. Coordinate with the i18n team before merging.

Validation

yarn lint ✓ · tsc --noEmit ✓ · yarn build ✓ · test suite 277 pass / 2 skip ✓

Pending before close: visual QA on real macOS + Windows builds (Figma 1:1), i18n translation handoff.

Summary by CodeRabbit

  • UI Improvements
    • Reorganized the settings page into clearer sections (App UI, System UI, System Behavior, Calling, Other, Logging).
    • Removed the Telephony Server option from the General settings area.
    • Improved platform-specific labeling for the tray icon (macOS) and added clearer extra hints for dependent/disabled toggles (e.g., Minimize on close and related UI controls).
  • Localization
    • Refreshed app settings wording across supported languages, updated menu/sidebar labels to “App settings,” expanded settings descriptions (including Outlook calendar sync/logging and encrypted PDF preview limit), and improved Transparent Window hint/description text.

Rename the panel to "App settings" and restructure the General tab
from a flat toggle list into five sections (App UI, System UI, System
behavior, Calling, Other & technical), reordered per platform.

Rewrite every label to sentence case and add a plain-language
description to each setting, using "workspace" instead of "server"
in user-facing strings. Add a macOS "Menu bar extra" variant for the
tray icon, a "Bounce dock icon" label for flash frame, and a
disabled-state hint for Minimize on close. Strings only; every toggle
and input keeps the same preference key and behavior.
Update the workspace-bar overflow menu and the native app menu item
that open the settings panel so their labels match the renamed
"App settings" panel.
Remove the TelephonyServer picker from the settings panel so the
unreleased click-to-call feature stays hidden on master. The full
feature, including this UI, lands via PR #3325. Backend telephony
code is left in place but dormant.
@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Updates settings labels and copy across many locales, expands settings sections and option text, and refactors SettingsView components to use stacked field layout, platform-specific rendering, and added hint rows for several settings.

Changes

Settings UI i18n and Component Refactor

Layer / File(s) Summary
Settings field primitives
src/ui/components/SettingsView/features/SettingField.tsx, src/ui/components/SettingsView/features/ToggleField.tsx
SettingField now uses a stacked description layout, and a new ToggleField component centralizes toggle row rendering with optional hint and children.
Settings view wiring
src/ui/components/SettingsView/GeneralTab.tsx, src/ui/components/SettingsView/features/*
GeneralTab is reorganized into multiple field groups with platform flags, and the settings feature components switch to ToggleField or updated SettingField prop placement for labels, descriptions, and hints.
English settings copy
src/i18n/en.i18n.json
The English settings block adds section groupings, rewrites option copy, and renames the settings menu and sidebar labels to App settings.
Multilingual settings copy
src/i18n/de-DE.i18n.json, src/i18n/es.i18n.json, src/i18n/fi.i18n.json, src/i18n/fr.i18n.json, src/i18n/hu.i18n.json, src/i18n/ja.i18n.json, src/i18n/no.i18n.json, src/i18n/pl.i18n.json, src/i18n/pt-BR.i18n.json, src/i18n/ru.i18n.json, src/i18n/sv.i18n.json, src/i18n/tr-TR.i18n.json, src/i18n/uk-UA.i18n.json, src/i18n/zh-CN.i18n.json, src/i18n/zh-TW.i18n.json
Localized settings copy is updated across German, Spanish, Finnish, French, Hungarian, Japanese, Norwegian, Polish, Brazilian Portuguese, Russian, Swedish, Turkish, Ukrainian, Simplified Chinese, and Traditional Chinese, including section groupings, option rewrites, and menu/sidebar label changes.
Transparent window hint backfills
src/i18n/ar.i18n.json, src/i18n/it-IT.i18n.json, src/i18n/nb-NO.i18n.json, src/i18n/nn.i18n.json, src/i18n/se.i18n.json, src/i18n/zh.i18n.json
Arabic, Italian, Norwegian, Nynorsk, Northern Sami, and Chinese transparent-window strings split restart text into separate hint fields.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly captures the main UX-writing overhaul and section grouping for the App settings panel.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • CORE-2201: Request failed with status code 401

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

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown

Apply the CORE-2201 settings copy rewrite to de-DE, es, fi, fr, hu, ja,
no, pl, pt-BR, ru, sv, tr-TR, uk-UA, zh-CN and zh-TW: rename the panel
to App settings, add the five section headings, retranslate changed
labels and descriptions (workspace terminology, sentence case), and add
the macOS menu-bar-extra and bounce-dock-icon variants plus the
minimize-on-close hint where the parent key exists.

Sparse stub locales (ar, it-IT, nb-NO, nn, se, zh) are left to fall back
to en-US, matching their existing settings coverage.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
src/i18n/hu.i18n.json (1)

332-336: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Hungarian locale is missing part of the new settings option key set.

settings.options ends after verboseOutlookLogging, but the refactored panel also requires outlookCalendarSyncInterval, detailedEventsLogging, debugLogging, and e2ePdfPreviewSizeLimit. Those labels/hints will not be localized in HU.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/i18n/hu.i18n.json` around lines 332 - 336, The Hungarian locale file is
incomplete and missing translation entries for four new settings options. After
the verboseOutlookLogging entry in the settings.options section, add the missing
locale keys for outlookCalendarSyncInterval, detailedEventsLogging,
debugLogging, and e2ePdfPreviewSizeLimit. Each key should follow the same
structure as verboseOutlookLogging with title and description properties,
ensuring all new settings options referenced in the refactored panel have
corresponding Hungarian translations to prevent missing localization.
src/i18n/pt-BR.i18n.json (1)

310-317: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

pt-BR locale is missing multiple keys required by the new settings layout.

The settings.options block ends before adding outlookCalendarSyncInterval, verboseOutlookLogging, detailedEventsLogging, debugLogging, and e2ePdfPreviewSizeLimit. These controls will not be fully localized in pt-BR.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/i18n/pt-BR.i18n.json` around lines 310 - 317, The pt-BR locale file is
missing translation keys for new settings controls that need to be localized.
After the themeAppearance object in the settings.options block, add the missing
keys: outlookCalendarSyncInterval, verboseOutlookLogging, detailedEventsLogging,
debugLogging, and e2ePdfPreviewSizeLimit. Each key should have appropriate
nested properties (title and description) with Portuguese Brazilian translations
to match the structure of other settings options like themeAppearance. This
ensures all new settings controls are properly localized in the pt-BR locale.
src/i18n/fi.i18n.json (1)

227-297: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Missing newly referenced settings option keys in Finnish locale.

This settings.options block closes at Line 297 without several keys used by the refactored settings UI (outlookCalendarSyncInterval, verboseOutlookLogging, detailedEventsLogging, debugLogging, e2ePdfPreviewSizeLimit). That leaves part of the FI settings panel untranslated (or key-path/fallback text, depending on i18n fallback behavior).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/i18n/fi.i18n.json` around lines 227 - 297, The Finnish locale file is
missing several option keys that are referenced in the refactored settings UI.
Within the options object in fi.i18n.json, add the missing configuration option
keys: outlookCalendarSyncInterval, verboseOutlookLogging, detailedEventsLogging,
debugLogging, and e2ePdfPreviewSizeLimit. Each key should follow the same
structure as the existing options in the block (such as report, flashFrame,
hardwareAcceleration, etc.) with appropriate title and description properties
translated to Finnish, placed before the closing of the options object to ensure
all settings are properly localized.
src/i18n/sv.i18n.json (1)

248-331: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Add the new Settings option keys used by the refactored General tab.

At Line 331, settings.options closes without keys now used by the UI (outlookCalendarSyncInterval, verboseOutlookLogging, detailedEventsLogging, debugLogging, e2ePdfPreviewSizeLimit). This leaves those entries untranslated for sv.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/i18n/sv.i18n.json` around lines 248 - 331, The Swedish translation file
is missing the new settings option keys required by the refactored General tab.
Add the following missing keys to the settings.options section in the
sv.i18n.json file before the closing brace: outlookCalendarSyncInterval,
verboseOutlookLogging, detailedEventsLogging, debugLogging, and
e2ePdfPreviewSizeLimit. Each key should include appropriate Swedish translations
for its title and description properties, following the same structure as the
existing options in the file.
src/i18n/uk-UA.i18n.json (1)

116-141: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

uk-UA options block is out of contract with the refactored settings UI.

Lines 116-141 include only four option groups, but current settings rendering expects many additional keys (for example report, flashFrame, hardwareAcceleration, minimizeOnClose, menubar, sidebar, videoCallWindowPersistence, outlookCalendarSyncInterval, e2ePdfPreviewSizeLimit). Most of the new settings will fall back to English instead of Ukrainian.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/i18n/uk-UA.i18n.json` around lines 116 - 141, The options block in the
uk-UA.i18n.json file is missing several translation keys that the settings UI
expects, including report, flashFrame, hardwareAcceleration, minimizeOnClose,
menubar, sidebar, videoCallWindowPersistence, outlookCalendarSyncInterval, and
e2ePdfPreviewSizeLimit. Add these missing option keys to the options block with
appropriate Ukrainian translations following the same structure and format as
the existing entries (title and description fields) to ensure all settings
display properly in Ukrainian instead of falling back to English.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/i18n/no.i18n.json`:
- Line 245: The settings.general key in the Norwegian translation file contains
the English word "General" instead of its Norwegian translation. Replace the
value "General" with the appropriate Norwegian translation for the general
settings tab to maintain locale consistency throughout the file.
- Around line 339-350: The Norwegian locale file is missing required translation
keys for `debugLogging` and `e2ePdfPreviewSizeLimit` in the `settings.options`
section. Add these two missing keys with appropriate Norwegian translations to
the file, ensuring they follow the same structure as the existing options shown
in the diff (with "title" and "description" properties). Place them before the
closing of the `settings.options` object to provide complete translations for
Norwegian users.

---

Outside diff comments:
In `@src/i18n/fi.i18n.json`:
- Around line 227-297: The Finnish locale file is missing several option keys
that are referenced in the refactored settings UI. Within the options object in
fi.i18n.json, add the missing configuration option keys:
outlookCalendarSyncInterval, verboseOutlookLogging, detailedEventsLogging,
debugLogging, and e2ePdfPreviewSizeLimit. Each key should follow the same
structure as the existing options in the block (such as report, flashFrame,
hardwareAcceleration, etc.) with appropriate title and description properties
translated to Finnish, placed before the closing of the options object to ensure
all settings are properly localized.

In `@src/i18n/hu.i18n.json`:
- Around line 332-336: The Hungarian locale file is incomplete and missing
translation entries for four new settings options. After the
verboseOutlookLogging entry in the settings.options section, add the missing
locale keys for outlookCalendarSyncInterval, detailedEventsLogging,
debugLogging, and e2ePdfPreviewSizeLimit. Each key should follow the same
structure as verboseOutlookLogging with title and description properties,
ensuring all new settings options referenced in the refactored panel have
corresponding Hungarian translations to prevent missing localization.

In `@src/i18n/pt-BR.i18n.json`:
- Around line 310-317: The pt-BR locale file is missing translation keys for new
settings controls that need to be localized. After the themeAppearance object in
the settings.options block, add the missing keys: outlookCalendarSyncInterval,
verboseOutlookLogging, detailedEventsLogging, debugLogging, and
e2ePdfPreviewSizeLimit. Each key should have appropriate nested properties
(title and description) with Portuguese Brazilian translations to match the
structure of other settings options like themeAppearance. This ensures all new
settings controls are properly localized in the pt-BR locale.

In `@src/i18n/sv.i18n.json`:
- Around line 248-331: The Swedish translation file is missing the new settings
option keys required by the refactored General tab. Add the following missing
keys to the settings.options section in the sv.i18n.json file before the closing
brace: outlookCalendarSyncInterval, verboseOutlookLogging,
detailedEventsLogging, debugLogging, and e2ePdfPreviewSizeLimit. Each key should
include appropriate Swedish translations for its title and description
properties, following the same structure as the existing options in the file.

In `@src/i18n/uk-UA.i18n.json`:
- Around line 116-141: The options block in the uk-UA.i18n.json file is missing
several translation keys that the settings UI expects, including report,
flashFrame, hardwareAcceleration, minimizeOnClose, menubar, sidebar,
videoCallWindowPersistence, outlookCalendarSyncInterval, and
e2ePdfPreviewSizeLimit. Add these missing option keys to the options block with
appropriate Ukrainian translations following the same structure and format as
the existing entries (title and description fields) to ensure all settings
display properly in Ukrainian instead of falling back to English.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 45704f3a-6029-4f6e-a329-398b8fad8d3f

📥 Commits

Reviewing files that changed from the base of the PR and between 163164f and 164c4f9.

📒 Files selected for processing (15)
  • src/i18n/de-DE.i18n.json
  • src/i18n/es.i18n.json
  • src/i18n/fi.i18n.json
  • src/i18n/fr.i18n.json
  • src/i18n/hu.i18n.json
  • src/i18n/ja.i18n.json
  • src/i18n/no.i18n.json
  • src/i18n/pl.i18n.json
  • src/i18n/pt-BR.i18n.json
  • src/i18n/ru.i18n.json
  • src/i18n/sv.i18n.json
  • src/i18n/tr-TR.i18n.json
  • src/i18n/uk-UA.i18n.json
  • src/i18n/zh-CN.i18n.json
  • src/i18n/zh-TW.i18n.json
✅ Files skipped from review due to trivial changes (1)
  • src/i18n/de-DE.i18n.json
📜 Review details
🔇 Additional comments (10)
src/i18n/es.i18n.json (1)

228-346: LGTM!

Also applies to: 374-374, 440-440

src/i18n/fr.i18n.json (1)

216-334: LGTM!

Also applies to: 362-362, 423-423

src/i18n/ja.i18n.json (1)

124-240: LGTM!

Also applies to: 266-266, 316-316

src/i18n/pl.i18n.json (1)

136-253: LGTM!

Also applies to: 279-279, 338-338

src/i18n/ru.i18n.json (1)

210-329: LGTM!

Also applies to: 357-357, 418-418

src/i18n/sv.i18n.json (1)

237-247: LGTM!

Also applies to: 358-358, 429-429

src/i18n/tr-TR.i18n.json (1)

124-241: LGTM!

Also applies to: 278-278, 322-322

src/i18n/uk-UA.i18n.json (1)

106-115: LGTM!

Also applies to: 165-165, 224-224

src/i18n/zh-CN.i18n.json (1)

157-273: LGTM!

Also applies to: 301-301, 352-352

src/i18n/zh-TW.i18n.json (1)

103-220: LGTM!

Also applies to: 239-239, 281-281

Comment thread src/i18n/no.i18n.json Outdated
Comment thread src/i18n/no.i18n.json
@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown

CodeRabbit flagged locales missing settings.options keys introduced by
the settings UX rewrite, causing controls to fall back to English.

- Add missing settings.options keys (debugLogging, e2ePdfPreviewSizeLimit,
  detailedEventsLogging, outlookCalendarSyncInterval, verboseOutlookLogging,
  telephonyServer, and more) to de-DE, fi, hu, no, pt-BR, sv, uk-UA
- Add missing settings.general tab label to ja and zh-CN
- Translate settings.general no: General -> Generelt

All 15 locales now match en.i18n.json (22 settings.options keys).
Address designer review on the General tab:
- Hide section heading labels (keep the grouped layout/order)
- Stack select/input controls below their description, full-width
- Move per-control caveats ("Requires app restart", "Reloads app on
  change") into dim c1 hint sublines instead of inline sentences
- Drop the redundant "System default uses..." browser sentence
- Render the video-calls description without bold product names
- Make Clear screen capture permissions a secondary danger button
- Use smart quotes around "do not ask again" in calling copy
- Group the PDF preview size limit next to Hardware acceleration

Full-width controls: SettingField wraps the control in a flex row so
Fuselage Select/InputBox (flex-grow:1) fill the column; drop the
maxWidth caps. Caveat sublines use fontScale c1 (regular) not micro
(which is bold). Strings updated across all populated locales.
@jeanfbrito

Copy link
Copy Markdown
Member Author

Addressed all UXDQA feedback from @joseph.pearce in 42326fd:

  1. ✅ Section titles no longer rendered (grouping/order preserved)
  2. ✅ Select/input controls now stacked below the description, full-width
  3. ✅ Secondary caveats moved to a dim hint subline — "Requires app restart" (Transparent window effect) and "Reloads app on change" (Hardware acceleration)
  4. ✅ Removed the trailing "System default uses your operating system settings." sentence from Default browser
  5. ✅ Removed bold from "Google Meet" / "Jitsi" in the Video calls description
  6. ✅ Clear screen capture permissions is now a secondary danger button
  7. ✅ Smart quotes around "do not ask again" in the calling copy
  8. ✅ PDF preview size limit moved to sit next to Hardware acceleration

i18n strings updated across all populated locales. Verified the rendered macOS panel 1:1 against the Figma UXDQA spec (full-width selects/inputs included).

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/ui/components/SettingsView/features/E2ePdfPreviewSizeLimit.tsx`:
- Around line 47-55: The numeric input in E2ePdfPreviewSizeLimit is expanding to
full width because it is rendered inside SettingField’s full-width layout.
Update the E2ePdfPreviewSizeLimit/InputBox usage so this number field stays
compact, either by overriding its width or by wrapping it in a width-constrained
container, and keep the fix scoped to the E2ePdfPreviewSizeLimit component and
the SettingField-based layout it uses.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 529a6fb1-3829-4a92-aa09-f08f5adaf585

📥 Commits

Reviewing files that changed from the base of the PR and between 4593e07 and 42326fd.

📒 Files selected for processing (30)
  • src/i18n/ar.i18n.json
  • src/i18n/de-DE.i18n.json
  • src/i18n/en.i18n.json
  • src/i18n/es.i18n.json
  • src/i18n/fi.i18n.json
  • src/i18n/fr.i18n.json
  • src/i18n/hu.i18n.json
  • src/i18n/it-IT.i18n.json
  • src/i18n/ja.i18n.json
  • src/i18n/nb-NO.i18n.json
  • src/i18n/nn.i18n.json
  • src/i18n/no.i18n.json
  • src/i18n/pl.i18n.json
  • src/i18n/pt-BR.i18n.json
  • src/i18n/ru.i18n.json
  • src/i18n/se.i18n.json
  • src/i18n/sv.i18n.json
  • src/i18n/tr-TR.i18n.json
  • src/i18n/uk-UA.i18n.json
  • src/i18n/zh-CN.i18n.json
  • src/i18n/zh-TW.i18n.json
  • src/i18n/zh.i18n.json
  • src/ui/components/SettingsView/GeneralTab.tsx
  • src/ui/components/SettingsView/features/ClearPermittedScreenCaptureServers.tsx
  • src/ui/components/SettingsView/features/E2ePdfPreviewSizeLimit.tsx
  • src/ui/components/SettingsView/features/HardwareAcceleration.tsx
  • src/ui/components/SettingsView/features/InternalVideoChatWindow.tsx
  • src/ui/components/SettingsView/features/OutlookCalendarSyncInterval.tsx
  • src/ui/components/SettingsView/features/SettingField.tsx
  • src/ui/components/SettingsView/features/TransparentWindow.tsx
💤 Files with no reviewable changes (1)
  • src/ui/components/SettingsView/features/OutlookCalendarSyncInterval.tsx
✅ Files skipped from review due to trivial changes (8)
  • src/i18n/ar.i18n.json
  • src/i18n/nn.i18n.json
  • src/ui/components/SettingsView/features/ClearPermittedScreenCaptureServers.tsx
  • src/i18n/nb-NO.i18n.json
  • src/i18n/en.i18n.json
  • src/i18n/se.i18n.json
  • src/i18n/es.i18n.json
  • src/i18n/uk-UA.i18n.json
🚧 Files skipped from review as they are similar to previous changes (12)
  • src/i18n/pl.i18n.json
  • src/i18n/zh-CN.i18n.json
  • src/i18n/de-DE.i18n.json
  • src/i18n/tr-TR.i18n.json
  • src/i18n/ru.i18n.json
  • src/i18n/sv.i18n.json
  • src/i18n/fr.i18n.json
  • src/i18n/pt-BR.i18n.json
  • src/i18n/hu.i18n.json
  • src/i18n/fi.i18n.json
  • src/i18n/zh-TW.i18n.json
  • src/i18n/ja.i18n.json
📜 Review details
⏰ Context from checks skipped due to timeout. (6)
  • GitHub Check: check (macos-latest)
  • GitHub Check: check (windows-latest)
  • GitHub Check: check (ubuntu-latest)
  • GitHub Check: build (windows-latest, windows)
  • GitHub Check: build (ubuntu-latest, linux)
  • GitHub Check: build (macos-latest, mac)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{tsx,ts}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{tsx,ts}: MANDATORY: Use Fuselage components for all UI work. Only create custom components when Fuselage doesn't provide what's needed
Import UI components from @rocket.chat/fuselage and check Theme.d.ts for valid color tokens
Use React functional components with hooks
Use PascalCase for component file names

Files:

  • src/ui/components/SettingsView/features/TransparentWindow.tsx
  • src/ui/components/SettingsView/features/InternalVideoChatWindow.tsx
  • src/ui/components/SettingsView/features/HardwareAcceleration.tsx
  • src/ui/components/SettingsView/features/SettingField.tsx
  • src/ui/components/SettingsView/features/E2ePdfPreviewSizeLimit.tsx
  • src/ui/components/SettingsView/GeneralTab.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Redux actions must follow FSA (Flux Standard Action) pattern
Avoid unnecessary comments — write self-documenting code through clear naming
Always verify libraries by checking official docs and .d.ts files in node_modules/. Never assume props, tokens, or APIs work without verification
Avoid subjective descriptors ('smart', 'excellent', 'dumb') in documentation and comments
Use measurable descriptions in code documentation: 'reduced memory usage', 'improved by X%' instead of subjective claims
NEVER invent metrics — don't include estimated time spent or speculated user counts. Only include numbers from actual logs, error messages, or documented sources

Files:

  • src/ui/components/SettingsView/features/TransparentWindow.tsx
  • src/ui/components/SettingsView/features/InternalVideoChatWindow.tsx
  • src/ui/components/SettingsView/features/HardwareAcceleration.tsx
  • src/ui/components/SettingsView/features/SettingField.tsx
  • src/ui/components/SettingsView/features/E2ePdfPreviewSizeLimit.tsx
  • src/ui/components/SettingsView/GeneralTab.tsx
🔇 Additional comments (8)
src/i18n/no.i18n.json (1)

271-272: LGTM!

Also applies to: 281-281, 307-307, 331-332

src/ui/components/SettingsView/features/TransparentWindow.tsx (1)

59-63: Same color='hint' token concern as flagged in HardwareAcceleration.tsx (lines 60-64); this markup is duplicated here.

src/ui/components/SettingsView/GeneralTab.tsx (1)

21-62: LGTM!

src/ui/components/SettingsView/features/SettingField.tsx (1)

26-34: LGTM!

src/ui/components/SettingsView/features/InternalVideoChatWindow.tsx (1)

64-64: LGTM!

src/i18n/it-IT.i18n.json (1)

13-14: LGTM!

src/i18n/zh.i18n.json (1)

13-14: LGTM!

src/ui/components/SettingsView/features/HardwareAcceleration.tsx (1)

60-64: 📐 Maintainability & Code Quality

The color='hint' prop is valid.

The Box component accepts semantic tokens. According to the Fuselage design system, hint is a defined semantic color category (resolving to font-hint). The usage of color='hint' is consistent with the library's documentation for applying semantic text colors.

Snippet showing the final state of code at these lines

      <FieldRow>
        <Box fontScale='c1' color='hint'>
          {t('settings.options.hardwareAcceleration.hint')}
        </Box>
      </FieldRow>

Comment thread src/ui/components/SettingsView/features/E2ePdfPreviewSizeLimit.tsx
Route every settings row through Fuselage's canonical
FieldLabel / FieldDescription / FieldHint stack instead of
misusing FieldHint for description text and hand-rolling hints
as <Box fontScale='c1'>.

- Add shared ToggleField component (label+toggle row, then
  FieldDescription, optional FieldHint, children escape hatch)
- Add description prop to SettingField (Select/Input rows)
- Migrate all 13 toggle and 5 select feature components
- Split the "App restarts when this option is changed" sentence
  out of videoCallScreenCaptureFallback.description into a
  dedicated hint key, across all 22 locales
- Backfill option keys missing from ar, it-IT, nb-NO, nn, se, zh
- ScreenCaptureFallback: replace Math.random id with useId

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/i18n/it-IT.i18n.json`:
- Around line 39-42: The minimize-on-close hint text is reversed: the
`minimizeOnClose.disabledHint` message in the i18n entry currently tells users
the tray icon must be disabled, but it should state the prerequisite consistent
with the close-to-tray behavior used elsewhere. Update the
`minimizeOnClose.disabledHint` string in the `it-IT.i18n.json` translation so it
clearly says the tray icon must be enabled, and keep the wording aligned with
the related `minimizeOnClose` settings copy.

In `@src/ui/components/SettingsView/features/ToggleField.tsx`:
- Around line 1-8: The shared field component is still importing and using
FieldDescription instead of the migrated FieldHint API, so update ToggleField to
remove FieldDescription and use FieldHint for all field-level descriptive text.
Keep the import list in sync with the component usage, and make sure any
description JSX inside the ToggleField implementation is switched to FieldHint
so it matches current Fuselage standards.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b82b12c2-32bf-4501-ad5e-2d9cd4feb63b

📥 Commits

Reviewing files that changed from the base of the PR and between 42326fd and 74079a3.

📒 Files selected for processing (41)
  • src/i18n/ar.i18n.json
  • src/i18n/de-DE.i18n.json
  • src/i18n/en.i18n.json
  • src/i18n/es.i18n.json
  • src/i18n/fi.i18n.json
  • src/i18n/fr.i18n.json
  • src/i18n/hu.i18n.json
  • src/i18n/it-IT.i18n.json
  • src/i18n/ja.i18n.json
  • src/i18n/nb-NO.i18n.json
  • src/i18n/nn.i18n.json
  • src/i18n/no.i18n.json
  • src/i18n/pl.i18n.json
  • src/i18n/pt-BR.i18n.json
  • src/i18n/ru.i18n.json
  • src/i18n/se.i18n.json
  • src/i18n/sv.i18n.json
  • src/i18n/tr-TR.i18n.json
  • src/i18n/uk-UA.i18n.json
  • src/i18n/zh-CN.i18n.json
  • src/i18n/zh-TW.i18n.json
  • src/i18n/zh.i18n.json
  • src/ui/components/SettingsView/features/AvailableBrowsers.tsx
  • src/ui/components/SettingsView/features/E2ePdfPreviewSizeLimit.tsx
  • src/ui/components/SettingsView/features/FlashFrame.tsx
  • src/ui/components/SettingsView/features/HardwareAcceleration.tsx
  • src/ui/components/SettingsView/features/InternalVideoChatWindow.tsx
  • src/ui/components/SettingsView/features/MenuBar.tsx
  • src/ui/components/SettingsView/features/MinimizeOnClose.tsx
  • src/ui/components/SettingsView/features/NTLMCredentials.tsx
  • src/ui/components/SettingsView/features/OutlookCalendarSyncInterval.tsx
  • src/ui/components/SettingsView/features/ReportErrors.tsx
  • src/ui/components/SettingsView/features/ScreenCaptureFallback.tsx
  • src/ui/components/SettingsView/features/SettingField.tsx
  • src/ui/components/SettingsView/features/SideBar.tsx
  • src/ui/components/SettingsView/features/TelephonyServer.tsx
  • src/ui/components/SettingsView/features/ThemeAppearance.tsx
  • src/ui/components/SettingsView/features/ToggleField.tsx
  • src/ui/components/SettingsView/features/TransparentWindow.tsx
  • src/ui/components/SettingsView/features/TrayIcon.tsx
  • src/ui/components/SettingsView/features/VideoCallWindowPersistence.tsx
✅ Files skipped from review due to trivial changes (10)
  • src/ui/components/SettingsView/features/TelephonyServer.tsx
  • src/i18n/nb-NO.i18n.json
  • src/i18n/pl.i18n.json
  • src/i18n/uk-UA.i18n.json
  • src/i18n/hu.i18n.json
  • src/i18n/nn.i18n.json
  • src/i18n/fr.i18n.json
  • src/i18n/zh.i18n.json
  • src/i18n/se.i18n.json
  • src/i18n/ar.i18n.json
🚧 Files skipped from review as they are similar to previous changes (16)
  • src/ui/components/SettingsView/features/E2ePdfPreviewSizeLimit.tsx
  • src/i18n/de-DE.i18n.json
  • src/i18n/ja.i18n.json
  • src/i18n/tr-TR.i18n.json
  • src/i18n/ru.i18n.json
  • src/i18n/zh-CN.i18n.json
  • src/i18n/pt-BR.i18n.json
  • src/ui/components/SettingsView/features/SettingField.tsx
  • src/i18n/en.i18n.json
  • src/i18n/zh-TW.i18n.json
  • src/i18n/sv.i18n.json
  • src/ui/components/SettingsView/features/TrayIcon.tsx
  • src/i18n/no.i18n.json
  • src/i18n/es.i18n.json
  • src/i18n/fi.i18n.json
  • src/ui/components/SettingsView/features/MinimizeOnClose.tsx
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: check (windows-latest)
  • GitHub Check: check (ubuntu-latest)
  • GitHub Check: build (ubuntu-latest, linux)
  • GitHub Check: build (windows-latest, windows)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{tsx,ts}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{tsx,ts}: MANDATORY: Use Fuselage components for all UI work. Only create custom components when Fuselage doesn't provide what's needed
Import UI components from @rocket.chat/fuselage and check Theme.d.ts for valid color tokens
Use React functional components with hooks
Use PascalCase for component file names

Files:

  • src/ui/components/SettingsView/features/AvailableBrowsers.tsx
  • src/ui/components/SettingsView/features/ThemeAppearance.tsx
  • src/ui/components/SettingsView/features/OutlookCalendarSyncInterval.tsx
  • src/ui/components/SettingsView/features/FlashFrame.tsx
  • src/ui/components/SettingsView/features/NTLMCredentials.tsx
  • src/ui/components/SettingsView/features/ToggleField.tsx
  • src/ui/components/SettingsView/features/InternalVideoChatWindow.tsx
  • src/ui/components/SettingsView/features/ReportErrors.tsx
  • src/ui/components/SettingsView/features/TransparentWindow.tsx
  • src/ui/components/SettingsView/features/ScreenCaptureFallback.tsx
  • src/ui/components/SettingsView/features/VideoCallWindowPersistence.tsx
  • src/ui/components/SettingsView/features/SideBar.tsx
  • src/ui/components/SettingsView/features/MenuBar.tsx
  • src/ui/components/SettingsView/features/HardwareAcceleration.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Redux actions must follow FSA (Flux Standard Action) pattern
Avoid unnecessary comments — write self-documenting code through clear naming
Always verify libraries by checking official docs and .d.ts files in node_modules/. Never assume props, tokens, or APIs work without verification
Avoid subjective descriptors ('smart', 'excellent', 'dumb') in documentation and comments
Use measurable descriptions in code documentation: 'reduced memory usage', 'improved by X%' instead of subjective claims
NEVER invent metrics — don't include estimated time spent or speculated user counts. Only include numbers from actual logs, error messages, or documented sources

Files:

  • src/ui/components/SettingsView/features/AvailableBrowsers.tsx
  • src/ui/components/SettingsView/features/ThemeAppearance.tsx
  • src/ui/components/SettingsView/features/OutlookCalendarSyncInterval.tsx
  • src/ui/components/SettingsView/features/FlashFrame.tsx
  • src/ui/components/SettingsView/features/NTLMCredentials.tsx
  • src/ui/components/SettingsView/features/ToggleField.tsx
  • src/ui/components/SettingsView/features/InternalVideoChatWindow.tsx
  • src/ui/components/SettingsView/features/ReportErrors.tsx
  • src/ui/components/SettingsView/features/TransparentWindow.tsx
  • src/ui/components/SettingsView/features/ScreenCaptureFallback.tsx
  • src/ui/components/SettingsView/features/VideoCallWindowPersistence.tsx
  • src/ui/components/SettingsView/features/SideBar.tsx
  • src/ui/components/SettingsView/features/MenuBar.tsx
  • src/ui/components/SettingsView/features/HardwareAcceleration.tsx
🔇 Additional comments (15)
src/i18n/it-IT.i18n.json (1)

11-38: LGTM!

Also applies to: 44-119

src/ui/components/SettingsView/features/AvailableBrowsers.tsx (1)

68-82: LGTM!

src/ui/components/SettingsView/features/ToggleField.tsx (1)

45-64: LGTM!

src/ui/components/SettingsView/features/ReportErrors.tsx (1)

36-48: LGTM!

src/ui/components/SettingsView/features/ScreenCaptureFallback.tsx (1)

38-38: LGTM!

Also applies to: 50-59

src/ui/components/SettingsView/features/SideBar.tsx (1)

40-52: LGTM!

src/ui/components/SettingsView/features/VideoCallWindowPersistence.tsx (1)

39-46: LGTM!

src/ui/components/SettingsView/features/TransparentWindow.tsx (1)

36-44: LGTM!

src/ui/components/SettingsView/features/ThemeAppearance.tsx (1)

57-57: 🎯 Functional Correctness

SettingField correctly supports the description prop.

Verification of src/ui/components/SettingsView/features/SettingField.tsx confirms that description is explicitly defined as a required prop (ReactNode) and is rendered via the FieldDescription component. The usage in ThemeAppearance.tsx is valid and the helper text will display correctly.

src/ui/components/SettingsView/features/FlashFrame.tsx (1)

37-59: LGTM!

src/ui/components/SettingsView/features/HardwareAcceleration.tsx (1)

37-45: LGTM!

src/ui/components/SettingsView/features/MenuBar.tsx (1)

40-52: LGTM!

src/ui/components/SettingsView/features/NTLMCredentials.tsx (1)

54-74: LGTM!

src/ui/components/SettingsView/features/OutlookCalendarSyncInterval.tsx (1)

48-64: LGTM!

src/ui/components/SettingsView/features/InternalVideoChatWindow.tsx (1)

42-46: 🎯 Functional Correctness

Translation strings are plain text and do not require <Trans> markup.

Verification of src/i18n/en.i18n.json confirms that both settings.options.internalVideoChatWindow.description and settings.options.internalVideoChatWindow.masDescription contain only plain text without any HTML tags or component placeholders. The usage of t(...) in InternalVideoChatWindow.tsx is correct, as no embedded markup is present in the source translations that would render as literal text.

			> Likely an incorrect or invalid review comment.

Comment thread src/i18n/it-IT.i18n.json
Comment thread src/ui/components/SettingsView/features/ToggleField.tsx
Box color= prepends the font- prefix internally, so passing
color='font-default' produced an invalid token and logged
'invalid color: font-default' on every render. Use the bare
'default' token at all 5 call sites (MarkdownContent, DocumentViewer,
PdfContent, TopBar).
- Wrap serverFilterOptions and the filtered downloads list in
  useMemo over a stable downloads slice, eliminating the react-redux
  'Selector returned a different result' rerender warning
- Add aria-label to the icon-only arrow-back IconButton in
  DownloadsManagerView and SettingsView for screen-reader access
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant