From 20f3ced96e72c25b09ebaf6ccfc70adfc75c5dd1 Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 28 Nov 2024 19:05:29 +0100 Subject: [PATCH] allow join unmuted in widget mode --- src/room/MuteStates.test.tsx | 35 ++++++++++++++++++++++++++++++++++- src/room/MuteStates.ts | 7 ++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/room/MuteStates.test.tsx b/src/room/MuteStates.test.tsx index 6cc5815c..22c1bce5 100644 --- a/src/room/MuteStates.test.tsx +++ b/src/room/MuteStates.test.tsx @@ -156,8 +156,14 @@ describe("useMuteStates", () => { expect(screen.getByTestId("video-enabled").textContent).toBe("false"); }); - it("skipLobby mutes inputs", () => { + it("skipLobby mutes inputs on SPA", () => { mockConfig(); + vi.mock("../widget", () => { + return { + widget: null, + ElementWidgetActions: {}, + }; + }); render( @@ -169,4 +175,31 @@ describe("useMuteStates", () => { expect(screen.getByTestId("audio-enabled").textContent).toBe("false"); expect(screen.getByTestId("video-enabled").textContent).toBe("false"); }); + + it("skipLobby does not mute inputs in widget mode", () => { + mockConfig(); + vi.mock("../widget", () => { + return { + widget: { + api: { + transport: { + send: async (): Promise => new Promise((r) => r()), + }, + }, + lazyActions: { on: vi.fn(), off: vi.fn() }, + }, + ElementWidgetActions: {}, + }; + }); + + render( + + + + + , + ); + expect(screen.getByTestId("audio-enabled").textContent).toBe("true"); + expect(screen.getByTestId("video-enabled").textContent).toBe("true"); + }); }); diff --git a/src/room/MuteStates.ts b/src/room/MuteStates.ts index 1452c250..e733314c 100644 --- a/src/room/MuteStates.ts +++ b/src/room/MuteStates.ts @@ -74,13 +74,14 @@ export function useMuteStates(): MuteStates { const devices = useMediaDevices(); const { skipLobby } = useUrlParams(); - + // In SPA without lobby we need to protect from unmuted joins (Privacy). + const allowStartUnmuted = !skipLobby || widget !== null; const audio = useMuteState(devices.audioInput, () => { - return Config.get().media_devices.enable_audio && !skipLobby; + return Config.get().media_devices.enable_audio && allowStartUnmuted; }); const video = useMuteState( devices.videoInput, - () => Config.get().media_devices.enable_video && !skipLobby, + () => Config.get().media_devices.enable_video && allowStartUnmuted, ); useEffect(() => {