39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
// @ts-expect-error
|
|
import VideoLayout from '../../../modules/UI/videolayout/VideoLayout';
|
|
import StateListenerRegistry from '../base/redux/StateListenerRegistry';
|
|
import { getVideoTrackByParticipant } from '../base/tracks/functions.web';
|
|
|
|
import { getLargeVideoParticipant } from './functions';
|
|
|
|
/**
|
|
* Updates the on stage participant video.
|
|
*/
|
|
StateListenerRegistry.register(
|
|
/* selector */ state => state['features/large-video'].participantId,
|
|
/* listener */ participantId => {
|
|
VideoLayout.updateLargeVideo(participantId, true);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Schedules a large video update when the streaming status of the track associated with the large video changes.
|
|
*/
|
|
StateListenerRegistry.register(
|
|
/* selector */ state => {
|
|
const largeVideoParticipant = getLargeVideoParticipant(state);
|
|
const videoTrack = getVideoTrackByParticipant(state, largeVideoParticipant);
|
|
|
|
return {
|
|
participantId: largeVideoParticipant?.id,
|
|
streamingStatus: videoTrack?.streamingStatus
|
|
};
|
|
},
|
|
/* listener */ ({ participantId, streamingStatus }, previousState: any = {}) => {
|
|
if (streamingStatus !== previousState.streamingStatus) {
|
|
VideoLayout.updateLargeVideo(participantId, true);
|
|
}
|
|
}, {
|
|
deepEquals: true
|
|
}
|
|
);
|