text: // @flow
  
  import { createToolbarEvent, sendAnalytics } from '../../../analytics';
  import { openDialog } from '../../../base/dialog';
  import { translate } from '../../../base/i18n';
  import { IconMute } from '../../../base/icons';
  import { getLocalParticipant, PARTICIPANT_ROLE } from '../../../base/participants';
  import { connect } from '../../../base/redux';
  import { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';
  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<Props, *> {
      accessibilityLabel = 'toolbar.accessibilityLabel.muteEveryone';
      icon = IconMute;
      label = 'toolbar.mute';
      tooltip = 'toolbar.mute';
  
      /**
       * 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));
  