Rocket.Chat icon indicating copy to clipboard operation
Rocket.Chat copied to clipboard

feat(federation): Added invitation information to user info contextual bar

Open aleksandernsilva opened this issue 2 months ago • 6 comments

Proposed changes (including videos or screenshots)

Issue(s)

FB-66

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.

aleksandernsilva avatar Dec 07 '25 21:12 aleksandernsilva

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

dionisio-bot[bot] avatar Dec 07 '25 21:12 dionisio-bot[bot]

⚠️ 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

changeset-bot[bot] avatar Dec 07 '25 21:12 changeset-bot[bot]

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 isInvited computation (subscription?.status === 'INVITED') and invitationDate extraction (subscription?.ts) are correct and handle null/undefined cases.
  • Hook logic in useRemoveUserAction: Confirm that the new invited parameter correctly influences removal logic and that the conditional rendering aligns with product requirements.
  • Component prop threading: Ensure invitationDate and isInvited are 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.

❤️ Share

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

coderabbitai[bot] avatar Dec 07 '25 21:12 coderabbitai[bot]

@coderabbitai review

aleksandernsilva avatar Dec 07 '25 21:12 aleksandernsilva

✅ 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.

coderabbitai[bot] avatar Dec 07 '25 21:12 coderabbitai[bot]

📦 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

github-actions[bot] avatar Dec 08 '25 00:12 github-actions[bot]

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

Impacted file tree graph

@@             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.

codecov[bot] avatar Dec 11 '25 00:12 codecov[bot]