// @flow import React from 'react'; import { appNavigate, reloadNow } from '../../../app/actions'; import { ConfirmDialog } from '../../../base/dialog'; import { translate } from '../../../base/i18n'; import { connect } from '../../../base/redux'; import { setFatalError, setPageReloadOverlayCanceled } from '../../actions'; import AbstractPageReloadOverlay, { abstractMapStateToProps, type Props } from '../AbstractPageReloadOverlay'; import OverlayFrame from './OverlayFrame'; /** * Implements a React Component for page reload overlay. Shown before the * conference is reloaded. Shows a warning message and counts down towards the * reload. */ class PageReloadOverlay extends AbstractPageReloadOverlay { _interval: IntervalID; /** * Initializes a new PageReloadOverlay instance. * * @param {Object} props - The read-only properties with which the new * instance is to be initialized. * @public */ constructor(props) { super(props); this._onCancel = this._onCancel.bind(this); this._onReloadNow = this._onReloadNow.bind(this); } _onCancel: () => void; /** * Handle clicking of the "Cancel" button. It will navigate back to the * welcome page. * * @private * @returns {void} */ _onCancel() { clearInterval(this._interval); this.props.dispatch(setPageReloadOverlayCanceled(this.props.error)); this.props.dispatch(setFatalError(undefined)); this.props.dispatch(appNavigate(undefined)); } _onReloadNow: () => void; /** * Handle clicking on the "Reload Now" button. It will navigate to the same * conference URL as before immediately, without waiting for the timer to * kick in. * * @private * @returns {void} */ _onReloadNow() { clearInterval(this._interval); this.props.dispatch(reloadNow()); } /** * Implements React's {@link Component#render()}. * * @inheritdoc * @returns {ReactElement} */ render() { const { t } = this.props; const { message, timeLeft, title } = this.state; return ( ); } } export default translate(connect(abstractMapStateToProps)(PageReloadOverlay));