diff --git a/app/features/conference/components/Conference.js b/app/features/conference/components/Conference.js index 5c3dd02..a4b6d0d 100644 --- a/app/features/conference/components/Conference.js +++ b/app/features/conference/components/Conference.js @@ -101,7 +101,6 @@ class Conference extends Component { this._ref = React.createRef(); - this._navigateToHome = this._navigateToHome.bind(this); this._onIframeLoad = this._onIframeLoad.bind(this); } @@ -121,7 +120,8 @@ class Conference extends Component { script.async = true; script.onload = () => this._onScriptLoad(parentNode, room, serverURL); - script.onerror = this._navigateToHome; + script.onerror = (event: Event) => + this._navigateToHome(event, room, serverURL); script.src = getExternalApiURL(serverURL); this._ref.current.appendChild(script); @@ -186,15 +186,20 @@ class Conference extends Component { } } - _navigateToHome: (*) => void; - /** * Navigates to home screen (Welcome). * + * @param {Event} event - Event by which the function is called. + * @param {string} room - Room name. + * @param {string} serverURL - Server URL. * @returns {void} */ - _navigateToHome() { - this.props.dispatch(push('/')); + _navigateToHome(event: Event, room: ?string, serverURL: ?string) { + this.props.dispatch(push('/', { + error: event.type === 'error', + room, + serverURL + })); } /** @@ -231,7 +236,8 @@ class Conference extends Component { setupAlwaysOnTopRender(this._api); setupWiFiStats(iframe); - this._api.on('readyToClose', this._navigateToHome); + this._api.on('readyToClose', (event: Event) => + this._navigateToHome(event)); this._api.on('videoConferenceJoined', (conferenceInfo: Object) => this._onVideoConferenceJoined(conferenceInfo)); diff --git a/app/features/welcome/components/Welcome.js b/app/features/welcome/components/Welcome.js index d6cf1c9..1a50d01 100644 --- a/app/features/welcome/components/Welcome.js +++ b/app/features/welcome/components/Welcome.js @@ -22,6 +22,11 @@ type Props = { * Redux dispatch. */ dispatch: Dispatch<*>; + + /** + * React Router location object. + */ + location: Object; }; type State = { @@ -55,12 +60,36 @@ class Welcome extends Component { this._onJoin = this._onJoin.bind(this); } + /** + * Initialize url value in state if passed using location state object. + * + * @param {Props} props - New props of the component. + * @returns {State} - New state of the component. + */ + static getDerivedStateFromProps(props) { + let url = ''; + + // Check and parse url if exists in location state. + if (props.location.state) { + const { room, serverURL } = props.location.state; + + if (room && serverURL) { + url = `${serverURL}/${room}`; + } + } + + // Return local state object having input url. + return { url }; + } + /** * Render function of component. * * @returns {ReactElement} */ render() { + const { state } = this.props.location; + return ( }> @@ -69,6 +98,7 @@ class Welcome extends Component {