feat(federation): Added invitation information to user info contextual bar
Proposed changes (including videos or screenshots)
Issue(s)
Steps to test or reproduce
Further comments
Summary by CodeRabbit
-
New Features
- Display invitation date for invited users in the user information panel.
- Enable management of invited users with ability to revoke invitations.
- Enhanced member list to track invitation status and creation dates.
-
Localization
- Added new translation strings for "Invitation date" and "Revoke invitation."
✏️ Tip: You can customize this high-level summary in your review settings.
Looks like this PR is not ready to merge, because of the following issues:
- This PR is missing the 'stat: QA assured' label
Please fix the issues and try again
If you have any trouble, please check the PR guidelines
⚠️ No Changeset found
Latest commit: 0e0465dad795359a1e91ca906b5fc47e002ec16d
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
Walkthrough
Adds support for displaying user invitation information throughout the UI. Introduces an optional invitationDate field and isInvited flag that propagate subscription data through RoomMembers and UserInfo component hierarchies, enabling the display of invitation timestamps and invitation-specific actions in member lists and user info panels.
Changes
| Cohort / File(s) | Change Summary |
|---|---|
Type & Hook Updates apps/meteor/client/views/hooks/useMembersList.ts |
Extended RoomMember type to include federated field, updated roles typing to IUser['roles'], and added optional subscription field with relevant ISubscription properties; wrapped in Serialized. |
Localization packages/i18n/src/locales/en.i18n.json |
Added new translation keys: Invitation_date and Revoke_invitation. |
UserInfo Component & Stories apps/meteor/client/components/UserInfo/UserInfo.tsx, apps/meteor/client/components/UserInfo/UserInfo.stories.tsx |
Added optional invitationDate prop to UserInfoProps; renders new InfoPanelField block displaying invitation date when provided; added InvitedUser story variant with sample invitation date. |
UserInfo Data & Actions apps/meteor/client/views/room/contextualBar/UserInfo/UserInfoWithData.tsx, apps/meteor/client/views/room/contextualBar/UserInfo/UserInfoActions.tsx |
Extended UserInfoWithDataProps and UserInfoActionsProps to include optional invitationDate and isInvited fields; propagated through component chain; updated size argument in useUserInfoActions from 3 to 2. |
RoomMembers Components apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx, apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersItem.tsx, apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersRow.tsx |
Migrated from IUser type to RoomMember type for member objects; added subscription field handling; RoomMembersItem computes isInvited and invitationDate from subscription; added data-invitationdate attribute to DOM elements. |
RoomMembers Data & Actions apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersWithData.tsx, apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersActions.tsx |
Updated state shape from flat userId to nested user object with id and invitationDate; passed subscription data through component tree; added isInvited prop to RoomMembersActions; updated dataset attribute reading (userid/invitationdate). |
RoomMembers Stories apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.stories.tsx |
Added roles: ['user'] property to first member object in Default story. |
User Action Hooks apps/meteor/client/views/room/hooks/useUserInfoActions/useUserInfoActions.ts, apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useRemoveUserAction.tsx |
Added optional isInvited parameter to both hooks; updated useRemoveUserAction to account for invited state in removal logic; expanded removeUser inclusion condition to (isMember || isInvited); added isInvited to memoization dependencies. |
Sequence Diagram
sequenceDiagram
participant RMD as RoomMembersWithData
participant RMI as RoomMembersItem
participant UI as UserInfo
participant UIA as UserInfoActions
participant Hook as useUserInfoActions
RMD->>RMI: pass subscription data
RMI->>RMI: derive isInvited from<br/>subscription.status === 'INVITED'
RMI->>RMI: extract invitationDate from<br/>subscription.ts
RMI->>UI: pass invitationDate prop
UI->>UI: render InfoPanelField<br/>for invitation date
RMI->>UIA: pass isInvited flag
UIA->>Hook: pass isInvited to useUserInfoActions
Hook->>Hook: compute removeUser action<br/>availability: (isMember || isInvited)
Hook-->>UIA: return invitation-aware actions
UIA-->>RMI: display invitation actions
Estimated code review effort
🎯 3 (Moderate) | ⏱️ ~20 minutes
- Type changes across useMembersList: Review the Serialized wrapper and expanded RoomMember shape (federated, subscription fields, roles typing) to ensure compatibility with existing callers.
-
Invitation state derivation: Verify that
isInvitedcomputation (subscription?.status === 'INVITED') andinvitationDateextraction (subscription?.ts) are correct and handle null/undefined cases. -
Hook logic in useRemoveUserAction: Confirm that the new
invitedparameter correctly influences removal logic and that the conditional rendering aligns with product requirements. -
Component prop threading: Ensure
invitationDateandisInvitedare propagated consistently through the UserInfo and RoomMembers component chains without missing or incorrect passings.
Possibly related PRs
- RocketChat/Rocket.Chat#37532: Introduces INVITED subscription status and ts fields; this PR directly consumes those changes to display invitation data and actions in the UI.
- RocketChat/Rocket.Chat#37612: Modifies invitation/subscription handling across similar components; both PRs update member/subscription type definitions and propagate invitation fields through the component hierarchy.
Suggested labels
stat: ready to merge, stat: QA assured
Suggested reviewers
- ggazzo
- tassoevan
Poem
🐰 Invitations bloom in UI fields so bright,
Subscription timestamps guide the light,
Through RoomMembers, UserInfo's flow,
Invited guests now steal the show! ✨
Pre-merge checks and finishing touches
❌ Failed checks (1 inconclusive)
| Check name | Status | Explanation | Resolution |
|---|---|---|---|
| Linked Issues check | ❓ Inconclusive | The linked issue FB-66 lacks detailed requirements, making it impossible to validate whether code changes fully meet stated objectives for external user information contextual bar. | Review the linked issue FB-66 for specific coding requirements and ensure all stated objectives in that issue are implemented and working as intended. |
✅ Passed checks (4 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 concisely describes the main change: adding invitation information to the user info contextual bar, matching the file modifications throughout the changeset. |
| Out of Scope Changes check | ✅ Passed | All changes are cohesively aligned with adding invitation functionality: type system updates, UI components, story files, hooks, and i18n strings are all directly supporting the invitation feature. |
| 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
feat/invitation-user-info
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.
Comment @coderabbitai help to get the list of available commands and usage tips.
@coderabbitai review
✅ Actions performed
Review triggered.
Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.
📦 Docker Image Size Report
📈 Changes 
| Service | Current | Baseline | Change | Percent |
|---|---|---|---|---|
| sum of all images | 1.2GiB | 1.2GiB | +12MiB | |
| rocketchat | 360MiB | 349MiB | +12MiB | |
| omnichannel-transcript-service | 132MiB | 132MiB | +147B | |
| queue-worker-service | 132MiB | 132MiB | -416B | |
| ddp-streamer-service | 126MiB | 126MiB | -378B | |
| account-service | 113MiB | 113MiB | -231B | |
| stream-hub-service | 111MiB | 111MiB | -189B | |
| presence-service | 111MiB | 111MiB | -191B | |
| authorization-service | 111MiB | 111MiB | +93B |
📊 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 19:05", "12/01 23:01", "12/02 21:57", "12/03 21:00", "12/04 18:17", "12/05 21:56", "12/08 20:15", "12/09 22:17", "12/10 22:05", "12/10 23:15 (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, 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, 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, 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, 0.13, 0.13, 0.13, 0.13, 0.13, 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, 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, 0.13, 0.13, 0.13, 0.13, 0.13, 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.34, 0.34, 0.34, 0.34, 0.34, 0.34, 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, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
Statistics (last 17 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-37712 -
Baseline:
develop - Timestamp: 2025-12-10 23:15:55 UTC
- Historical data points: 17
Updated: Wed, 10 Dec 2025 23:15:56 GMT
Codecov Report
:x: Patch coverage is 85.18519% with 4 lines in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 67.70%. Comparing base (ddf6717) to head (0e0465d).
:warning: Report is 2 commits behind head on develop.
Additional details and impacted files
@@ Coverage Diff @@
## develop #37712 +/- ##
===========================================
- Coverage 67.70% 67.70% -0.01%
===========================================
Files 3452 3452
Lines 113975 113981 +6
Branches 20940 20943 +3
===========================================
+ Hits 77168 77170 +2
- Misses 34678 34680 +2
- Partials 2129 2131 +2
| Flag | Coverage Δ | |
|---|---|---|
| e2e | 57.27% <85.18%> (+<0.01%) |
:arrow_up: |
| e2e-api | 42.29% <ø> (-0.04%) |
:arrow_down: |
Flags with carried forward coverage won't be shown. Click here to find out more.
:rocket: New features to boost your workflow:
- :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
- :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.