123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- // @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;
- }
-
- /**
- * Returns true if we should auto-knock in case lobby is enabled for the room.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function shouldAutoKnock(state: Object): boolean {
- const { iAmRecorder, iAmSipGateway } = state['features/base/config'];
-
- return (isPrejoinPageEnabled(state) || (iAmRecorder && iAmSipGateway))
- && !state['features/lobby'].knocking;
- }
|