From 8cd62bc13293a0ec384d54692c57880fab7c10cf Mon Sep 17 00:00:00 2001 From: Horatiu Muresan <39557534+horymury@users.noreply.github.com> Date: Thu, 16 Feb 2023 18:14:10 +0200 Subject: [PATCH] fix(external-api) Unpin all participants when participant id is null (#12921) --- modules/API/API.js | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/API/API.js b/modules/API/API.js index 9a4b3345cf..83112b7b39 100644 --- a/modules/API/API.js +++ b/modules/API/API.js @@ -71,8 +71,13 @@ import { import { appendSuffix } from '../../react/features/display-name'; import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox'; import { setMediaEncryptionKey, toggleE2EE } from '../../react/features/e2ee/actions'; -import { addStageParticipant, resizeFilmStrip, setVolume } from '../../react/features/filmstrip/actions.web'; -import { isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web'; +import { + addStageParticipant, + resizeFilmStrip, + setVolume, + togglePinStageParticipant +} from '../../react/features/filmstrip/actions.web'; +import { getPinnedActiveParticipants, isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web'; import { invite } from '../../react/features/invite'; import { selectParticipantInLargeVideo @@ -241,6 +246,22 @@ function initCommands() { logger.debug('Pin participant command received'); const state = APP.store.getState(); + + // if id not provided, unpin everybody. + if (!id) { + if (isStageFilmstripAvailable(state)) { + const pinnedParticipants = getPinnedActiveParticipants(state); + + pinnedParticipants?.forEach(p => { + APP.store.dispatch(togglePinStageParticipant(p.participantId)); + }); + } else { + APP.store.dispatch(pinParticipant()); + } + + return; + } + const participant = videoType === VIDEO_TYPE.DESKTOP ? getVirtualScreenshareParticipantByOwnerId(state, id) : getParticipantById(state, id); @@ -254,7 +275,7 @@ function initCommands() { const participantId = participant.id; - if (isStageFilmstripAvailable(APP.store.getState())) { + if (isStageFilmstripAvailable(state)) { APP.store.dispatch(addStageParticipant(participantId, true)); } else { APP.store.dispatch(pinParticipant(participantId));