Skip to content

Conversation

@gabriellsh
Copy link
Member

@gabriellsh gabriellsh commented Nov 26, 2025

Proposed changes (including videos or screenshots)

Issue(s)

VGA-93

Steps to test or reproduce

Further comments

Summary by CodeRabbit

  • Refactor
    • Consolidated scrollbar and virtualized-scroll components into a centralized UI package and standardized their usage across the app.
  • Chores
    • Exposed the scrollbar components from the shared UI package and declared required scrolling dependencies for consumers.

✏️ Tip: You can customize this high-level summary in your review settings.

- Move CustomScrollbars, VirtualizedScrollbars, and BaseScrollbars to packages/ui-client/src/components/CustomScrollbars
- Add overlayscrollbars and overlayscrollbars-react as peerDependencies and devDependencies
- Export CustomScrollbars from ui-client components index
- Build package successfully
…client

- Update 36 files to import CustomScrollbars, VirtualizedScrollbars, and OverlayScrollbars type from @rocket.chat/ui-client
- Replace all relative path imports with package import
- Delete CustomScrollbars directory from apps/meteor/client/components/
- All imports have been migrated to @rocket.chat/ui-client
@gabriellsh gabriellsh requested a review from a team as a code owner November 26, 2025 18:32
@dionisio-bot
Copy link
Contributor

dionisio-bot bot commented Nov 26, 2025

Looks like this PR is not ready to merge, because of the following issues:

  • This PR is targeting the wrong base branch. It should target 7.14.0, but it targets 7.13.0

Please fix the issues and try again

If you have any trouble, please check the PR guidelines

@changeset-bot
Copy link

changeset-bot bot commented Nov 26, 2025

⚠️ No Changeset found

Latest commit: f9a6c58

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@gabriellsh gabriellsh added this to the 7.14.0 milestone Nov 26, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 26, 2025

Walkthrough

Consolidates scrollbar components into @rocket.chat/ui-client by changing import paths across the Meteor app, adding exports in packages/ui-client, and adding Overlayscrollbars dependencies to packages/ui-client/package.json. No runtime logic or public API signatures were modified.

Changes

Cohort / File(s) Summary
Meteor app — updated imports
apps/meteor/client/NavBarV2/NavBarSearch/NavBarSearchListbox.tsx, apps/meteor/client/components/GenericTable/GenericTable.tsx, apps/meteor/client/components/Page/PageScrollableContent.tsx, apps/meteor/client/components/Sidebar/Content.tsx, apps/meteor/client/sidebar/RoomList/RoomList.tsx, apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx, apps/meteor/client/sidebar/search/SearchList.tsx, apps/meteor/client/sidebarv2/RoomList/RoomList.tsx, apps/meteor/client/sidebarv2/header/MatrixFederationSearch/FederatedRoomList.tsx, apps/meteor/client/views/admin/integrations/outgoing/history/OutgoingWebhookHistoryPage.tsx, apps/meteor/client/views/composer/EmojiPicker/CategoriesResult.tsx, apps/meteor/client/views/composer/EmojiPicker/SearchingResult.tsx, apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppInstances/AppInstances.tsx, apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppLogs/AppLogs.tsx, apps/meteor/client/views/navigation/sidebar/RoomList/RoomList.tsx, apps/meteor/client/views/navigation/sidepanel/SidePanel.tsx, apps/meteor/client/views/omnichannel/cannedResponses/contextualBar/CannedResponse/CannedResponseList.tsx, apps/meteor/client/views/omnichannel/contactHistory/MessageList/ContactHistoryMessagesList.tsx, apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoChannels/ContactInfoChannels.tsx, apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoHistory/ContactInfoHistory.tsx, apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoHistory/ContactInfoHistoryMessages.tsx, apps/meteor/client/views/outlookCalendar/OutlookEventsList/OutlookEventsList.tsx, apps/meteor/client/views/room/body/RoomBody.tsx, apps/meteor/client/views/room/body/RoomBodyV2.tsx, apps/meteor/client/views/room/composer/ComposerBoxPopup.tsx, apps/meteor/client/views/room/contextualBar/Discussions/DiscussionsList.tsx, apps/meteor/client/views/room/contextualBar/MessageListTab.tsx, apps/meteor/client/views/room/contextualBar/MessageSearchTab/components/MessageSearch.tsx, apps/meteor/client/views/room/contextualBar/RoomFiles/RoomFiles.tsx, apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx, apps/meteor/client/views/room/contextualBar/Threads/ThreadList.tsx, apps/meteor/client/views/room/contextualBar/Threads/components/ThreadMessageList.tsx, apps/meteor/client/views/room/contextualBar/VideoConference/VideoConfList/VideoConfList.tsx, apps/meteor/client/views/teams/contextualBar/channels/TeamsChannels.tsx
Replaced local relative imports of CustomScrollbars/VirtualizedScrollbars with imports from @rocket.chat/ui-client. No logic changes.
ui-client exports
packages/ui-client/src/components/index.ts
Added export * from './CustomScrollbars' to re-export scrollbar components from the package root.
ui-client dependencies
packages/ui-client/package.json
Added overlayscrollbars and overlayscrollbars-react to dependencies and to peerDependencies.
CustomScrollbars files — formatting
packages/ui-client/src/components/CustomScrollbars/BaseScrollbars.tsx, packages/ui-client/src/components/CustomScrollbars/CustomScrollbars.tsx, packages/ui-client/src/components/CustomScrollbars/VirtualizedScrollbars.tsx, packages/ui-client/src/components/CustomScrollbars/index.ts
Minor whitespace/trailing newline additions; no behavioral changes.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

  • Changes are highly repetitive (import path swaps and a single re-export + deps).
  • Areas to double-check:
    • That all updated import paths compile and the package export surface includes the expected components.
    • package.json dependency/peerDependency versioning and potential duplicate resolutions.
    • Any instances where the local CustomScrollbars had diverging exports or implicit behaviors not covered by the re-export.

Suggested labels

stat: ready to merge, stat: QA assured

Suggested reviewers

  • ggazzo
  • tassoevan

Poem

🐰 I hopped through code with tiny paws,
Trading paths for package laws.
Scrollbars snug in their new den,
Imports fixed — hop back again! 🥕✨

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title clearly and specifically describes the main change: moving CustomScrollbars and VirtualizedScrollbars components to the ui-client package, which aligns with the code changes across all 31 modified files.
Linked Issues check ✅ Passed The PR fulfills the VGA-93 objective to move CustomScrollbars and VirtualizedScrollbars to ui-client by updating 31 files with new imports from @rocket.chat/ui-client and exporting these components from the package.
Out of Scope Changes check ✅ Passed All changes are in-scope: 29 files update imports to use the new ui-client package locations, and 2 files add dependencies and exports in ui-client itself. Minor formatting changes (trailing newlines) are incidental to the refactoring.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/moveCustomScrollbars

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 0b30a42 and f9a6c58.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (5)
  • apps/meteor/client/views/omnichannel/cannedResponses/contextualBar/CannedResponse/CannedResponseList.tsx (1 hunks)
  • apps/meteor/client/views/room/body/RoomBody.tsx (1 hunks)
  • apps/meteor/client/views/room/body/RoomBodyV2.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/MessageListTab.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/Threads/ThreadList.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
  • apps/meteor/client/views/omnichannel/cannedResponses/contextualBar/CannedResponse/CannedResponseList.tsx
  • apps/meteor/client/views/room/contextualBar/MessageListTab.tsx
  • apps/meteor/client/views/room/contextualBar/Threads/ThreadList.tsx
  • apps/meteor/client/views/room/body/RoomBodyV2.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)

**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation

Files:

  • apps/meteor/client/views/room/body/RoomBody.tsx
🧠 Learnings (1)
📚 Learning: 2025-10-28T16:53:42.761Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37205
File: ee/packages/federation-matrix/src/FederationMatrix.ts:296-301
Timestamp: 2025-10-28T16:53:42.761Z
Learning: In the Rocket.Chat federation-matrix integration (ee/packages/federation-matrix/), the createRoom method from rocket.chat/federation-sdk will support a 4-argument signature (userId, roomName, visibility, displayName) in newer versions. Code using this 4-argument call is forward-compatible with planned library updates and should not be flagged as an error.

Applied to files:

  • apps/meteor/client/views/room/body/RoomBody.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: 📦 Build Packages
  • GitHub Check: CodeQL-Build
  • GitHub Check: CodeQL-Build
🔇 Additional comments (1)
apps/meteor/client/views/room/body/RoomBody.tsx (1)

2-2: CustomScrollbars import from @rocket.chat/ui-client is properly exported and correctly used

Verification confirms the export exists at packages/ui-client/src/components/index.ts and is re-exported from the main index. The import in RoomBody.tsx at line 2 is correctly destructured, and the component usage at lines 252–271 remains structurally intact.


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 and usage tips.

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: 0

Caution

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

⚠️ Outside diff range comments (1)
apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoHistory/ContactInfoHistoryMessages.tsx (1)

16-128: Fix undefined history variable in render condition

The VirtualizedScrollbars import migration looks fine, but the render guard uses history.length even though there is no history variable in this component. This will cause a runtime error when the condition is evaluated. The intent clearly matches messages from useRecordList.

Consider updating the condition as follows:

-				<Box flexGrow={1} flexShrink={1} overflow='hidden' display='flex' ref={ref}>
-					{!error && totalItemCount > 0 && history.length > 0 && (
+				<Box flexGrow={1} flexShrink={1} overflow='hidden' display='flex' ref={ref}>
+					{!error && totalItemCount > 0 && messages.length > 0 && (

This keeps the existing behavior while using the correct data source.

🧹 Nitpick comments (1)
apps/meteor/client/views/omnichannel/contactHistory/MessageList/ContactHistoryMessagesList.tsx (1)

15-147: Import migration is fine; consider fixing history.length condition

  • Importing VirtualizedScrollbars from @rocket.chat/ui-client is consistent with the PR’s goal and matches existing usage.
  • In the render condition (Line 118), history.length > 0 appears to reference the global browser history rather than the message data and is effectively unrelated to the list. It would be clearer (and less surprising) to either drop that check or replace it with something data-related (for example messages.length > 0), depending on the intent.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between a20c1cc and 0b30a42.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (40)
  • apps/meteor/client/NavBarV2/NavBarSearch/NavBarSearchListbox.tsx (1 hunks)
  • apps/meteor/client/components/GenericTable/GenericTable.tsx (1 hunks)
  • apps/meteor/client/components/Page/PageScrollableContent.tsx (1 hunks)
  • apps/meteor/client/components/Sidebar/Content.tsx (1 hunks)
  • apps/meteor/client/sidebar/RoomList/RoomList.tsx (1 hunks)
  • apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx (1 hunks)
  • apps/meteor/client/sidebar/search/SearchList.tsx (1 hunks)
  • apps/meteor/client/sidebarv2/RoomList/RoomList.tsx (1 hunks)
  • apps/meteor/client/sidebarv2/header/MatrixFederationSearch/FederatedRoomList.tsx (1 hunks)
  • apps/meteor/client/views/admin/integrations/outgoing/history/OutgoingWebhookHistoryPage.tsx (1 hunks)
  • apps/meteor/client/views/composer/EmojiPicker/CategoriesResult.tsx (1 hunks)
  • apps/meteor/client/views/composer/EmojiPicker/SearchingResult.tsx (1 hunks)
  • apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppInstances/AppInstances.tsx (1 hunks)
  • apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppLogs/AppLogs.tsx (1 hunks)
  • apps/meteor/client/views/navigation/sidebar/RoomList/RoomList.tsx (1 hunks)
  • apps/meteor/client/views/navigation/sidepanel/SidePanel.tsx (1 hunks)
  • apps/meteor/client/views/omnichannel/cannedResponses/contextualBar/CannedResponse/CannedResponseList.tsx (1 hunks)
  • apps/meteor/client/views/omnichannel/contactHistory/MessageList/ContactHistoryMessagesList.tsx (1 hunks)
  • apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoChannels/ContactInfoChannels.tsx (1 hunks)
  • apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoHistory/ContactInfoHistory.tsx (1 hunks)
  • apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoHistory/ContactInfoHistoryMessages.tsx (1 hunks)
  • apps/meteor/client/views/outlookCalendar/OutlookEventsList/OutlookEventsList.tsx (1 hunks)
  • apps/meteor/client/views/room/body/RoomBody.tsx (1 hunks)
  • apps/meteor/client/views/room/body/RoomBodyV2.tsx (1 hunks)
  • apps/meteor/client/views/room/composer/ComposerBoxPopup.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/Discussions/DiscussionsList.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/MessageListTab.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/MessageSearchTab/components/MessageSearch.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/RoomFiles/RoomFiles.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/Threads/ThreadList.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/Threads/components/ThreadMessageList.tsx (1 hunks)
  • apps/meteor/client/views/room/contextualBar/VideoConference/VideoConfList/VideoConfList.tsx (1 hunks)
  • apps/meteor/client/views/teams/contextualBar/channels/TeamsChannels.tsx (1 hunks)
  • packages/ui-client/package.json (2 hunks)
  • packages/ui-client/src/components/CustomScrollbars/BaseScrollbars.tsx (1 hunks)
  • packages/ui-client/src/components/CustomScrollbars/CustomScrollbars.tsx (1 hunks)
  • packages/ui-client/src/components/CustomScrollbars/VirtualizedScrollbars.tsx (1 hunks)
  • packages/ui-client/src/components/CustomScrollbars/index.ts (1 hunks)
  • packages/ui-client/src/components/index.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)

**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation

Files:

  • packages/ui-client/src/components/CustomScrollbars/BaseScrollbars.tsx
  • apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoHistory/ContactInfoHistory.tsx
  • apps/meteor/client/views/composer/EmojiPicker/CategoriesResult.tsx
  • apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoHistory/ContactInfoHistoryMessages.tsx
  • apps/meteor/client/views/room/contextualBar/VideoConference/VideoConfList/VideoConfList.tsx
  • apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppLogs/AppLogs.tsx
  • apps/meteor/client/views/navigation/sidebar/RoomList/RoomList.tsx
  • packages/ui-client/src/components/CustomScrollbars/index.ts
  • apps/meteor/client/components/GenericTable/GenericTable.tsx
  • packages/ui-client/src/components/index.ts
  • apps/meteor/client/views/omnichannel/contactHistory/MessageList/ContactHistoryMessagesList.tsx
  • apps/meteor/client/views/room/contextualBar/Discussions/DiscussionsList.tsx
  • apps/meteor/client/views/navigation/sidepanel/SidePanel.tsx
  • apps/meteor/client/views/teams/contextualBar/channels/TeamsChannels.tsx
  • apps/meteor/client/sidebarv2/RoomList/RoomList.tsx
  • apps/meteor/client/sidebarv2/header/MatrixFederationSearch/FederatedRoomList.tsx
  • apps/meteor/client/views/outlookCalendar/OutlookEventsList/OutlookEventsList.tsx
  • apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoChannels/ContactInfoChannels.tsx
  • apps/meteor/client/views/composer/EmojiPicker/SearchingResult.tsx
  • apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx
  • apps/meteor/client/views/room/contextualBar/MessageListTab.tsx
  • apps/meteor/client/components/Sidebar/Content.tsx
  • apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx
  • packages/ui-client/src/components/CustomScrollbars/CustomScrollbars.tsx
  • apps/meteor/client/views/room/body/RoomBody.tsx
  • packages/ui-client/src/components/CustomScrollbars/VirtualizedScrollbars.tsx
  • apps/meteor/client/views/room/contextualBar/Threads/ThreadList.tsx
  • apps/meteor/client/views/room/body/RoomBodyV2.tsx
  • apps/meteor/client/views/admin/integrations/outgoing/history/OutgoingWebhookHistoryPage.tsx
  • apps/meteor/client/views/room/contextualBar/MessageSearchTab/components/MessageSearch.tsx
  • apps/meteor/client/sidebar/search/SearchList.tsx
  • apps/meteor/client/views/room/composer/ComposerBoxPopup.tsx
  • apps/meteor/client/NavBarV2/NavBarSearch/NavBarSearchListbox.tsx
  • apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppInstances/AppInstances.tsx
  • apps/meteor/client/components/Page/PageScrollableContent.tsx
  • apps/meteor/client/views/room/contextualBar/RoomFiles/RoomFiles.tsx
  • apps/meteor/client/views/omnichannel/cannedResponses/contextualBar/CannedResponse/CannedResponseList.tsx
  • apps/meteor/client/sidebar/RoomList/RoomList.tsx
  • apps/meteor/client/views/room/contextualBar/Threads/components/ThreadMessageList.tsx
🧠 Learnings (5)
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/page-objects/**/*.ts : Utilize existing page objects pattern from `apps/meteor/tests/e2e/page-objects/`

Applied to files:

  • apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppLogs/AppLogs.tsx
  • apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppInstances/AppInstances.tsx
  • apps/meteor/client/components/Page/PageScrollableContent.tsx
📚 Learning: 2025-10-28T16:53:42.761Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37205
File: ee/packages/federation-matrix/src/FederationMatrix.ts:296-301
Timestamp: 2025-10-28T16:53:42.761Z
Learning: In the Rocket.Chat federation-matrix integration (ee/packages/federation-matrix/), the createRoom method from rocket.chat/federation-sdk will support a 4-argument signature (userId, roomName, visibility, displayName) in newer versions. Code using this 4-argument call is forward-compatible with planned library updates and should not be flagged as an error.

Applied to files:

  • apps/meteor/client/views/navigation/sidebar/RoomList/RoomList.tsx
  • apps/meteor/client/sidebarv2/RoomList/RoomList.tsx
  • apps/meteor/client/sidebarv2/header/MatrixFederationSearch/FederatedRoomList.tsx
  • apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx
  • apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx
  • apps/meteor/client/views/room/body/RoomBody.tsx
  • apps/meteor/client/views/room/body/RoomBodyV2.tsx
  • apps/meteor/client/views/room/contextualBar/RoomFiles/RoomFiles.tsx
📚 Learning: 2025-09-19T15:15:04.642Z
Learnt from: rodrigok
Repo: RocketChat/Rocket.Chat PR: 36991
File: apps/meteor/server/services/federation/infrastructure/rocket-chat/adapters/Settings.ts:219-221
Timestamp: 2025-09-19T15:15:04.642Z
Learning: The Federation_Matrix_homeserver_domain setting in apps/meteor/server/services/federation/infrastructure/rocket-chat/adapters/Settings.ts is part of the old federation system and is being deprecated/removed, so configuration issues with this setting should not be flagged for improvement.

Applied to files:

  • apps/meteor/client/sidebarv2/header/MatrixFederationSearch/FederatedRoomList.tsx
  • apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx
📚 Learning: 2025-11-04T16:49:19.107Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37377
File: apps/meteor/ee/server/hooks/federation/index.ts:86-88
Timestamp: 2025-11-04T16:49:19.107Z
Learning: In Rocket.Chat's federation system (apps/meteor/ee/server/hooks/federation/), permission checks follow two distinct patterns: (1) User-initiated federation actions (creating rooms, adding users to federated rooms, joining from invites) should throw MeteorError to inform users they lack 'access-federation' permission. (2) Remote server-initiated federation events should silently skip/ignore when users lack permission. The beforeAddUserToRoom hook only executes for local user-initiated actions, so throwing an error there is correct. Remote federation events are handled separately by the federation Matrix package with silent skipping logic.

Applied to files:

  • apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx
📚 Learning: 2025-11-19T12:32:29.696Z
Learnt from: d-gubert
Repo: RocketChat/Rocket.Chat PR: 37547
File: packages/i18n/src/locales/en.i18n.json:634-634
Timestamp: 2025-11-19T12:32:29.696Z
Learning: Repo: RocketChat/Rocket.Chat
Context: i18n workflow
Learning: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.

Applied to files:

  • packages/ui-client/package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: 📦 Build Packages
  • GitHub Check: CodeQL-Build
🔇 Additional comments (38)
packages/ui-client/src/components/CustomScrollbars/BaseScrollbars.tsx (1)

32-33: LGTM!

Trailing newline addition is a good formatting practice. The component implementation correctly wraps content with styled scrollbar overrides.

apps/meteor/client/views/room/composer/ComposerBoxPopup.tsx (1)

3-3: LGTM!

Import correctly updated to use the centralized CustomScrollbars from @rocket.chat/ui-client. Usage remains consistent with the component's API.

packages/ui-client/src/components/CustomScrollbars/VirtualizedScrollbars.tsx (1)

42-43: LGTM!

Trailing newline addition is appropriate. The virtualized scrollbar implementation correctly integrates with overlay scrollbars.

packages/ui-client/src/components/CustomScrollbars/CustomScrollbars.tsx (1)

49-50: LGTM!

Trailing newline addition follows file formatting conventions. The component properly manages scrollbar lifecycle and ref forwarding.

apps/meteor/client/views/room/contextualBar/Threads/components/ThreadMessageList.tsx (1)

5-5: LGTM!

Import successfully migrated to @rocket.chat/ui-client. The thread message list continues to use CustomScrollbars with the same props and behavior.

apps/meteor/client/views/room/body/RoomBodyV2.tsx (1)

2-2: LGTM!

The import path change from local CustomScrollbars to the ui-client package is correct and aligns with the PR objective to consolidate scrollbar components.

apps/meteor/client/views/teams/contextualBar/channels/TeamsChannels.tsx (1)

5-5: LGTM!

The import path change for VirtualizedScrollbars is correct and consistent with the PR's goal to move scrollbar components to the ui-client package.

packages/ui-client/src/components/index.ts (1)

20-20: LGTM!

The new export makes CustomScrollbars and VirtualizedScrollbars available from the ui-client package, enabling the migration from local imports.

apps/meteor/client/views/admin/integrations/outgoing/history/OutgoingWebhookHistoryPage.tsx (1)

2-2: LGTM!

The import path change is correct and maintains the existing functionality.

apps/meteor/client/views/navigation/sidepanel/SidePanel.tsx (1)

3-3: LGTM!

The import path change for VirtualizedScrollbars is correct and aligns with the migration to ui-client.

apps/meteor/client/views/composer/EmojiPicker/CategoriesResult.tsx (1)

3-3: LGTM!

The import path change is correct and maintains existing behavior.

apps/meteor/client/sidebarv2/header/MatrixFederationSearch/FederatedRoomList.tsx (1)

3-3: LGTM!

The import path change is correct and consistent with the migration.

apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx (1)

5-5: Migration successfully completed.

All verification checks pass:

  • ✓ No remaining imports from old apps/meteor/client/components/CustomScrollbars paths
  • ✓ Old component files have been removed from apps/meteor/client
  • VirtualizedScrollbars is properly exported from @rocket.chat/ui-client package
  • ✓ Required dependencies (overlayscrollbars, overlayscrollbars-react) are in place

The import change from a local component to the centralized ui-client package is correct and complete.

apps/meteor/client/views/room/body/RoomBody.tsx (1)

2-2: CustomScrollbars import migration looks correct

Switching CustomScrollbars to @rocket.chat/ui-client keeps usage unchanged and aligns this view with the shared UI package; no issues spotted.

apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppInstances/AppInstances.tsx (1)

4-100: Shared ui-client imports are consistent

Using GenericMenu and CustomScrollbars from @rocket.chat/ui-client centralizes these UI concerns without changing behavior; this looks good.

apps/meteor/client/views/marketplace/AppDetailsPage/tabs/AppLogs/AppLogs.tsx (1)

3-127: App logs scrollbar migration is safe

The change to import CustomScrollbars from @rocket.chat/ui-client keeps the logs layout and behavior the same while aligning with the shared scrollbars package.

apps/meteor/client/components/Sidebar/Content.tsx (1)

2-15: Type alias remains aligned with the new CustomScrollbars source

Pointing CustomScrollbars to @rocket.chat/ui-client while keeping ContentProps = ComponentPropsWithoutRef<typeof CustomScrollbars> correctly preserves the prop surface for Content; no further changes needed.

packages/ui-client/package.json (1)

53-71: overlayscrollbars dependency/peerDependency pattern looks correct—confirm consumer coverage

Adding overlayscrollbars and overlayscrollbars-react as pinned devDependencies plus "*" peerDependencies matches the existing pattern for other UI peers in this package and is appropriate for a shared UI lib.

Please just confirm that the workspace/root (or consuming app) declares compatible versions of these two packages so peer resolution doesn’t break consumers.

packages/ui-client/src/components/CustomScrollbars/index.ts (1)

1-6: No-op formatting change

Exports for OverlayScrollbars, CustomScrollbars, and VirtualizedScrollbars are unchanged; the added blank line has no behavioral impact.

apps/meteor/client/sidebar/search/SearchList.tsx (1)

6-376: SearchList virtualization now correctly uses ui-client scrollbars

Switching VirtualizedScrollbars to the @rocket.chat/ui-client export keeps the Virtuoso-based list logic intact while centralizing scrollbar behavior in the shared UI package.

apps/meteor/client/components/GenericTable/GenericTable.tsx (1)

2-2: Import migration for CustomScrollbars looks correct

Switching the import to @rocket.chat/ui-client while keeping usage unchanged is consistent with the PR’s goal and should be behavior‑preserving, assuming the component is re‑exported identically from the package.

apps/meteor/client/NavBarV2/NavBarSearch/NavBarSearchListbox.tsx (1)

3-3: Consistent CustomScrollbars import migration

The new CustomScrollbars import from @rocket.chat/ui-client aligns with the shared scrollbar consolidation and doesn’t affect the existing listbox logic.

apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoChannels/ContactInfoChannels.tsx (1)

3-3: VirtualizedScrollbars import swap is safe

Using VirtualizedScrollbars from @rocket.chat/ui-client around the Virtuoso list maintains the previous structure and should be a no‑op behaviorally as long as the component is re‑exported compatibly.

apps/meteor/client/sidebarv2/RoomList/RoomList.tsx (1)

3-3: Room list scrollbar migration looks correct

The VirtualizedScrollbars import now pointing to @rocket.chat/ui-client matches the shared component strategy; usage around GroupedVirtuoso remains identical.

apps/meteor/client/views/room/contextualBar/Discussions/DiscussionsList.tsx (1)

4-4: Discussions list uses shared VirtualizedScrollbars correctly

The import source change to @rocket.chat/ui-client keeps the same VirtualizedScrollbars usage and should not alter runtime behavior.

apps/meteor/client/views/omnichannel/cannedResponses/contextualBar/CannedResponse/CannedResponseList.tsx (1)

4-4: Canned responses list scrollbar import updated correctly

The switch to VirtualizedScrollbars from @rocket.chat/ui-client is consistent with the shared component migration and leaves the Virtuoso setup intact.

apps/meteor/client/views/omnichannel/contactInfo/tabs/ContactInfoHistory/ContactInfoHistory.tsx (1)

5-5: History list VirtualizedScrollbars migration aligns with PR goal

Importing VirtualizedScrollbars from @rocket.chat/ui-client while keeping its usage around Virtuoso identical fulfills the package‑level consolidation without impacting behavior.

apps/meteor/client/views/room/contextualBar/VideoConference/VideoConfList/VideoConfList.tsx (1)

4-4: LGTM! Import source updated correctly.

The migration of VirtualizedScrollbars to the @rocket.chat/ui-client package is clean, with no changes to usage or behavior.

apps/meteor/client/views/room/contextualBar/RoomFiles/RoomFiles.tsx (1)

4-4: LGTM! Import source updated correctly.

The migration of VirtualizedScrollbars to the @rocket.chat/ui-client package is consistent with the broader refactoring.

apps/meteor/client/views/room/contextualBar/MessageListTab.tsx (1)

5-5: LGTM! Import source updated correctly.

The migration aligns with the PR objective of consolidating scrollbar components into the ui-client package.

apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx (1)

3-3: LGTM! Import source updated correctly.

The refactoring maintains consistent usage of VirtualizedScrollbars with no behavioral changes.

apps/meteor/client/views/room/contextualBar/MessageSearchTab/components/MessageSearch.tsx (1)

3-3: LGTM! Import source updated correctly.

The migration is clean and maintains the existing virtualization behavior.

apps/meteor/client/views/room/contextualBar/Threads/ThreadList.tsx (1)

4-4: LGTM! Import source updated correctly.

The refactoring maintains consistent usage patterns across the codebase.

apps/meteor/client/components/Page/PageScrollableContent.tsx (1)

2-3: LGTM! Type and component imports updated correctly.

Both the OverlayScrollbars type and CustomScrollbars component are now properly sourced from the ui-client package.

apps/meteor/client/views/composer/EmojiPicker/SearchingResult.tsx (1)

1-1: The import statement is correct; both EmojiPickerNotFound and VirtualizedScrollbars are intentionally exported from @rocket.chat/ui-client.

Verification confirms that both components are properly exported from the ui-client package:

  • VirtualizedScrollbars is exported from packages/ui-client/src/components/CustomScrollbars/index.ts
  • EmojiPickerNotFound is exported from packages/ui-client/src/components/EmojiPicker/index.ts

Both are accessible through the main package barrel export (export * from './components'), making the import statement valid and intentional.

apps/meteor/client/views/outlookCalendar/OutlookEventsList/OutlookEventsList.tsx (1)

3-3: Import path change is consistent with the scrollbar consolidation

Switching VirtualizedScrollbars to @rocket.chat/ui-client while keeping usage unchanged matches the goal of centralizing these components and should be behavior‑preserving.

apps/meteor/client/views/navigation/sidebar/RoomList/RoomList.tsx (1)

3-3: Room list now correctly uses shared VirtualizedScrollbars from ui-client

The import swap to @rocket.chat/ui-client keeps the existing GroupedVirtuoso integration intact and aligns this RoomList with the new shared scrollbar implementation.

apps/meteor/client/sidebar/RoomList/RoomList.tsx (1)

5-5: Sidebar RoomList import updated to shared VirtualizedScrollbars

Using VirtualizedScrollbars from @rocket.chat/ui-client here matches the rest of the app and keeps the Virtuoso list behavior unchanged.

@github-actions
Copy link
Contributor

github-actions bot commented Nov 26, 2025

📦 Docker Image Size Report

📈 Changes

Service Current Baseline Change Percent
sum of all images 1.2GiB 1.2GiB +12MiB
rocketchat 358MiB 346MiB +12MiB
omnichannel-transcript-service 132MiB 132MiB -489B
queue-worker-service 132MiB 132MiB +50B
ddp-streamer-service 127MiB 127MiB +486B
account-service 114MiB 114MiB -1.1KiB
stream-hub-service 111MiB 111MiB -21B
authorization-service 111MiB 111MiB +67B
presence-service 111MiB 111MiB -1.5KiB

📊 Historical Trend

---
config:
  theme: "dark"
  xyChart:
    width: 900
    height: 400
---
xychart
  title "Image Size Evolution by Service (Last 30 Days + This PR)"
  x-axis ["11/15 22:28", "11/16 01:28", "11/17 23:50", "11/18 22:53", "11/19 23:02", "11/21 16:49", "11/24 17:34", "11/27 22:32", "11/28 17:14 (PR)"]
  y-axis "Size (GB)" 0 --> 0.5
  line "account-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
  line "authorization-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
  line "ddp-streamer-service" [0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12]
  line "omnichannel-transcript-service" [0.14, 0.14, 0.14, 0.14, 0.14, 0.13, 0.13, 0.13, 0.13]
  line "presence-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
  line "queue-worker-service" [0.14, 0.14, 0.14, 0.14, 0.14, 0.13, 0.13, 0.13, 0.13]
  line "rocketchat" [0.36, 0.36, 0.35, 0.35, 0.35, 0.34, 0.34, 0.34, 0.35]
  line "stream-hub-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
Loading

Statistics (last 8 days):

  • 📊 Average: 1.5GiB
  • ⬇️ Minimum: 1.2GiB
  • ⬆️ Maximum: 1.6GiB
  • 🎯 Current PR: 1.2GiB
ℹ️ About this report

This report compares Docker image sizes from this build against the develop baseline.

  • Tag: pr-37619
  • Baseline: develop
  • Timestamp: 2025-11-28 17:14:55 UTC
  • Historical data points: 8

Updated: Fri, 28 Nov 2025 17:14:55 GMT

MartinSchoeler
MartinSchoeler previously approved these changes Nov 27, 2025
Copy link
Member

@MartinSchoeler MartinSchoeler left a comment

Choose a reason for hiding this comment

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

man I love meteor

@codecov
Copy link

codecov bot commented Nov 28, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 68.80%. Comparing base (0064a4f) to head (f9a6c58).
⚠️ Report is 1 commits behind head on develop.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##           develop   #37619      +/-   ##
===========================================
- Coverage    68.81%   68.80%   -0.01%     
===========================================
  Files         3361     3361              
  Lines       114278   114265      -13     
  Branches     20619    20619              
===========================================
- Hits         78645    78625      -20     
- Misses       33534    33543       +9     
+ Partials      2099     2097       -2     
Flag Coverage Δ
e2e 57.29% <ø> (-0.07%) ⬇️
e2e-api 42.22% <ø> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gabriellsh gabriellsh added the stat: QA assured Means it has been tested and approved by a company insider label Nov 28, 2025
@dionisio-bot dionisio-bot bot added the stat: ready to merge PR tested and approved waiting for merge label Nov 28, 2025
@kodiakhq kodiakhq bot merged commit e1c634a into develop Nov 28, 2025
53 checks passed
@kodiakhq kodiakhq bot deleted the chore/moveCustomScrollbars branch November 28, 2025 18:39
cardoso pushed a commit that referenced this pull request Dec 1, 2025
@dougfabris dougfabris modified the milestones: 7.14.0, 8.0.0 Jan 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stat: QA assured Means it has been tested and approved by a company insider stat: ready to merge PR tested and approved waiting for merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants