// @flow import { createToolbarEvent, sendAnalytics } from '../../../analytics'; import { openDialog } from '../../../base/dialog'; import { translate } from '../../../base/i18n'; import { IconMuteEveryone } from '../../../base/icons'; import { getLocalParticipant, PARTICIPANT_ROLE } from '../../../base/participants'; import { connect } from '../../../base/redux'; import { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox'; import { MuteEveryoneDialog } from '../../../remote-video-menu'; type Props = AbstractButtonProps & { /** * The Redux dispatch function. */ dispatch: Function, /* ** Whether the local participant is a moderator or not. */ isModerator: Boolean, /** * The ID of the local participant. */ localParticipantId: string }; /** * Implements a React {@link Component} which displays a button for audio muting * every participant (except the local one) */ class MuteEveryoneButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.muteEveryone'; icon = IconMuteEveryone; label = 'toolbar.muteEveryone'; tooltip = 'toolbar.muteEveryone'; /** * Handles clicking / pressing the button, and opens a confirmation dialog. * * @private * @returns {void} */ _handleClick() { const { dispatch, localParticipantId } = this.props; sendAnalytics(createToolbarEvent('mute.everyone.pressed')); dispatch(openDialog(MuteEveryoneDialog, { exclude: [ localParticipantId ] })); } } /** * Maps part of the redux state to the component's props. * * @param {Object} state - The redux store/state. * @param {Props} ownProps - The component's own props. * @returns {Object} */ function _mapStateToProps(state: Object, ownProps: Props) { const localParticipant = getLocalParticipant(state); const isModerator = localParticipant.role === PARTICIPANT_ROLE.MODERATOR; const { visible } = ownProps; const { disableRemoteMute } = state['features/base/config']; return { isModerator, localParticipantId: localParticipant.id, visible: visible && isModerator && !disableRemoteMute }; } export default translate(connect(_mapStateToProps)(MuteEveryoneButton));