Flow, coding style

This commit is contained in:
Lyubo Marinov 2017-10-09 10:03:02 -05:00
parent bb39ffe562
commit 2d73e9ace4
5 changed files with 54 additions and 51 deletions

View File

@ -185,7 +185,7 @@ function _pinParticipant(store, next, action) {
let videoType;
if ((participantById && participantById.local)
|| (!id && pinnedParticipant && pinnedParticipant.local)) {
|| (!id && pinnedParticipant && pinnedParticipant.local)) {
videoType = 'local';
} else {
videoType = 'remote';

View File

@ -32,6 +32,22 @@ export function dominantSpeakerChanged(id) {
};
}
/**
* Create an action for removing a participant from the conference.
*
* @param {string} id - Participant's ID.
* @returns {{
* type: KICK_PARTICIPANT,
* id: string
* }}
*/
export function kickParticipant(id) {
return {
type: KICK_PARTICIPANT,
id
};
}
/**
* Creates an action to signal the connection status of the local participant
* has changed.
@ -47,27 +63,12 @@ export function localParticipantConnectionStatusChanged(connectionStatus) {
if (participant) {
return dispatch(participantConnectionStatusChanged(
participant.id, connectionStatus));
participant.id,
connectionStatus));
}
};
}
/**
* Create an action for removing a participant from the conference.
*
* @param {string} id - Participant's ID.
* @returns {{
* type: KICK_PARTICIPANT,
* id: string
* }}
*/
export function kickParticipant(id) {
return {
type: KICK_PARTICIPANT,
id
};
}
/**
* Action to signal that the ID of local participant has changed. It happens
* when the local participant joins a new conference or leaves an existing
@ -106,6 +107,21 @@ export function localParticipantJoined(participant = {}) {
});
}
/**
* Action to remove a local participant.
*
* @returns {Function}
*/
export function localParticipantLeft() {
return (dispatch, getState) => {
const participant = getLocalParticipant(getState);
if (participant) {
return dispatch(participantLeft(participant.id));
}
};
}
/**
* Action to signal the role of the local participant has changed. It can happen
* when the participant has joined a conference, even before a non-default local
@ -164,21 +180,6 @@ export function participantConnectionStatusChanged(id, connectionStatus) {
};
}
/**
* Action to remove a local participant.
*
* @returns {Function}
*/
export function localParticipantLeft() {
return (dispatch, getState) => {
const participant = getLocalParticipant(getState);
if (participant) {
return dispatch(participantLeft(participant.id));
}
};
}
/**
* Action to signal that a participant's display name has changed.
*

View File

@ -110,33 +110,35 @@ function _electLastVisibleRemoteVideo(tracks) {
* @returns {(string|undefined)}
*/
function _electParticipantInLargeVideo(state) {
// First get the pinned participant. If a participant is pinned, they will
// be shown in the LargeVideo.
// 1. If a participant is pinned, they will be shown in the LargeVideo (
// regardless of whether they are local or remote).
const participants = state['features/base/participants'];
let participant = participants.find(p => p.pinned);
let id = participant && participant.id;
if (!id) {
// No participant is pinned so get the dominant speaker. But the local
// participant won't be displayed in LargeVideo even if he/she is the
// dominant speaker.
// 2. No participant is pinned so get the dominant speaker. But the
// local participant won't be displayed in LargeVideo even if she is
// the dominant speaker.
participant = participants.find(p => p.dominantSpeaker && !p.local);
id = participant && participant.id;
if (!id) {
// There is no dominant speaker so select the participant which last
// had visible video (excluding ourselves).
// 3. There is no dominant speaker so select the remote participant
// who last had visible video.
const tracks = state['features/base/tracks'];
const videoTrack = _electLastVisibleRemoteVideo(tracks);
id = videoTrack && videoTrack.participantId;
if (!id) {
// It's possible there is no participant with visible video,
// this can happen for a number or reasons:
// - there is only one participant (the local user)
// - other participants joined with video muted
// As a last resort, pick the last participant.
// 4. It's possible there is no participant with visible video.
// This can happen for a number of reasons:
// - there is only one participant (i.e. the local user),
// - other participants joined with video muted.
// As a last resort, pick the last participant who joined the
// conference (regardless of whether they are local or
// remote).
participant = participants[participants.length - 1];
id = participant && participant.id;
}

View File

@ -1,3 +1,5 @@
// @flow
import {
DOMINANT_SPEAKER_CHANGED,
PARTICIPANT_JOINED,
@ -12,10 +14,7 @@ import {
TRACK_UPDATED
} from '../base/tracks';
import {
selectParticipant,
selectParticipantInLargeVideo
} from './actions';
import { selectParticipant, selectParticipantInLargeVideo } from './actions';
/**
* Middleware that catches actions related to participants and tracks and
@ -37,7 +36,7 @@ MiddlewareRegistry.register(store => next => action => {
store.dispatch(selectParticipantInLargeVideo());
break;
case TRACK_UPDATED: {
case TRACK_UPDATED:
// In order to minimize re-calculations, we need to select participant
// only if the videoType of the current participant rendered in
// LargeVideo has changed.
@ -54,7 +53,6 @@ MiddlewareRegistry.register(store => next => action => {
}
break;
}
}
return result;
});

View File

@ -1,3 +1,5 @@
// @flow
import { PARTICIPANT_ID_CHANGED } from '../base/participants';
import { ReducerRegistry } from '../base/redux';