Files
jitsi-meet/react/features/prejoin/functions.js
Jaya Allamsetty 0138f23755 feat(conference): Enable forced reload of client on bridge failure.
* feat(conference): Enable forced reload of client on bridge failure.
Force the client to reload when the bridge that is handling the media goes down.
This mitigates issues seen on the bridge because of a client re-joining the call with the same endpointId, BWE issues, etc.
This behavior is configurable through 'enableForcedReload' setting in config.js.
The client skips the pre-join page when the page reloads.

* squash: refactor the restart logic.

* squash: fix description

* squash: dispatch conferenceWillLeave action before reload.
2021-02-04 12:33:18 -05:00

165 lines
4.6 KiB
JavaScript

// @flow
import { getRoomName } from '../base/conference';
import { getDialOutStatusUrl, getDialOutUrl } from '../base/config/functions';
import { isAudioMuted, isVideoMutedByUser } from '../base/media';
/**
* Selector for the visibility of the 'join by phone' button.
*
* @param {Object} state - The state of the app.
* @returns {boolean}
*/
export function isJoinByPhoneButtonVisible(state: Object): boolean {
return Boolean(getDialOutUrl(state) && getDialOutStatusUrl(state));
}
/**
* Selector for determining if the device status strip is visible or not.
*
* @param {Object} state - The state of the app.
* @returns {boolean}
*/
export function isDeviceStatusVisible(state: Object): boolean {
return !(isAudioMuted(state) && isVideoMutedByUser(state))
&& !state['features/base/config'].startSilent;
}
/**
* Selector for determining if the display name is mandatory.
*
* @param {Object} state - The state of the app.
* @returns {boolean}
*/
export function isDisplayNameRequired(state: Object): boolean {
return state['features/prejoin'].isDisplayNameRequired
|| state['features/base/config'].requireDisplayName;
}
/**
* Selector for determining if the user has chosen to skip prejoin page.
*
* @param {Object} state - The state of the app.
* @returns {boolean}
*/
export function isPrejoinSkipped(state: Object) {
return state['features/prejoin'].userSelectedSkipPrejoin;
}
/**
* Returns the text for the prejoin status bar.
*
* @param {Object} state - The state of the app.
* @returns {string}
*/
export function getDeviceStatusText(state: Object): string {
return state['features/prejoin']?.deviceStatusText;
}
/**
* Returns the type of the prejoin status bar: 'ok'|'warning'.
*
* @param {Object} state - The state of the app.
* @returns {string}
*/
export function getDeviceStatusType(state: Object): string {
return state['features/prejoin']?.deviceStatusType;
}
/**
* Returns the 'conferenceUrl' used for dialing out.
*
* @param {Object} state - The state of the app.
* @returns {string}
*/
export function getDialOutConferenceUrl(state: Object): string {
return `${getRoomName(state)}@${state['features/base/config'].hosts.muc}`;
}
/**
* Selector for getting the dial out country.
*
* @param {Object} state - The state of the app.
* @returns {Object}
*/
export function getDialOutCountry(state: Object): Object {
return state['features/prejoin'].dialOutCountry;
}
/**
* Selector for getting the dial out number (without prefix).
*
* @param {Object} state - The state of the app.
* @returns {string}
*/
export function getDialOutNumber(state: Object): string {
return state['features/prejoin'].dialOutNumber;
}
/**
* Selector for getting the dial out status while calling.
*
* @param {Object} state - The state of the app.
* @returns {string}
*/
export function getDialOutStatus(state: Object): string {
return state['features/prejoin'].dialOutStatus;
}
/**
* Returns the full dial out number (containing country code and +).
*
* @param {Object} state - The state of the app.
* @returns {string}
*/
export function getFullDialOutNumber(state: Object): string {
const dialOutNumber = getDialOutNumber(state);
const country = getDialOutCountry(state);
return `+${country.dialCode}${dialOutNumber}`;
}
/**
* Selector for getting the error if any while creating streams.
*
* @param {Object} state - The state of the app.
* @returns {string}
*/
export function getRawError(state: Object): string {
return state['features/prejoin']?.rawError;
}
/**
* Selector for getting the visiblity state for the 'JoinByPhoneDialog'.
*
* @param {Object} state - The state of the app.
* @returns {boolean}
*/
export function isJoinByPhoneDialogVisible(state: Object): boolean {
return state['features/prejoin']?.showJoinByPhoneDialog;
}
/**
* Returns true if the prejoin page is enabled and no flag
* to bypass showing the page is present.
*
* @param {Object} state - The state of the app.
* @returns {boolean}
*/
export function isPrejoinPageEnabled(state: Object): boolean {
return navigator.product !== 'ReactNative'
&& state['features/base/config'].prejoinPageEnabled
&& !state['features/base/settings'].userSelectedSkipPrejoin
&& !(state['features/base/config'].enableForcedReload && state['features/prejoin'].skipPrejoinOnReload);
}
/**
* Returns true if the prejoin page is visible & active.
*
* @param {Object} state - The state of the app.
* @returns {boolean}
*/
export function isPrejoinPageVisible(state: Object): boolean {
return isPrejoinPageEnabled(state) && state['features/prejoin']?.showPrejoin;
}