diff --git a/app/lib/components/Sidebar.jsx b/app/lib/components/Sidebar.jsx index e065576..28dab5f 100644 --- a/app/lib/components/Sidebar.jsx +++ b/app/lib/components/Sidebar.jsx @@ -1,96 +1,147 @@ -import React from 'react'; +import React, { Component } 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'; +import fscreen from 'fscreen'; -const Sidebar = ({ - toolbarsVisible, me, screenProducer, onLogin, onShareScreen, - onUnShareScreen, onNeedExtension, onLeaveMeeting -}) => +class Sidebar extends Component { - let screenState; - let screenTip; + state = { + fullscreen: false + }; - if (me.needExtension) + handleToggleFullscreen = () => { - screenState = 'need-extension'; - screenTip = 'Install screen sharing extension'; - } - else if (!me.canShareScreen) + if (fscreen.fullscreenElement) { + fscreen.exitFullscreen(); + } else { + fscreen.requestFullscreen(document.documentElement); + } + }; + + handleFullscreenChange = () => { + this.setState({ + fullscreen: fscreen.fullscreenElement !== null + }) + }; + + componentDidMount() { - screenState = 'unsupported'; - screenTip = 'Screen sharing not supported'; - } - else if (screenProducer) - { - screenState = 'on'; - screenTip = 'Stop screen sharing'; - } - else - { - screenState = 'off'; - screenTip = 'Start screen sharing'; + if (fscreen.fullscreenEnabled) + { + fscreen.addEventListener('fullscreenchange', this.handleFullscreenChange); + } } - return ( -
-
- { - switch (screenState) - { - case 'on': - { - onUnShareScreen(); - break; - } - case 'off': - { - onShareScreen(); - break; - } - case 'need-extension': - { - onNeedExtension(); - break; - } - default: - { - break; - } - } - }} - /> + componentWillUnmount() + { + if (fscreen.fullscreenEnabled) + { + fscreen.removeEventListener('fullscreenchange', this.handleFullscreenChange); + } + } + + render() { + const { + toolbarsVisible, me, screenProducer, onLogin, onShareScreen, + onUnShareScreen, onNeedExtension, onLeaveMeeting + } = 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 ( +
+ {fscreen.fullscreenEnabled && ( +
+ )} - {me.loginEnabled ?
onLogin()} + onClick={() => + { + switch (screenState) + { + case 'on': + { + onUnShareScreen(); + break; + } + case 'off': + { + onShareScreen(); + break; + } + case 'need-extension': + { + onNeedExtension(); + break; + } + default: + { + break; + } + } + }} /> - :null - } - -
onLeaveMeeting()} - /> -
- ); -}; + + {me.loginEnabled ? +
onLogin()} + /> + :null + } + +
onLeaveMeeting()} + /> +
+ ); + } +} Sidebar.propTypes = { toolbarsVisible : PropTypes.bool.isRequired, diff --git a/app/resources/images/icon_fullscreen_exit_white.svg b/app/resources/images/icon_fullscreen_exit_white.svg new file mode 100644 index 0000000..0d60d8e --- /dev/null +++ b/app/resources/images/icon_fullscreen_exit_white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/resources/images/icon_fullscreen_white.svg b/app/resources/images/icon_fullscreen_white.svg new file mode 100644 index 0000000..c0f5762 --- /dev/null +++ b/app/resources/images/icon_fullscreen_white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/stylus/components/Room.styl b/app/stylus/components/Room.styl index 932406c..ea3b42c 100644 --- a/app/stylus/components/Room.styl +++ b/app/stylus/components/Room.styl @@ -232,6 +232,14 @@ } } + &.fullscreen { + background-image: url('/resources/images/icon_fullscreen_white.svg'); + + &.on { + background-image: url('/resources/images/icon_fullscreen_exit_white.svg'); + } + } + &.screen { &.on { background-image: url('/resources/images/no-share-screen-black.svg'); @@ -250,6 +258,7 @@ background-image: url('/resources/images/share-screen-extension.svg'); } } + &.raise-hand { background-image: url('/resources/images/icon-hand-white.svg');