Use a more suitable filter operator to compute local member

This commit is contained in:
Robin
2025-12-15 12:52:23 -05:00
parent 6c622fc6e7
commit 00d4b8e985
3 changed files with 69 additions and 16 deletions

View File

@@ -52,7 +52,12 @@ import {
ScreenShareViewModel,
type UserMediaViewModel,
} from "../MediaViewModel";
import { accumulate, generateItems, pauseWhen } from "../../utils/observable";
import {
accumulate,
filterBehavior,
generateItems,
pauseWhen,
} from "../../utils/observable";
import {
duplicateTiles,
MatrixRTCMode,
@@ -505,16 +510,13 @@ export function createCallViewModel$(
),
);
const localMatrixLivekitMember$ =
scope.behavior<MatrixLivekitMember<"local"> | null>(
const localMatrixLivekitMember$: Behavior<MatrixLivekitMember<"local"> | null> =
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$) => ({
filterBehavior((membership) => membership !== null),
map((membership$) => {
if (membership$ === null) return null;
return {
membership$,
participant: {
type: "local" as const,
@@ -522,9 +524,8 @@ export function createCallViewModel$(
},
connection$: localMembership.connection$,
userId,
}),
),
map(([localMember]) => localMember ?? null),
};
}),
),
);