diff --git a/app/lib/components/Room.jsx b/app/lib/components/Room.jsx index 1b2ce31..7202c90 100644 --- a/app/lib/components/Room.jsx +++ b/app/lib/components/Room.jsx @@ -16,6 +16,7 @@ import ToolArea from './ToolArea/ToolArea'; import FullScreenView from './FullScreenView'; import Draggable from 'react-draggable'; import { idle } from '../utils'; +import Sidebar from './Sidebar'; // Hide toolbars after 10 seconds of inactivity. const TIMEOUT = 10 * 1000; @@ -58,42 +59,11 @@ class Room extends React.Component { const { room, - me, toolAreaOpen, amActiveSpeaker, - screenProducer, - onRoomLinkCopy, - onLogin, - onShareScreen, - onUnShareScreen, - onNeedExtension, - onLeaveMeeting + onRoomLinkCopy } = this.props; - let screenState; - let screenTip; - - if (me.needExtension) - { - screenState = 'need-extension'; - screenTip = 'Install screen sharing extension'; - } - else if (!me.canShareScreen) - { - screenState = 'unsupported'; - screenTip = 'Screen sharing not supported'; - } - else if (screenProducer) - { - screenState = 'on'; - screenTip = 'Stop screen sharing'; - } - else - { - screenState = 'off'; - screenTip = 'Start screen sharing'; - } - return (
@@ -105,6 +75,7 @@ class Room extends React.Component }} > + {room.advancedMode ? @@ -166,60 +137,7 @@ class Room extends React.Component
-
-
- { - switch (screenState) - { - case 'on': - { - onUnShareScreen(); - break; - } - case 'off': - { - onShareScreen(); - break; - } - case 'need-extension': - { - onNeedExtension(); - break; - } - default: - { - break; - } - } - }} - /> - - {me.loginEnabled ? -
onLogin()} - /> - :null - } - -
onLeaveMeeting()} - /> -
+ text : 'Room link copied to the clipboard' })); }, - onLeaveMeeting : () => - { - dispatch(requestActions.leaveRoom()); - }, - onShareScreen : () => - { - dispatch(requestActions.enableScreenSharing()); - }, - onUnShareScreen : () => - { - dispatch(requestActions.disableScreenSharing()); - }, - onNeedExtension : () => - { - dispatch(requestActions.installExtension()); - }, - onLogin : () => - { - dispatch(requestActions.userLogin()); - }, + setToolbarsVisible : (visible) => { dispatch(stateActions.setToolbarsVisible(visible)); diff --git a/app/lib/components/Sidebar.jsx b/app/lib/components/Sidebar.jsx new file mode 100644 index 0000000..e065576 --- /dev/null +++ b/app/lib/components/Sidebar.jsx @@ -0,0 +1,125 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import classnames from 'classnames'; +import * as appPropTypes from './appPropTypes'; +import * as requestActions from '../redux/requestActions'; + +const Sidebar = ({ + toolbarsVisible, me, screenProducer, onLogin, onShareScreen, + onUnShareScreen, onNeedExtension, onLeaveMeeting +}) => +{ + let screenState; + let screenTip; + + if (me.needExtension) + { + screenState = 'need-extension'; + screenTip = 'Install screen sharing extension'; + } + else if (!me.canShareScreen) + { + screenState = 'unsupported'; + screenTip = 'Screen sharing not supported'; + } + else if (screenProducer) + { + screenState = 'on'; + screenTip = 'Stop screen sharing'; + } + else + { + screenState = 'off'; + screenTip = 'Start screen sharing'; + } + + return ( +
+
+ { + switch (screenState) + { + case 'on': + { + onUnShareScreen(); + break; + } + case 'off': + { + onShareScreen(); + break; + } + case 'need-extension': + { + onNeedExtension(); + break; + } + default: + { + break; + } + } + }} + /> + + {me.loginEnabled ? +
onLogin()} + /> + :null + } + +
onLeaveMeeting()} + /> +
+ ); +}; + +Sidebar.propTypes = { + toolbarsVisible : PropTypes.bool.isRequired, + me : appPropTypes.Me.isRequired, + onShareScreen : PropTypes.func.isRequired, + onUnShareScreen : PropTypes.func.isRequired, + onNeedExtension : PropTypes.func.isRequired, + onLeaveMeeting : PropTypes.func.isRequired, + onLogin : PropTypes.func.isRequired, + screenProducer : appPropTypes.Producer +}; + +const mapStateToProps = (state) => + ({ + toolbarsVisible : state.room.toolbarsVisible, + screenProducer : Object.values(state.producers) + .find((producer) => producer.source === 'screen'), + me : state.me + }); + +const mapDispatchToProps = { + onLeaveMeeting : requestActions.leaveRoom, + onShareScreen : requestActions.enableScreenSharing, + onUnShareScreen : requestActions.disableScreenSharing, + onNeedExtension : requestActions.installExtension, + onLogin : requestActions.userLogin +}; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(Sidebar); \ No newline at end of file