| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | 
							- // @flow
 - 
 - import React, { Component } from 'react';
 - import { View } from 'react-native';
 - import { connect } from 'react-redux';
 - 
 - import { Container } from '../../base/react';
 - import {
 -     isNarrowAspectRatio,
 -     makeAspectRatioAware
 - } from '../../base/responsive-ui';
 - import { ColorPalette } from '../../base/styles';
 - 
 - import styles from './styles';
 - 
 - import {
 -     AudioMuteButton,
 -     AudioOnlyButton,
 -     AudioRouteButton,
 -     HangupButton,
 -     PictureInPictureButton,
 -     RoomLockButton,
 -     InviteButton,
 -     ToggleCameraButton,
 -     VideoMuteButton
 - } from './buttons';
 - 
 - /**
 -  * Styles for the hangup button.
 -  */
 - const hangupButtonStyles = {
 -     iconStyle: styles.whitePrimaryToolbarButtonIcon,
 -     style: styles.hangup,
 -     underlayColor: ColorPalette.buttonUnderlay
 - };
 - 
 - /**
 -  * Styles for buttons in the primary toolbar.
 -  */
 - const primaryToolbarButtonStyles = {
 -     iconStyle: styles.primaryToolbarButtonIcon,
 -     style: styles.primaryToolbarButton
 - };
 - 
 - /**
 -  * Styles for buttons in the primary toolbar.
 -  */
 - const primaryToolbarToggledButtonStyles = {
 -     iconStyle: styles.whitePrimaryToolbarButtonIcon,
 -     style: styles.whitePrimaryToolbarButton
 - };
 - 
 - /**
 -  * Styles for buttons in the secondary toolbar.
 -  */
 - const secondaryToolbarButtonStyles = {
 -     iconStyle: styles.secondaryToolbarButtonIcon,
 -     style: styles.secondaryToolbarButton,
 -     underlayColor: 'transparent'
 - };
 - 
 - /**
 -  * The type of {@link Toolbox}'s React {@code Component} props.
 -  */
 - type Props = {
 - 
 -     /**
 -      * The indicator which determines whether the toolbox is enabled.
 -      */
 -     _enabled: boolean,
 - 
 -     /**
 -      * Flag showing whether toolbar is visible.
 -      */
 -     _visible: boolean
 - };
 - 
 - /**
 -  * Implements the conference toolbox on React Native.
 -  */
 - class Toolbox extends Component<Props> {
 -     /**
 -      * Implements React's {@link Component#render()}.
 -      *
 -      * @inheritdoc
 -      * @returns {ReactElement}
 -      */
 -     render() {
 -         if (!this.props._enabled) {
 -             return null;
 -         }
 - 
 -         const toolboxStyle
 -             = isNarrowAspectRatio(this)
 -                 ? styles.toolboxNarrow
 -                 : styles.toolboxWide;
 - 
 -         return (
 -             <Container
 -                 style = { toolboxStyle }
 -                 visible = { this.props._visible } >
 -                 { this._renderToolbars() }
 -             </Container>
 -         );
 -     }
 - 
 -     /**
 -      * Renders the toolbar which contains the primary buttons such as hangup,
 -      * audio and video mute.
 -      *
 -      * @private
 -      * @returns {ReactElement}
 -      */
 -     _renderPrimaryToolbar() {
 -         return (
 -             <View
 -                 key = 'primaryToolbar'
 -                 pointerEvents = 'box-none'
 -                 style = { styles.primaryToolbar }>
 -                 <AudioMuteButton
 -                     styles = { primaryToolbarButtonStyles }
 -                     toggledStyles = { primaryToolbarToggledButtonStyles } />
 -                 <HangupButton styles = { hangupButtonStyles } />
 -                 <VideoMuteButton
 -                     styles = { primaryToolbarButtonStyles }
 -                     toggledStyles = { primaryToolbarToggledButtonStyles } />
 -             </View>
 -         );
 -     }
 - 
 -     /**
 -      * Renders the toolbar which contains the secondary buttons such as toggle
 -      * camera facing mode.
 -      *
 -      * @private
 -      * @returns {ReactElement}
 -      */
 -     _renderSecondaryToolbar() {
 -         return (
 -             <View
 -                 key = 'secondaryToolbar'
 -                 pointerEvents = 'box-none'
 -                 style = { styles.secondaryToolbar }>
 -                 <AudioRouteButton styles = { secondaryToolbarButtonStyles } />
 -                 <ToggleCameraButton styles = { secondaryToolbarButtonStyles } />
 -                 <AudioOnlyButton styles = { secondaryToolbarButtonStyles } />
 -                 <RoomLockButton styles = { secondaryToolbarButtonStyles } />
 -                 <InviteButton styles = { secondaryToolbarButtonStyles } />
 -                 <PictureInPictureButton
 -                     styles = { secondaryToolbarButtonStyles } />
 -             </View>
 -         );
 -     }
 - 
 -     /**
 -      * Renders the primary and the secondary toolbars.
 -      *
 -      * @private
 -      * @returns {[ReactElement, ReactElement]}
 -      */
 -     _renderToolbars() {
 -         return [
 -             this._renderSecondaryToolbar(),
 -             this._renderPrimaryToolbar()
 -         ];
 -     }
 - }
 - 
 - /**
 -  * Maps parts of the redux state to {@link Toolbox} (React {@code Component})
 -  * props.
 -  *
 -  * @param {Object} state - The redux state of which parts are to be mapped to
 -  * {@code Toolbox} props.
 -  * @protected
 -  * @returns {{
 -  *     _enabled: boolean,
 -  *     _visible: boolean
 -  * }}
 -  */
 - function _mapStateToProps(state: Object): Object {
 -     const { enabled, visible } = state['features/toolbox'];
 - 
 -     return {
 -         /**
 -          * The indicator which determines whether the toolbox is enabled.
 -          *
 -          * @private
 -          * @type {boolean}
 -          */
 -         _enabled: enabled,
 - 
 -         /**
 -          * Flag showing whether toolbox is visible.
 -          *
 -          * @protected
 -          * @type {boolean}
 -          */
 -         _visible: visible
 -     };
 - }
 - 
 - export default connect(_mapStateToProps)(makeAspectRatioAware(Toolbox));
 
 
  |