123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // @flow
-
- import { setRemoteParticipants } from './actions';
-
- /**
- * Computes the reorderd list of the remote participants.
- *
- * @param {*} store - The redux store.
- * @param {string} participantId - The endpoint id of the participant that joined the call.
- * @returns {void}
- * @private
- */
- export function updateRemoteParticipants(store: Object, participantId: ?number) {
- const state = store.getState();
- const { enableThumbnailReordering = true } = state['features/base/config'];
- let reorderedParticipants = [];
-
- if (!enableThumbnailReordering) {
- if (participantId) {
- const { remoteParticipants } = state['features/filmstrip'];
-
- reorderedParticipants = [ ...remoteParticipants, participantId ];
- store.dispatch(setRemoteParticipants(reorderedParticipants));
- }
-
- return;
- }
-
- const {
- fakeParticipants,
- sortedRemoteParticipants,
- sortedRemoteScreenshares,
- speakersList
- } = state['features/base/participants'];
- const remoteParticipants = new Map(sortedRemoteParticipants);
- const screenShares = new Map(sortedRemoteScreenshares);
- const sharedVideos = fakeParticipants ? Array.from(fakeParticipants.keys()) : [];
- const speakers = new Map(speakersList);
-
- for (const screenshare of screenShares.keys()) {
- remoteParticipants.delete(screenshare);
- speakers.delete(screenshare);
- }
- for (const sharedVideo of sharedVideos) {
- remoteParticipants.delete(sharedVideo);
- speakers.delete(sharedVideo);
- }
- for (const speaker of speakers.keys()) {
- remoteParticipants.delete(speaker);
- }
-
- // Always update the order of the thumnails.
- reorderedParticipants = [
- ...Array.from(screenShares.keys()),
- ...sharedVideos,
- ...Array.from(speakers.keys()),
- ...Array.from(remoteParticipants.keys())
- ];
-
- store.dispatch(setRemoteParticipants(reorderedParticipants));
- }
-
- /**
- * Private helper to calculate the reordered list of remote participants when a participant leaves.
- *
- * @param {*} store - The redux store.
- * @param {string} participantId - The endpoint id of the participant leaving the call.
- * @returns {void}
- * @private
- */
- export function updateRemoteParticipantsOnLeave(store: Object, participantId: ?string = null) {
- if (!participantId) {
- return;
- }
- const state = store.getState();
- const { remoteParticipants } = state['features/filmstrip'];
- const reorderedParticipants = new Set(remoteParticipants);
-
- reorderedParticipants.delete(participantId)
- && store.dispatch(setRemoteParticipants(Array.from(reorderedParticipants)));
- }
|