123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- import { IReduxState } from '../app/types';
- import { getRoomName } from '../base/conference/functions';
- import { getDialOutStatusUrl, getDialOutUrl } from '../base/config/functions.any';
- import {
- MEETING_NAME_ENABLED,
- UNSAFE_ROOM_WARNING
- } from '../base/flags/constants';
- import { getFeatureFlag } from '../base/flags/functions';
- import { isAudioMuted, isVideoMutedByUser } from '../base/media/functions';
- import { getLobbyConfig } from '../lobby/functions';
-
-
- /**
- * Selector for the visibility of the 'join by phone' button.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isJoinByPhoneButtonVisible(state: IReduxState): boolean {
- return Boolean(getDialOutUrl(state) && getDialOutStatusUrl(state));
- }
-
- /**
- * Selector for determining if the device status strip is visible or not.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isDeviceStatusVisible(state: IReduxState): boolean {
- return !(isAudioMuted(state) && isVideoMutedByUser(state))
- && !state['features/base/config'].startSilent
-
- // This handles the case where disableInitialGUM=true and we haven't yet tried to create any tracks. In this
- // case we shouldn't display the the device status indicator. But once we create some tracks we can show it
- // because we would know if we created the tracks successfully or not.
- && (!state['features/base/config'].disableInitialGUM || state['features/base/tracks']?.length > 0);
- }
-
- /**
- * Selector for determining if the display name is mandatory.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isDisplayNameRequired(state: IReduxState): boolean {
- return Boolean(state['features/lobby']?.isDisplayNameRequiredError
- || state['features/base/config']?.requireDisplayName);
- }
-
- /**
- * Selector for determining if the prejoin page is enabled in config. Defaults to `true`.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isPrejoinEnabledInConfig(state: IReduxState): boolean {
- return state['features/base/config'].prejoinConfig?.enabled ?? true;
- }
-
- /**
- * Selector for determining if the prejoin display name field is visible.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isPrejoinDisplayNameVisible(state: IReduxState): boolean {
- return !state['features/base/config'].prejoinConfig?.hideDisplayName;
- }
-
- /**
- * Returns the text for the prejoin status bar.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {string}
- */
- export function getDeviceStatusText(state: IReduxState): string {
- return state['features/prejoin']?.deviceStatusText;
- }
-
- /**
- * Returns the type of the prejoin status bar: 'ok'|'warning'.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {string}
- */
- export function getDeviceStatusType(state: IReduxState): string {
- return state['features/prejoin']?.deviceStatusType;
- }
-
- /**
- * Returns the 'conferenceUrl' used for dialing out.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {string}
- */
- export function getDialOutConferenceUrl(state: IReduxState): string {
- return `${getRoomName(state)}@${state['features/base/config'].hosts?.muc}`;
- }
-
- /**
- * Selector for getting the dial out country.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {Object}
- */
- export function getDialOutCountry(state: IReduxState) {
- return state['features/prejoin'].dialOutCountry;
- }
-
- /**
- * Selector for getting the dial out number (without prefix).
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {string}
- */
- export function getDialOutNumber(state: IReduxState): string {
- return state['features/prejoin'].dialOutNumber;
- }
-
- /**
- * Selector for getting the dial out status while calling.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {string}
- */
- export function getDialOutStatus(state: IReduxState): string {
- return state['features/prejoin'].dialOutStatus;
- }
-
- /**
- * Returns the full dial out number (containing country code and +).
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {string}
- */
- export function getFullDialOutNumber(state: IReduxState): string {
- const dialOutNumber = getDialOutNumber(state);
- const country = getDialOutCountry(state);
-
- return `+${country.dialCode}${dialOutNumber}`;
- }
-
- /**
- * Selector for getting the error if any while creating streams.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {string}
- */
- export function getRawError(state: IReduxState): string {
- return state['features/prejoin']?.rawError;
- }
-
- /**
- * Selector for getting the visibility state for the 'JoinByPhoneDialog'.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isJoinByPhoneDialogVisible(state: IReduxState): 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 {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isPrejoinPageVisible(state: IReduxState): boolean {
- return Boolean(navigator.product !== 'ReactNative'
- && isPrejoinEnabledInConfig(state)
- && state['features/prejoin']?.showPrejoin
- && !(state['features/base/config'].enableForcedReload && state['features/prejoin'].skipPrejoinOnReload));
- }
-
- /**
- * Returns true if we should auto-knock in case lobby is enabled for the room.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function shouldAutoKnock(state: IReduxState): boolean {
- const { iAmRecorder, iAmSipGateway } = state['features/base/config'];
- const { userSelectedSkipPrejoin } = state['features/base/settings'];
- const { autoKnock } = getLobbyConfig(state);
-
- return Boolean(((isPrejoinEnabledInConfig(state) && !userSelectedSkipPrejoin)
- || autoKnock || (iAmRecorder && iAmSipGateway))
- && !state['features/lobby'].knocking);
- }
-
- /**
- * Returns true if the unsafe room warning flag is enabled.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isUnsafeRoomWarningEnabled(state: IReduxState): boolean {
- const { enableInsecureRoomNameWarning = false } = state['features/base/config'];
-
- return getFeatureFlag(state, UNSAFE_ROOM_WARNING, enableInsecureRoomNameWarning);
- }
-
- /**
- * Returns true if the room name is enabled.
- *
- * @param {IReduxState} state - The state of the app.
- * @returns {boolean}
- */
- export function isRoomNameEnabled(state: IReduxState): boolean {
- const { hideConferenceSubject = false } = state['features/base/config'];
-
- return getFeatureFlag(state, MEETING_NAME_ENABLED, true)
- && !hideConferenceSubject;
- }
|