import React from 'react'; import { Text, TextStyle, View, ViewStyle } from 'react-native'; import { connect } from 'react-redux'; import { IReduxState } from '../../../app/types'; import { login } from '../../../authentication/actions.any'; import { getConferenceName } from '../../../base/conference/functions'; import { translate } from '../../../base/i18n/functions'; import JitsiScreen from '../../../base/modal/components/JitsiScreen'; import LoadingIndicator from '../../../base/react/components/native/LoadingIndicator'; import { ASPECT_RATIO_WIDE } from '../../../base/responsive-ui/constants'; import BaseTheme from '../../../base/ui/components/BaseTheme.native'; import Button from '../../../base/ui/components/native/Button'; import Input from '../../../base/ui/components/native/Input'; import { BUTTON_TYPES } from '../../../base/ui/constants.native'; import BrandingImageBackground from '../../../dynamic-branding/components/native/BrandingImageBackground'; import LargeVideo from '../../../large-video/components/LargeVideo.native'; import { navigate } from '../../../mobile/navigation/components/lobby/LobbyNavigationContainerRef'; import { screen } from '../../../mobile/navigation/routes'; import { preJoinStyles } from '../../../prejoin/components/native/styles'; import HangupButton from '../../../toolbox/components/HangupButton'; import AudioMuteButton from '../../../toolbox/components/native/AudioMuteButton'; import VideoMuteButton from '../../../toolbox/components/native/VideoMuteButton'; import AbstractLobbyScreen, { IProps as AbstractProps, _mapStateToProps as abstractMapStateToProps } from '../AbstractLobbyScreen'; import styles from './styles'; interface IProps extends AbstractProps { /** * The current aspect ratio of the screen. */ _aspectRatio: Symbol; /** * The current height of the screen. */ _clientHeight: number; /** * The current width of the screen. */ _clientWidth: number; /** * The room name. */ _roomName: string; } /** * Implements a waiting screen that represents the participant being in the lobby. */ class LobbyScreen extends AbstractLobbyScreen { /** * Initializes a new LobbyScreen instance. * * @param {IProps} props - The read-only properties with which the new * instance is to be initialized. */ constructor(props: IProps) { super(props); this._onLogin = this._onLogin.bind(this); } /** * Implements {@code PureComponent#render}. * * @inheritdoc */ override render() { const { _aspectRatio, _clientHeight, _clientWidth, _roomName } = this.props; const isTablet = Math.min(_clientWidth, _clientHeight) >= 768; let contentContainerStyles = preJoinStyles.contentContainer; let largeVideoContainerStyles = preJoinStyles.largeVideoContainer; if (isTablet && _aspectRatio === ASPECT_RATIO_WIDE) { // @ts-ignore contentContainerStyles = preJoinStyles.contentContainerWide; largeVideoContainerStyles = preJoinStyles.largeVideoContainerWide; } return ( { _roomName } { this._renderToolbarButtons() } { this._renderContent() } ); } /** * Navigates to the lobby chat screen. * * @private * @returns {void} */ _onNavigateToLobbyChat() { navigate(screen.lobby.chat); } /** * Renders the joining (waiting) fragment of the screen. * * @inheritdoc */ _renderJoining() { return ( { this.props.t('lobby.joiningTitle') } { this.props.t('lobby.joiningMessage') } { this._renderStandardButtons() } ); } /** * Renders the participant form to let the knocking participant enter its details. * * @inheritdoc */ _renderParticipantForm() { const { t } = this.props; const { displayName } = this.state; return ( ); } /** * Renders the participant info fragment when we have all the required details of the user. * * @inheritdoc */ _renderParticipantInfo() { return this._renderParticipantForm(); } /** * Renders the password form to let the participant join by using a password instead of knocking. * * @inheritdoc */ _renderPasswordForm() { const { _passwordJoinFailed, t } = this.props; return ( ); } /** * Renders the password join button (set). * * @inheritdoc */ _renderPasswordJoinButtons() { return (