import React, { Component } from 'react'; import { WithTranslation } from 'react-i18next'; import { IReduxState, IStore } from '../../../app/types'; import { translate } from '../../../base/i18n/functions'; import { connect } from '../../../base/redux/functions'; import { updateSettings } from '../../../base/settings/actions'; import { shouldHideShareAudioHelper } from '../../../base/settings/functions.any'; import { toggleScreensharing } from '../../../base/tracks/actions'; import Checkbox from '../../../base/ui/components/web/Checkbox'; import Dialog from '../../../base/ui/components/web/Dialog'; /** * The type of the React {@code Component} props of {@link ShareAudioDialog}. */ export interface IProps extends WithTranslation { /** * Boolean stored in local storage that determines whether or not the dialog will be displayed again. */ _shouldHideShareAudioHelper: boolean; /** * The redux {@code dispatch} function. */ dispatch: IStore['dispatch']; } /** * Component that displays the audio screen share helper dialog. */ class ShareAudioDialog extends Component { /** * Instantiates a new component. * * @inheritdoc */ constructor(props: IProps) { super(props); this._onContinue = this._onContinue.bind(this); this._onSelectHideShareAudioHelper = this._onSelectHideShareAudioHelper.bind(this); } /** * Continue the normal screen sharing flow when the user clicks continue. * * @returns {boolean} */ _onContinue() { // Pass undefined as the first parameter so the underlying logic decides weather or not to stop screen sharing. this.props.dispatch(toggleScreensharing(undefined, true)); return true; } /** * Callback invoked when the hide audio helper checkbox has been selected. This setting will be persisted in * the local storage, thus the dialog won't be displayed again. * * @param {Object} e - The key event to handle. * @returns {void} */ _onSelectHideShareAudioHelper({ target: { checked } }: React.ChangeEvent) { this.props.dispatch(updateSettings({ hideShareAudioHelper: checked })); } /** * Implements {@Component#render}. * * @inheritdoc */ render() { const { t } = this.props; return (
); } } /** * Maps part of the Redux state to the props of this component. * * @param {IReduxState} state - The Redux state. * @private * @returns {IProps} */ function _mapStateToProps(state: IReduxState): Partial { return { _shouldHideShareAudioHelper: shouldHideShareAudioHelper(state) }; } export default translate(connect(_mapStateToProps)(ShareAudioDialog));