39 lines
1.4 KiB
JavaScript
39 lines
1.4 KiB
JavaScript
// @flow
|
|
|
|
import { StateListenerRegistry } from '../base/redux';
|
|
|
|
import { updateRemoteParticipants } from './functions';
|
|
|
|
/**
|
|
* Listens for changes to the screensharing status of the remote participants to recompute the reordered list of the
|
|
* remote endpoints.
|
|
*/
|
|
StateListenerRegistry.register(
|
|
/* selector */ state => state['features/video-layout'].remoteScreenShares,
|
|
/* listener */ (remoteScreenShares, store) => updateRemoteParticipants(store));
|
|
|
|
/**
|
|
* Listens for changes to the dominant speaker to recompute the reordered list of the remote endpoints.
|
|
*/
|
|
StateListenerRegistry.register(
|
|
/* selector */ state => state['features/base/participants'].dominantSpeaker,
|
|
/* listener */ (dominantSpeaker, store) => _reorderDominantSpeakers(store));
|
|
|
|
/**
|
|
* Private helper function that reorders the remote participants based on dominant speaker changes.
|
|
*
|
|
* @param {*} store - The redux store.
|
|
* @returns {void}
|
|
* @private
|
|
*/
|
|
function _reorderDominantSpeakers(store) {
|
|
const state = store.getState();
|
|
const { dominantSpeaker, local } = state['features/base/participants'];
|
|
const { visibleRemoteParticipants } = state['features/filmstrip'];
|
|
|
|
// Reorder the participants if the new dominant speaker is currently not visible.
|
|
if (dominantSpeaker !== local?.id && !visibleRemoteParticipants.has(dominantSpeaker)) {
|
|
updateRemoteParticipants(store);
|
|
}
|
|
}
|