From f8a051ee11b38cc8953cfc66e4e1181f218983b2 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 20 Aug 2025 12:07:06 +0200 Subject: [PATCH] Address review feedback --- src/state/MediaViewModel.test.ts | 5 +++-- src/state/MediaViewModel.ts | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/state/MediaViewModel.test.ts b/src/state/MediaViewModel.test.ts index 1e5e3e58..8b186658 100644 --- a/src/state/MediaViewModel.test.ts +++ b/src/state/MediaViewModel.test.ts @@ -182,8 +182,9 @@ test("switch cameras", async () => { async (vm) => { // Switch to back camera getValue(vm.switchCamera$)!(); - expect(restartTrack).toHaveBeenCalledTimes(1); - expect(restartTrack).toHaveBeenCalledWith({ facingMode: "environment" }); + expect(restartTrack).toHaveBeenCalledExactlyOnceWith({ + facingMode: "environment", + }); await waitFor(() => { expect(selectVideoInput).toHaveBeenCalledTimes(1); expect(selectVideoInput).toHaveBeenCalledWith("back camera"); diff --git a/src/state/MediaViewModel.ts b/src/state/MediaViewModel.ts index 704440a1..2e690226 100644 --- a/src/state/MediaViewModel.ts +++ b/src/state/MediaViewModel.ts @@ -456,11 +456,13 @@ export class LocalUserMediaViewModel extends BaseUserMediaViewModel { const track = v?.publication?.track; if (!(track instanceof LocalVideoTrack)) return of(null); return merge( - // Watch for track restarts because they indicate a camera switch + // Watch for track restarts because they indicate a camera switch. + // This event is also emitted when unmuting the track object. fromEvent(track, TrackEvent.Restarted).pipe( startWith(null), map(() => track), ), + // When the track object is muted, reset it to null. fromEvent(track, TrackEvent.Muted).pipe(map(() => null)), ); }),