mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-30 11:22:31 +00:00
Update video thumbnail design Update design of indicators In filmstrip view move Screen Sharing indicator to the top Removed dominant speaker indicator Use ContextMenu component for the connection stats popover Combine Remove video menu and Meeting participant context menu into one component Moved some styles from SCSS to JSS Fix mobile avatars too big Fix mobile horizontal scroll Created button for Send to breakout room action
104 lines
2.6 KiB
JavaScript
104 lines
2.6 KiB
JavaScript
// @flow
|
|
|
|
import {
|
|
createRemoteVideoMenuButtonEvent,
|
|
sendAnalytics
|
|
} from '../../analytics';
|
|
import { rejectParticipantAudio } from '../../av-moderation/actions';
|
|
import { IconMicDisabled } from '../../base/icons';
|
|
import { MEDIA_TYPE } from '../../base/media';
|
|
import { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';
|
|
import { isRemoteTrackMuted } from '../../base/tracks';
|
|
import { muteRemote } from '../actions.any';
|
|
|
|
export type Props = AbstractButtonProps & {
|
|
|
|
/**
|
|
* Boolean to indicate if the audio track of the participant is muted or
|
|
* not.
|
|
*/
|
|
_audioTrackMuted: boolean,
|
|
|
|
/**
|
|
* The redux {@code dispatch} function.
|
|
*/
|
|
dispatch: Function,
|
|
|
|
/**
|
|
* The ID of the participant object that this button is supposed to
|
|
* mute/unmute.
|
|
*/
|
|
participantID: string,
|
|
|
|
/**
|
|
* The function to be used to translate i18n labels.
|
|
*/
|
|
t: Function
|
|
};
|
|
|
|
/**
|
|
* An abstract remote video menu button which mutes the remote participant.
|
|
*/
|
|
export default class AbstractMuteButton extends AbstractButton<Props, *> {
|
|
accessibilityLabel = 'toolbar.accessibilityLabel.remoteMute';
|
|
icon = IconMicDisabled;
|
|
label = 'videothumbnail.domute';
|
|
toggledLabel = 'videothumbnail.muted';
|
|
|
|
/**
|
|
* Handles clicking / pressing the button, and mutes the participant.
|
|
*
|
|
* @private
|
|
* @returns {void}
|
|
*/
|
|
_handleClick() {
|
|
const { dispatch, participantID } = this.props;
|
|
|
|
sendAnalytics(createRemoteVideoMenuButtonEvent(
|
|
'mute',
|
|
{
|
|
'participant_id': participantID
|
|
}));
|
|
|
|
dispatch(muteRemote(participantID, MEDIA_TYPE.AUDIO));
|
|
dispatch(rejectParticipantAudio(participantID));
|
|
}
|
|
|
|
/**
|
|
* Renders the item disabled if the participant is muted.
|
|
*
|
|
* @inheritdoc
|
|
*/
|
|
_isDisabled() {
|
|
return this.props._audioTrackMuted;
|
|
}
|
|
|
|
/**
|
|
* Renders the item toggled if the participant is muted.
|
|
*
|
|
* @inheritdoc
|
|
*/
|
|
_isToggled() {
|
|
return this.props._audioTrackMuted;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function that maps parts of Redux state tree into component props.
|
|
*
|
|
* @param {Object} state - Redux state.
|
|
* @param {Object} ownProps - Properties of component.
|
|
* @private
|
|
* @returns {{
|
|
* _audioTrackMuted: boolean
|
|
* }}
|
|
*/
|
|
export function _mapStateToProps(state: Object, ownProps: Props) {
|
|
const tracks = state['features/base/tracks'];
|
|
|
|
return {
|
|
_audioTrackMuted: isRemoteTrackMuted(
|
|
tracks, MEDIA_TYPE.AUDIO, ownProps.participantID)
|
|
};
|
|
}
|