[RN] Use a default host when only a room name is specified
The mobile app remembers the domain which hosted the last conference. If the user specified a full URL first and specified a room name only the second time, it was not obvious that the second conference would be hosted on the domain of the first conference.
This commit is contained in:
parent
0dbbc5d8b6
commit
d93bd3eda7
|
@ -24,16 +24,27 @@ export function appInit() {
|
||||||
* Triggers an in-app navigation to a different route. Allows navigation to be
|
* Triggers an in-app navigation to a different route. Allows navigation to be
|
||||||
* abstracted between the mobile and web versions.
|
* abstracted between the mobile and web versions.
|
||||||
*
|
*
|
||||||
* @param {(string|undefined)} urlOrRoom - The URL or room name to which to
|
* @param {(string|undefined)} uri - The URI to which to navigate. It may be a
|
||||||
* navigate.
|
* full URL with an http(s) scheme, a full or partial URI with the app-specific
|
||||||
|
* sheme, or a mere room name.
|
||||||
* @returns {Function}
|
* @returns {Function}
|
||||||
*/
|
*/
|
||||||
export function appNavigate(urlOrRoom) {
|
export function appNavigate(uri) {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const oldDomain = getDomain(state);
|
const oldDomain = getDomain(state);
|
||||||
|
|
||||||
const { domain, room } = _parseURIString(urlOrRoom);
|
// eslint-disable-next-line prefer-const
|
||||||
|
let { domain, room } = _parseURIString(uri);
|
||||||
|
|
||||||
|
// If the specified URI does not identify a domain, use the app's
|
||||||
|
// default.
|
||||||
|
if (typeof domain === 'undefined') {
|
||||||
|
domain
|
||||||
|
= _parseURIString(state['features/app'].app._getDefaultURL())
|
||||||
|
.domain;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// TODO Kostiantyn Tsaregradskyi: We should probably detect if user is
|
// TODO Kostiantyn Tsaregradskyi: We should probably detect if user is
|
||||||
// currently in a conference and ask her if she wants to close the
|
// currently in a conference and ask her if she wants to close the
|
||||||
|
@ -48,7 +59,7 @@ export function appNavigate(urlOrRoom) {
|
||||||
dispatch(setDomain(domain));
|
dispatch(setDomain(domain));
|
||||||
|
|
||||||
// If domain has changed, we need to load the config of the new
|
// If domain has changed, we need to load the config of the new
|
||||||
// domain and set it, and only after that we can navigate to
|
// domain and set it, and only after that we can navigate to a
|
||||||
// different route.
|
// different route.
|
||||||
loadConfig(`https://${domain}`)
|
loadConfig(`https://${domain}`)
|
||||||
.then(
|
.then(
|
||||||
|
@ -92,7 +103,7 @@ export function appNavigate(urlOrRoom) {
|
||||||
dispatch(
|
dispatch(
|
||||||
_setRoomAndNavigate(
|
_setRoomAndNavigate(
|
||||||
typeof room === 'undefined' && typeof domain === 'undefined'
|
typeof room === 'undefined' && typeof domain === 'undefined'
|
||||||
? urlOrRoom
|
? uri
|
||||||
: room));
|
: room));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -76,7 +76,9 @@ export class AbstractApp extends Component {
|
||||||
|
|
||||||
dispatch(localParticipantJoined());
|
dispatch(localParticipantJoined());
|
||||||
|
|
||||||
this._openURL(this._getDefaultURL());
|
// If a URL was explicitly specified to this React Component, then open
|
||||||
|
// it; otherwise, use a default.
|
||||||
|
this._openURL(this.props.url || this._getDefaultURL());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -211,27 +213,20 @@ export class AbstractApp extends Component {
|
||||||
/**
|
/**
|
||||||
* Gets the default URL to be opened when this App mounts.
|
* Gets the default URL to be opened when this App mounts.
|
||||||
*
|
*
|
||||||
* @private
|
* @protected
|
||||||
* @returns {string} The default URL to be opened when this App mounts.
|
* @returns {string} The default URL to be opened when this App mounts.
|
||||||
*/
|
*/
|
||||||
_getDefaultURL() {
|
_getDefaultURL() {
|
||||||
// If the URL was explicitly specified to the React Component, then open
|
|
||||||
// it.
|
|
||||||
let url = this.props.url;
|
|
||||||
|
|
||||||
if (url) {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the execution environment provides a Location abstraction, then
|
// If the execution environment provides a Location abstraction, then
|
||||||
// this App at already at that location but it must be made aware of the
|
// this App at already at that location but it must be made aware of the
|
||||||
// fact.
|
// fact.
|
||||||
const windowLocation = this._getWindowLocation();
|
const windowLocation = this._getWindowLocation();
|
||||||
|
|
||||||
if (windowLocation) {
|
if (windowLocation) {
|
||||||
url = windowLocation.toString();
|
const href = windowLocation.toString();
|
||||||
if (url) {
|
|
||||||
return url;
|
if (href) {
|
||||||
|
return href;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue