Skip to content

Conversation

@gabriellsh
Copy link
Member

@gabriellsh gabriellsh commented Oct 10, 2025

Proposed changes (including videos or screenshots)

image image

Issue(s)

VGA-9

Steps to test or reproduce

Further comments

Summary by CodeRabbit

  • New Features

    • Call widget displays who transferred a call and adds incoming/outgoing transfer views with accept/reject/cancel actions.
  • Localization

    • Added English labels for "Transferring", "Incoming call transfer", transfer origin, and "Transferred call from … to …".
  • Documentation

    • Storybook stories added/updated to showcase incoming and outgoing transfer scenarios.

@dionisio-bot
Copy link
Contributor

dionisio-bot bot commented Oct 10, 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.12.0, but it targets 7.11.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 Oct 10, 2025

🦋 Changeset detected

Latest commit: f317acd

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 43 packages
Name Type
@rocket.chat/i18n Minor
@rocket.chat/ui-voip Major
@rocket.chat/meteor Patch
@rocket.chat/mock-providers Patch
@rocket.chat/ui-contexts Major
@rocket.chat/web-ui-registration Major
@rocket.chat/omnichannel-transcript Patch
@rocket.chat/omnichannel-services Patch
@rocket.chat/fuselage-ui-kit Major
@rocket.chat/ui-client Major
@rocket.chat/uikit-playground Patch
@rocket.chat/gazzodown Major
@rocket.chat/livechat Patch
@rocket.chat/ui-avatar Major
@rocket.chat/ui-video-conf Major
@rocket.chat/queue-worker Patch
@rocket.chat/core-typings Patch
@rocket.chat/rest-typings Patch
@rocket.chat/api-client Patch
@rocket.chat/apps Patch
@rocket.chat/core-services Patch
@rocket.chat/cron Patch
@rocket.chat/ddp-client Patch
@rocket.chat/freeswitch Patch
@rocket.chat/http-router Patch
@rocket.chat/model-typings Patch
@rocket.chat/account-service Patch
@rocket.chat/authorization-service Patch
@rocket.chat/ddp-streamer Patch
@rocket.chat/federation-service Patch
@rocket.chat/presence-service Patch
@rocket.chat/stream-hub-service Patch
@rocket.chat/federation-matrix Patch
@rocket.chat/license Patch
@rocket.chat/media-calls Patch
@rocket.chat/pdf-worker Patch
@rocket.chat/presence Patch
rocketchat-services Patch
@rocket.chat/models Patch
@rocket.chat/network-broker Patch
@rocket.chat/omni-core-ee Patch
@rocket.chat/instance-status Patch
@rocket.chat/omni-core Patch

Not sure what this means? Click here to learn what changesets are.

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

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 10, 2025

Walkthrough

Adds a transferredBy field through media session state and context, exposes it via MediaCallProvider/Mock, introduces Incoming/Outgoing transfer UI components and stories, and adds English i18n keys and a changeset describing the update.

Changes

Cohort / File(s) Summary of Changes
Release metadata
.changeset/heavy-rules-fry.md
Adds a changeset noting minor bumps for @rocket.chat/i18n and @rocket.chat/ui-voip and describing added call transfer requester info.
i18n additions
packages/i18n/src/locales/en.i18n.json
Adds 4 English translation keys for transfer messages (Transferred_call__from__to, Transferring_call, Transferring_call_incoming, Transferring_call_incoming__from_).
Media call context & provider
packages/ui-voip/src/v2/MediaCallContext.ts, packages/ui-voip/src/v2/MediaCallProvider.tsx, packages/ui-voip/src/v2/MockedMediaCallProvider.tsx
Introduces `transferredBy: string
Session hooks & types
packages/ui-voip/src/v2/useMediaSession.ts, packages/ui-voip/src/v2/useMediaSessionInstance.ts
Adds transferredBy to session state and instance payloads (derived from mainCall.transferredBy); tightens BaseSession.peerInfo typing to `PeerInfo
Widget control flow
packages/ui-voip/src/v2/MediaCallWidget.tsx
Consumes transferredBy from context and conditionally renders IncomingCallTransfer (ringing) or OutgoingCallTransfer (calling) when transfer info exists; otherwise falls back to existing Incoming/Outgoing views.
New transfer views & exports
packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx, packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx, packages/ui-voip/src/v2/views/index.ts
Adds Incoming/Outgoing transfer React components (require peerInfo, provide accept/reject/cancel actions) and re-exports them from views index.
Storybook stories
packages/ui-voip/src/v2/views/IncomingCallTransfer.stories.tsx, packages/ui-voip/src/v2/views/OutgoingCallTransfer.stories.tsx, packages/ui-voip/src/v2/MediaCallWidget.stories.tsx
Adds/updates stories demonstrating transferred scenarios with mocked translations and MediaCallProviderMock decorators (examples: transferredBy: 'Jason' / 'Joy').

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Engine as Media Session Engine
  participant Hook as useMediaSession
  participant Provider as MediaCallProvider
  participant Widget as MediaCallWidget
  participant InView as IncomingCallTransfer
  participant OutView as OutgoingCallTransfer

  Engine->>Hook: mainCall updates (state, peerInfo, transferredBy)
  Hook-->>Provider: session { state, peerInfo, transferredBy, ... }
  Provider-->>Widget: context { transferredBy, state, ... }

  alt ringing & transferredBy present
    Widget->>InView: render(transferredBy, peerInfo)
    InView->>Provider: onAccept / onEndCall
  else calling & transferredBy present
    Widget->>OutView: render(transferredBy, peerInfo)
    OutView->>Provider: onEndCall
  else no transfer
    Widget->>Widget: render standard Incoming/Outgoing call views
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • aleksandernsilva

Poem

In a burrow full of code I play,
I chase the hops that ring and sway,
"Transferred by" I proudly show,
A rabbit helper in the flow—
Hooray for calls that find their way! 🐇📞

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 title clearly and concisely describes the primary change introduced by this pull request, namely the identification of the call transfer requester on the call widget, and accurately reflects the added feature of showing who initiated the transfer.
Linked Issues Check ✅ Passed The pull request fulfills the requirement of VGA-9 by adding a transferredBy field through the media session and context layers, updating translation entries, and modifying the call widget and related transfer views to display the transfer requester.
Out of Scope Changes Check ✅ Passed All introduced changes—including version bumps, new translation keys, context and hook updates, UI components for incoming and outgoing transfers, and Storybook stories—directly support the feature of displaying who transferred the call and there are no unrelated modifications.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ 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/voipTransferViews

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
Copy link
Contributor

coderabbitai bot commented Oct 10, 2025

Walkthrough

Adds “transferred by” support to the VoIP widget: extends session/context types with transferredBy, adds i18n strings, updates provider and widget to conditionally render new Incoming/Outgoing Call Transfer views, introduces corresponding components and Storybook stories, and re-exports new views. Includes a changeset for minor version bumps.

Changes

Cohort / File(s) Summary
Release metadata
./.changeset/heavy-rules-fry.md
Adds changeset for minor bumps to @rocket.chat/i18n and @rocket.chat/ui-voip; notes transfer requester info on call widget.
Localization additions
packages/i18n/src/locales/en.i18n.json
Adds four keys for transfer states: transferred-from, transferring, incoming transfer, and “from {{from}}”.
Context and provider surface
packages/ui-voip/src/v2/MediaCallContext.ts, packages/ui-voip/src/v2/MediaCallProvider.tsx, packages/ui-voip/src/v2/MockedMediaCallProvider.tsx
Introduces transferredBy?: string to context type, default value, provider contextValue, and mocked provider prop/contextValue.
Media session state
packages/ui-voip/src/v2/useMediaSession.ts, packages/ui-voip/src/v2/useMediaSessionInstance.ts
Adds transferredBy to session types and updates computation/propagation; makes peerInfo explicitly `PeerInfo
Widget rendering logic
packages/ui-voip/src/v2/MediaCallWidget.tsx
Conditionally renders transfer views: on ringing/calling, uses Incoming/OutgoingCallTransfer when transferredBy is truthy.
New transfer views
packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx, packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx
Adds components rendering incoming/outgoing transfer UIs, using transferredBy, peerInfo, and existing widget primitives.
Stories for new views
packages/ui-voip/src/v2/views/IncomingCallTransfer.stories.tsx, packages/ui-voip/src/v2/views/OutgoingCallTransfer.stories.tsx
Adds Storybook stories with translation context and mocked providers (including transferredBy).
Public re-exports
packages/ui-voip/src/v2/views/index.ts
Re-exports IncomingCallTransfer and OutgoingCallTransfer.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant Widget as MediaCallWidget
  participant Ctx as MediaCallContext
  participant Sess as useMediaSession
  participant VIn as IncomingCallTransfer
  participant VOut as OutgoingCallTransfer

  User->>Widget: Open call UI
  Widget->>Ctx: useMediaCallContext()
  Ctx->>Sess: Session state (state, connectionState, transferredBy, peerInfo)
  alt state == "ringing"
    alt transferredBy present
      Widget->>VIn: Render IncomingCallTransfer
      Note right of VIn: Shows "Incoming call transfer"\n"From {{from}}"
    else
      Widget-->>User: Render IncomingCall
    end
  else state == "calling"
    alt transferredBy present
      Widget->>VOut: Render OutgoingCallTransfer
      Note right of VOut: Shows "Transferring call"\n"From {{from}}"
    else
      Widget-->>User: Render OutgoingCall
    end
  else
    Widget-->>User: Render existing states (unchanged)
  end

  VIn->>Ctx: onAccept() / onEndCall()
  VOut->>Ctx: onEndCall()
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

stat: ready to merge, stat: QA assured

Suggested reviewers

  • tassoevan
  • aleksandernsilva
  • lucas-a-pelegrino

Poem

A whisper hops across the wire—who set this call to roam?
A carrot-coded breadcrumb says, “Transferred by,” now shown.
I thump accept, or cancel quick, with tidy UI flair—
Two ears up high, I route the line, with courteous rabbit care.
Ring-ring, transfer sings—connection finds its home. 🥕☎️

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 title succinctly and accurately reflects the primary change of the pull request, which is to identify and display the call transfer requester on the call widget. It highlights the new feature in a clear, concise sentence without unnecessary details. This aligns directly with the code changes and objectives.
Linked Issues Check ✅ Passed The pull request fulfills issue VGA-9 by propagating the transferredBy property through session hooks and context, updating the MediaCallWidget to render incoming and outgoing transfer components that display who initiated the transfer, adding necessary translation entries, and including Storybook stories to demonstrate both transfer flows.
Out of Scope Changes Check ✅ Passed All introduced changes directly support the feature to identify and display the call transfer requester, including additions to session types, context, widget rendering, UI components, translations, and stories; there are no unrelated or extraneous modifications.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ 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/voipTransferViews

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

📜 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 3c669fa and 43cdaba.

📒 Files selected for processing (13)
  • .changeset/heavy-rules-fry.md (1 hunks)
  • packages/i18n/src/locales/en.i18n.json (1 hunks)
  • packages/ui-voip/src/v2/MediaCallContext.ts (2 hunks)
  • packages/ui-voip/src/v2/MediaCallProvider.tsx (1 hunks)
  • packages/ui-voip/src/v2/MediaCallWidget.tsx (2 hunks)
  • packages/ui-voip/src/v2/MockedMediaCallProvider.tsx (2 hunks)
  • packages/ui-voip/src/v2/useMediaSession.ts (3 hunks)
  • packages/ui-voip/src/v2/useMediaSessionInstance.ts (1 hunks)
  • packages/ui-voip/src/v2/views/IncomingCallTransfer.stories.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/OutgoingCallTransfer.stories.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/index.ts (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (8)
packages/ui-voip/src/v2/useMediaSessionInstance.ts (1)
packages/ui-voip/src/v2/MediaCallContext.ts (1)
  • PeerInfo (22-22)
packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx (1)
packages/media-signaling/src/lib/Call.ts (1)
  • transferredBy (83-85)
packages/ui-voip/src/v2/useMediaSession.ts (1)
packages/media-signaling/src/lib/Call.ts (2)
  • transferredBy (83-85)
  • contact (77-79)
packages/ui-voip/src/v2/MediaCallWidget.tsx (2)
packages/ui-voip/src/v2/MediaCallContext.ts (1)
  • useMediaCallContext (115-124)
packages/media-signaling/src/lib/Call.ts (1)
  • transferredBy (83-85)
packages/ui-voip/src/v2/views/IncomingCallTransfer.stories.tsx (1)
packages/mock-providers/src/index.ts (1)
  • mockAppRoot (3-3)
packages/ui-voip/src/v2/views/OutgoingCallTransfer.stories.tsx (1)
packages/mock-providers/src/index.ts (1)
  • mockAppRoot (3-3)
packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1)
packages/media-signaling/src/lib/Call.ts (1)
  • transferredBy (83-85)
packages/ui-voip/src/v2/MockedMediaCallProvider.tsx (1)
packages/ui-voip/src/v2/MediaCallContext.ts (1)
  • State (24-24)
🔇 Additional comments (15)
.changeset/heavy-rules-fry.md (1)

1-6: LGTM!

The changeset follows the correct format and appropriately marks this as a minor version bump for both affected packages. The description clearly captures the feature addition.

packages/ui-voip/src/v2/MediaCallContext.ts (2)

31-31: LGTM!

The transferredBy field is correctly typed as string | undefined and appropriately placed within the MediaCallContextType. This aligns with the PR objective to track who requested the call transfer.


64-64: LGTM!

The default value initialization is correct and consistent with other optional fields in the context.

packages/ui-voip/src/v2/MediaCallProvider.tsx (1)

230-230: LGTM!

The transferredBy field is correctly propagated from the session state to the context value, following the established pattern for other session properties.

packages/ui-voip/src/v2/views/index.ts (1)

5-6: LGTM!

The new exports follow the established pattern and cleanly extend the public API to include the transfer-related views.

packages/ui-voip/src/v2/MediaCallWidget.tsx (3)

2-2: LGTM!

The import correctly adds the new transfer-related view components.


5-5: LGTM!

Correctly destructures transferredBy from the context to enable conditional rendering of transfer views.


17-25: LGTM!

The conditional rendering logic is well-structured and follows a clear pattern:

  • When transferredBy is present, render the transfer-specific view
  • Otherwise, fall back to the standard view

This approach ensures transfer scenarios are properly visualized while maintaining backward compatibility.

packages/ui-voip/src/v2/views/OutgoingCallTransfer.stories.tsx (1)

1-30: LGTM!

The Storybook configuration is well-structured:

  • Translation mocks cover the necessary i18n keys for the transfer UI
  • The MediaCallProviderMock is correctly configured with transferredBy='Joy' to simulate a transfer scenario
  • Decorators are properly layered to provide all required contexts
  • Story structure follows Storybook best practices
packages/ui-voip/src/v2/MockedMediaCallProvider.tsx (2)

9-17: LGTM!

The component signature correctly extends to accept the optional transferredBy prop with appropriate typing and default value.


118-118: LGTM!

The transferredBy prop is correctly passed through to the context value, enabling test scenarios for call transfers.

packages/ui-voip/src/v2/useMediaSessionInstance.ts (1)

14-15: LGTM!

The type changes are appropriate:

  • Making peerInfo explicitly PeerInfo | undefined (rather than optional) improves type clarity
  • Adding transferredBy: string | undefined aligns with the feature requirements
  • Both changes maintain consistency with how CallSession refines these types for active call states
packages/ui-voip/src/v2/useMediaSession.ts (1)

12-12: LGTM! TransferredBy integration is well-implemented.

The addition of transferredBy to the session state is correctly initialized, derived from CallContact, and consistently propagated through both SIP and non-SIP contact paths. The fallback logic (displayName || username || undefined) ensures a meaningful display value.

Also applies to: 131-141, 165-165

packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1)

31-31: Consider error handling for async accept.

The void operator intentionally discards the promise returned by onAccept(). If the accept operation can fail, the user won't see any feedback.

Verify whether onAccept can throw or reject, and if so, consider adding error handling:

onClick={async () => {
  try {
    await onAccept();
  } catch (error) {
    console.error('Failed to accept call:', error);
    // Consider showing user feedback
  }
}}
packages/ui-voip/src/v2/views/IncomingCallTransfer.stories.tsx (1)

7-26: Story setup looks solid

Nice job wiring the translation mock and provider decorator; the story renders with realistic copy and context, so it should mirror the runtime behavior well.

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

🧹 Nitpick comments (3)
packages/ui-voip/src/v2/views/IncomingCallTransfer.stories.tsx (1)

16-27: Consider setting state='ringing' in the story decorator.

The MediaCallProviderMock defaults state to 'closed', but IncomingCallTransfer is intended to be rendered when the state is 'ringing' (based on the MediaCallWidget rendering logic). For a more accurate demonstration of the component in its expected context, consider adding state='ringing' to the provider props.

Apply this diff:

 	decorators: [
 		mockedContexts,
 		(Story) => (
-			<MediaCallProviderMock transferredBy='Jason'>
+			<MediaCallProviderMock state='ringing' transferredBy='Jason'>
 				<Story />
 			</MediaCallProviderMock>
 		),
packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1)

7-7: Rename component to match filename and export.

The component is named IncomingCall but the filename and export name is IncomingCallTransfer. This naming inconsistency can cause confusion.

Apply this diff:

-const IncomingCall = () => {
+const IncomingCallTransfer = () => {

And update the export:

-export default IncomingCall;
+export default IncomingCallTransfer;
packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx (1)

21-21: Consider using a more specific translation key for the connecting state.

The translation key meteor_status_connecting appears to be a generic status key (possibly from Meteor legacy). For consistency with the new transfer feature, consider using a more specific key like Connecting_call or similar.

📜 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 3c669fa and 43cdaba.

📒 Files selected for processing (13)
  • .changeset/heavy-rules-fry.md (1 hunks)
  • packages/i18n/src/locales/en.i18n.json (1 hunks)
  • packages/ui-voip/src/v2/MediaCallContext.ts (2 hunks)
  • packages/ui-voip/src/v2/MediaCallProvider.tsx (1 hunks)
  • packages/ui-voip/src/v2/MediaCallWidget.tsx (2 hunks)
  • packages/ui-voip/src/v2/MockedMediaCallProvider.tsx (2 hunks)
  • packages/ui-voip/src/v2/useMediaSession.ts (3 hunks)
  • packages/ui-voip/src/v2/useMediaSessionInstance.ts (1 hunks)
  • packages/ui-voip/src/v2/views/IncomingCallTransfer.stories.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/OutgoingCallTransfer.stories.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/index.ts (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (8)
packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx (1)
packages/media-signaling/src/lib/Call.ts (1)
  • transferredBy (83-85)
packages/ui-voip/src/v2/views/IncomingCallTransfer.stories.tsx (1)
packages/mock-providers/src/index.ts (1)
  • mockAppRoot (3-3)
packages/ui-voip/src/v2/MockedMediaCallProvider.tsx (1)
packages/ui-voip/src/v2/MediaCallContext.ts (1)
  • State (24-24)
packages/ui-voip/src/v2/useMediaSessionInstance.ts (1)
packages/ui-voip/src/v2/MediaCallContext.ts (1)
  • PeerInfo (22-22)
packages/ui-voip/src/v2/useMediaSession.ts (1)
packages/media-signaling/src/lib/Call.ts (2)
  • transferredBy (83-85)
  • contact (77-79)
packages/ui-voip/src/v2/views/OutgoingCallTransfer.stories.tsx (1)
packages/mock-providers/src/index.ts (1)
  • mockAppRoot (3-3)
packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1)
packages/media-signaling/src/lib/Call.ts (1)
  • transferredBy (83-85)
packages/ui-voip/src/v2/MediaCallWidget.tsx (2)
packages/ui-voip/src/v2/MediaCallContext.ts (1)
  • useMediaCallContext (115-124)
packages/media-signaling/src/lib/Call.ts (1)
  • transferredBy (83-85)
🔇 Additional comments (4)
packages/ui-voip/src/v2/useMediaSession.ts (1)

131-135: LGTM!

The derivation of transferredBy correctly handles null/undefined cases with optional chaining and provides a sensible fallback hierarchy (displayName → username → undefined).

packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1)

22-22: Verify transferredBy is always defined when rendering IncomingCallTransfer. Ensure any parent (e.g. MediaCallWidget) only renders it with a non-null transferredBy, or add a fallback (e.g. '') to avoid “undefined” showing in the UI.

packages/ui-voip/src/v2/MediaCallWidget.tsx (1)

2-2: LGTM! Transfer-aware routing implemented correctly.

The conditional rendering based on transferredBy correctly routes to the new transfer views (IncomingCallTransfer and OutgoingCallTransfer) when a transfer is active. The logic is clear and follows the existing pattern in the component.

Also applies to: 5-5, 17-24

packages/ui-voip/src/v2/views/OutgoingCallTransfer.stories.tsx (1)

28-30: LGTM! Storybook story setup is correct.

The story correctly wraps the component with mocked providers and supplies the necessary transferredBy prop for testing the transfer scenario.

@codecov
Copy link

codecov bot commented Oct 10, 2025

Codecov Report

❌ Patch coverage is 80.26316% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 67.62%. Comparing base (053d6e0) to head (f317acd).
⚠️ Report is 1 commits behind head on develop.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##           develop   #37207      +/-   ##
===========================================
+ Coverage    67.56%   67.62%   +0.06%     
===========================================
  Files         3295     3295              
  Lines       112652   112597      -55     
  Branches     20450    20435      -15     
===========================================
+ Hits         76110    76143      +33     
+ Misses       33869    33784      -85     
+ Partials      2673     2670       -3     
Flag Coverage Δ
e2e 57.33% <ø> (-0.01%) ⬇️
unit 71.63% <80.26%> (+0.05%) ⬆️

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.

@pierre-lehnen-rc pierre-lehnen-rc added the stat: QA assured Means it has been tested and approved by a company insider label Oct 14, 2025
Base automatically changed from chore/media-call-identify-who-transferred to develop October 14, 2025 19:46
@scuciatto scuciatto added this to the 7.12.0 milestone Oct 16, 2025
@dionisio-bot dionisio-bot bot added the stat: ready to merge PR tested and approved waiting for merge label Oct 16, 2025
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: 1

🧹 Nitpick comments (1)
packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1)

19-19: Consider including the ellipsis in the translation key.

The ellipsis (...) is hardcoded outside the translation string, which means it won't be localized if different cultures require different formatting for "in progress" indicators. While this is a minor issue, it's generally better to include all punctuation within translation keys or use a separate key for the formatted version.

Consider one of these approaches:

Option 1: Include ellipsis in the translation key:

-<WidgetHeader title={`${t('Transferring_call_incoming')}...`}>
+<WidgetHeader title={t('Transferring_call_incoming_ellipsis')}>

Option 2: Use i18next interpolation if you need flexibility:

-<WidgetHeader title={`${t('Transferring_call_incoming')}...`}>
+<WidgetHeader title={t('Transferring_call_incoming_in_progress')}>
📜 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 7784aa4 and f317acd.

⛔ Files ignored due to path filters (1)
  • packages/ui-voip/src/v2/__snapshots__/MediaCallWidget.spec.tsx.snap is excluded by !**/*.snap
📒 Files selected for processing (3)
  • packages/ui-voip/src/v2/MediaCallWidget.stories.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1 hunks)
  • packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/ui-voip/src/v2/views/OutgoingCallTransfer.tsx
🧰 Additional context used
🧬 Code graph analysis (1)
packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (2)
packages/ui-voip/src/v2/MediaCallWidget.stories.tsx (1)
  • IncomingCallTransfer (66-71)
packages/media-signaling/src/lib/Call.ts (1)
  • transferredBy (83-85)
⏰ 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)
packages/ui-voip/src/v2/views/IncomingCallTransfer.tsx (1)

7-40: LGTM! Previous review comments have been addressed.

The component is now correctly named IncomingCallTransfer to match the filename, and the transferredBy field is properly handled with conditional rendering using the && operator. The overall structure is clean and follows React best practices.

@kodiakhq kodiakhq bot merged commit 74f2232 into develop Oct 16, 2025
86 of 89 checks passed
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.

5 participants