From cc8e250d96b0ea9a8c4a3b2a6c1691e98a69c8d9 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 8 Dec 2025 22:54:46 -0500 Subject: [PATCH] Remove a brittle cast from local member code --- src/state/CallViewModel/CallViewModel.ts | 32 +++++++++++------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/state/CallViewModel/CallViewModel.ts b/src/state/CallViewModel/CallViewModel.ts index fb50696f..b11c1357 100644 --- a/src/state/CallViewModel/CallViewModel.ts +++ b/src/state/CallViewModel/CallViewModel.ts @@ -504,25 +504,23 @@ export function createCallViewModel$( ), ); - const localMatrixLivekitMemberUninitialized = { - membership$: localRtcMembership$, - participant$: localMembership.participant$, - connection$: localMembership.connection$, - userId: userId, - }; - - const localMatrixLivekitMember$: Behavior = - scope.behavior( - localRtcMembership$.pipe( - switchMap((membership) => { - if (!membership) return of(null); - return of( - // casting is save here since we know that localRtcMembership$ is !== null since we reached this case. - localMatrixLivekitMemberUninitialized as MatrixLivekitMember, - ); + const localMatrixLivekitMember$ = scope.behavior( + localRtcMembership$.pipe( + generateItems( + // Generate a local member when membership is non-null + function* (membership) { + if (membership !== null) yield { keys: ["local"], data: membership }; + }, + (_scope, membership$) => ({ + membership$, + participant$: localMembership.participant$, + connection$: localMembership.connection$, + userId, }), ), - ); + map(([localMember]) => localMember ?? null), + ), + ); // ------------------------------------------------------------------------ // callLifecycle