// @flow import React, { Component } from 'react'; import { connect } from 'react-redux'; import { Dialog } from '../../../base/dialog'; import { translate } from '../../../base/i18n'; import { createRecordingDialogEvent, sendAnalytics } from '../../../analytics'; /** * The type of the React {@code Component} props of * {@link StopLiveStreamDialog}. */ type Props = { /** * The {@code JitsiConference} for the current conference. */ _conference: Object, /** * The redux representation of the live stremaing to be stopped. */ session: Object, /** * Invoked to obtain translated strings. */ t: Function }; /** * A React Component for confirming the participant wishes to stop the currently * active live stream of the conference. * * @extends Component */ class StopLiveStreamDialog extends Component { /** * Initializes a new {@code StopLiveStreamDialog} instance. * * @param {Object} props - The read-only properties with which the new * instance is to be initialized. */ constructor(props: Props) { super(props); // Bind event handler so it is only bound once for every instance. this._onSubmit = this._onSubmit.bind(this); } /** * Implements React's {@link Component#render()}. * * @inheritdoc * @returns {ReactElement} */ render() { return ( { this.props.t('dialog.stopStreamingWarning') } ); } _onSubmit: () => boolean; /** * Callback invoked when stopping of live streaming is confirmed. * * @private * @returns {boolean} True to close the modal. */ _onSubmit() { sendAnalytics(createRecordingDialogEvent('stop', 'confirm.button')); const { session } = this.props; if (session) { this.props._conference.stopRecording(session.id); } return true; } } /** * Maps (parts of) the redux state to the React {@code Component} props of * {@code StopLiveStreamDialog}. * * @param {Object} state - The redux state. * @private * @returns {{ * _conference: Object * }} */ function _mapStateToProps(state) { return { _conference: state['features/base/conference'].conference }; } export default translate(connect(_mapStateToProps)(StopLiveStreamDialog));