diff --git a/src/state/CallViewModel/CallViewModel.ts b/src/state/CallViewModel/CallViewModel.ts index 5bb71d6fc..62bf1507c 100644 --- a/src/state/CallViewModel/CallViewModel.ts +++ b/src/state/CallViewModel/CallViewModel.ts @@ -658,9 +658,13 @@ export function createCallViewModel$( function* ([members, duplicateTiles]) { for (const member of members) { const mediaId = `${member.userId}:${member.deviceId}`; + // A device that rejoins after an improper leave has two + // memberships until the stale one expires, so the key is the + // membership's own id, which the backend identity no longer + // tells apart for (let dup = 0; dup < 1 + duplicateTiles; dup++) { yield { - keys: [dup, mediaId, member.rtcBackendIdentity], + keys: [dup, mediaId, member.memberId], data: member, }; } diff --git a/src/tracks/MemberAudioRenderer.tsx b/src/tracks/MemberAudioRenderer.tsx index dd9beb14b..e18f6fef7 100644 --- a/src/tracks/MemberAudioRenderer.tsx +++ b/src/tracks/MemberAudioRenderer.tsx @@ -100,7 +100,7 @@ export const MemberAudioRenderer: FC = ({
{members.map((member) => (