Files
jitsi-meet/react/features/toolbox/components/AudioMuteButton.js
Lyubo Marinov 3aff4967f1 Keep buttons in their associated features
Contributing all buttons in one place goes against the designs that we
set out at the beginning of the project's rewrite and that multiple of
us have been following since then.
2018-05-15 14:12:38 -05:00

93 lines
2.1 KiB
JavaScript

// @flow
import { connect } from 'react-redux';
import {
AUDIO_MUTE,
createToolbarEvent,
sendAnalytics
} from '../../analytics';
import { translate } from '../../base/i18n';
import { MEDIA_TYPE, setAudioMuted } from '../../base/media';
import { AbstractAudioMuteButton } from '../../base/toolbox';
import type { AbstractButtonProps } from '../../base/toolbox';
import { isLocalTrackMuted } from '../../base/tracks';
type Props = AbstractButtonProps & {
/**
* Whether audio is currently muted or not.
*/
_audioMuted: boolean,
/**
* The redux {@code dispatch} function.
*/
dispatch: Function
}
/**
* Component that renders a toolbar button for toggling audio mute.
*
* @extends AbstractAudioMuteButton
*/
class AudioMuteButton extends AbstractAudioMuteButton<Props, *> {
label = 'toolbar.mute';
tooltip = 'toolbar.mute';
/**
* Indicates if this button should be disabled or not.
*
* @override
* @private
* @returns {boolean}
*/
_isDisabled() {
return false;
}
/**
* Indicates if audio is currently muted ot nor.
*
* @override
* @private
* @returns {boolean}
*/
_isAudioMuted() {
return this.props._audioMuted;
}
/**
* Changes the muted state.
*
* @param {boolean} audioMuted - Whether audio should be muted or not.
* @private
* @returns {void}
*/
_setAudioMuted(audioMuted: boolean) {
sendAnalytics(createToolbarEvent(AUDIO_MUTE, { enable: audioMuted }));
this.props.dispatch(setAudioMuted(audioMuted));
}
}
/**
* Maps (parts of) the redux state to the associated props for the
* {@code AudioMuteButton} component.
*
* @param {Object} state - The Redux state.
* @private
* @returns {{
* _audioMuted: boolean
* }}
*/
function _mapStateToProps(state): Object {
const tracks = state['features/base/tracks'];
return {
_audioMuted: isLocalTrackMuted(tracks, MEDIA_TYPE.AUDIO)
};
}
export default translate(connect(_mapStateToProps)(AudioMuteButton));