diff --git a/bigbluebutton-html5/imports/ui/components/actions-bar/component.jsx b/bigbluebutton-html5/imports/ui/components/actions-bar/component.jsx index 04cc8c5cb3a3023ba140499f8caae69e5f700b82..b92c2a9a2861241f67d8f4d421387cd4375b43b9 100755 --- a/bigbluebutton-html5/imports/ui/components/actions-bar/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/actions-bar/component.jsx @@ -4,7 +4,7 @@ import { styles } from './styles.scss'; import DesktopShare from './desktop-share/component'; import ActionsDropdown from './actions-dropdown/component'; import AudioControlsContainer from '../audio/audio-controls/container'; -import JoinVideoOptionsContainer from '../video-provider/video-menu/container'; +import JoinVideoOptionsContainer from '../video-provider/video-button/container'; import PresentationOptionsContainer from './presentation-options/component'; diff --git a/bigbluebutton-html5/imports/ui/components/actions-bar/presentation-options/component.jsx b/bigbluebutton-html5/imports/ui/components/actions-bar/presentation-options/component.jsx index bbe37dbc33d92ebcbf2e1ae0a5a1dbdf5bda78b9..f46adc2b4b44114862917f84441e73c51311a932 100755 --- a/bigbluebutton-html5/imports/ui/components/actions-bar/presentation-options/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/actions-bar/presentation-options/component.jsx @@ -2,7 +2,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import Button from '/imports/ui/components/button/component'; -import cx from 'classnames'; import { styles } from '../styles'; const propTypes = { @@ -21,12 +20,9 @@ const intlMessages = defineMessages({ }, }); -const PresentationOptionsContainer = ({ - intl, - toggleSwapLayout, -}) => ( +const PresentationOptionsContainer = ({ intl, toggleSwapLayout }) => ( <Button - className={cx(styles.button, styles.presentationButton)} + className={styles.button} icon="presentation" label={intl.formatMessage(intlMessages.restorePresentationLabel)} description={intl.formatMessage(intlMessages.restorePresentationDesc)} diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-button/component.jsx similarity index 51% rename from bigbluebutton-html5/imports/ui/components/video-provider/video-menu/component.jsx rename to bigbluebutton-html5/imports/ui/components/video-provider/video-button/component.jsx index 4fa900f54b5816d83cb88ac836482593c0bb1999..f56bad50e5c61bf47c03b3a85c223325d2be8a45 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-button/component.jsx @@ -7,17 +7,21 @@ import { defineMessages, injectIntl, intlShape } from 'react-intl'; import { styles } from './styles'; const intlMessages = defineMessages({ - videoMenu: { - id: 'app.video.videoMenu', - description: 'video menu label', + joinVideo: { + id: 'app.video.joinVideo', + description: 'Join video button label', }, - videoMenuDesc: { - id: 'app.video.videoMenuDesc', - description: 'video menu description', + leaveVideo: { + id: 'app.video.leaveVideo', + description: 'Leave video button label', }, - videoMenuDisabled: { - id: 'app.video.videoMenuDisabled', - description: 'video menu label', + videoButtonDesc: { + id: 'app.video.videoButtonDesc', + description: 'video button description', + }, + videoDisabled: { + id: 'app.video.videoDisabled', + description: 'video disabled label', }, }); @@ -27,33 +31,37 @@ const propTypes = { isSharingVideo: PropTypes.bool.isRequired, }; -const JoinVideoOptions = ({ +const JoinVideoButton = ({ intl, isSharingVideo, - videoShareAllowed, + isDisabled, handleJoinVideo, handleCloseVideo, }) => { return ( <Button - label={!videoShareAllowed ? - intl.formatMessage(intlMessages.videoMenuDisabled) + label={isDisabled ? + intl.formatMessage(intlMessages.videoDisabled) : - intl.formatMessage(intlMessages.videoMenu) + (isSharingVideo ? + intl.formatMessage(intlMessages.leaveVideo) + : + intl.formatMessage(intlMessages.joinVideo) + ) } className={cx(styles.button, isSharingVideo || styles.ghostButton)} onClick={isSharingVideo ? handleCloseVideo : handleJoinVideo} hideLabel - aria-label={intl.formatMessage(intlMessages.videoMenuDesc)} + aria-label={intl.formatMessage(intlMessages.videoButtonDesc)} color={isSharingVideo ? 'primary' : 'default'} icon={isSharingVideo ? 'video' : 'video_off'} ghost={!isSharingVideo} size="lg" circle - disabled={!videoShareAllowed} + disabled={isDisabled} /> ); }; -JoinVideoOptions.propTypes = propTypes; -export default injectIntl(JoinVideoOptions); +JoinVideoButton.propTypes = propTypes; +export default injectIntl(JoinVideoButton); diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-button/container.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-button/container.jsx new file mode 100755 index 0000000000000000000000000000000000000000..b21d680e1f9c8995e529ffae76a5871180d959cc --- /dev/null +++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-button/container.jsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { withTracker } from 'meteor/react-meteor-data'; +import { injectIntl } from 'react-intl'; +import { withModalMounter } from '/imports/ui/components/modal/service'; +import VideoPreviewContainer from '/imports/ui/components/video-preview/container'; +import JoinVideoButton from './component'; +import VideoButtonService from './service'; + +const JoinVideoOptionsContainer = (props) => { + const { + isSharingVideo, + isDisabled, + handleJoinVideo, + handleCloseVideo, + baseName, + intl, + mountModal, + ...restProps + } = props; + + const mountPreview = () => { mountModal(<VideoPreviewContainer />); }; + + return <JoinVideoButton {...{ handleJoinVideo: mountPreview, handleCloseVideo, isSharingVideo, isDisabled, ...restProps }} />; +}; + +export default withModalMounter(injectIntl(withTracker(() => ({ + baseName: VideoButtonService.baseName, + isSharingVideo: VideoButtonService.isSharingVideo(), + isDisabled: VideoButtonService.isDisabled(), + videoShareAllowed: VideoButtonService.videoShareAllowed(), +}))(JoinVideoOptionsContainer))); diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/service.js b/bigbluebutton-html5/imports/ui/components/video-provider/video-button/service.js similarity index 86% rename from bigbluebutton-html5/imports/ui/components/video-provider/video-menu/service.js rename to bigbluebutton-html5/imports/ui/components/video-provider/video-button/service.js index f17126feb08859f34f89af554897e86bc721addb..a25e62ccf4197c2ced022eba5c9212b2b2e0a855 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/service.js +++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-button/service.js @@ -2,7 +2,6 @@ import Settings from '/imports/ui/services/settings'; import mapUser from '/imports/ui/services/user/mapUser'; import Auth from '/imports/ui/services/auth'; import Users from '/imports/api/users/'; -import MediaService from '/imports/ui/components/media/service'; import VideoService from '../service'; const baseName = Meteor.settings.public.app.basename; @@ -37,7 +36,5 @@ export default { isSharingVideo, isDisabled, baseName, - toggleSwapLayout: MediaService.toggleSwapLayout, - swapLayoutAllowed: MediaService.shouldEnableSwapLayout, videoShareAllowed, }; diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/styles.scss b/bigbluebutton-html5/imports/ui/components/video-provider/video-button/styles.scss similarity index 100% rename from bigbluebutton-html5/imports/ui/components/video-provider/video-menu/styles.scss rename to bigbluebutton-html5/imports/ui/components/video-provider/video-button/styles.scss diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/container.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/container.jsx deleted file mode 100755 index a20da734f60c72a2c3ec53fa657cdaeabb1d0e47..0000000000000000000000000000000000000000 --- a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/container.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import { withTracker } from 'meteor/react-meteor-data'; -import { defineMessages, injectIntl } from 'react-intl'; -import { withModalMounter } from '/imports/ui/components/modal/service'; -import VideoPreviewContainer from '/imports/ui/components/video-preview/container'; -import JoinVideoOptions from './component'; -import VideoMenuService from './service'; - -const intlMessages = defineMessages({ - joinVideo: { - id: 'app.video.joinVideo', - description: 'Join video button label', - }, - leaveVideo: { - id: 'app.video.leaveVideo', - description: 'Leave video button label', - }, - swapCam: { - id: 'app.video.swapCam', - description: 'Swap cam button label', - }, - swapCamDesc: { - id: 'app.video.swapCamDesc', - description: 'Swap cam button description', - }, -}); - -const JoinVideoOptionsContainer = (props) => { - const { - isSharingVideo, - isDisabled, - handleJoinVideo, - handleCloseVideo, - toggleSwapLayout, - swapLayoutAllowed, - baseName, - intl, - mountModal, - ...restProps - } = props; - - const mountPreview = () => { mountModal(<VideoPreviewContainer />); }; - - return <JoinVideoOptions {...{ handleJoinVideo: mountPreview, handleCloseVideo, isSharingVideo, ...restProps }} />; -}; - -export default withModalMounter(injectIntl(withTracker(() => ({ - baseName: VideoMenuService.baseName, - isSharingVideo: VideoMenuService.isSharingVideo(), - isDisabled: VideoMenuService.isDisabled(), - videoShareAllowed: VideoMenuService.videoShareAllowed(), - toggleSwapLayout: VideoMenuService.toggleSwapLayout, - swapLayoutAllowed: VideoMenuService.swapLayoutAllowed(), -}))(JoinVideoOptionsContainer))); diff --git a/bigbluebutton-html5/private/locales/en.json b/bigbluebutton-html5/private/locales/en.json index 7d75a68fd11c8ac71e1cedb64c557e07d2d44c81..7e945e261c35485ef7736b4473e93777dd5e338e 100755 --- a/bigbluebutton-html5/private/locales/en.json +++ b/bigbluebutton-html5/private/locales/en.json @@ -407,6 +407,8 @@ "app.video.mediaFlowTimeout1020": "Error 1020: media could not reach the server", "app.video.swapCam": "Swap", "app.video.swapCamDesc": "swap the direction of webcams", + "app.video.videoDisabled": "Webcam is disabled", + "app.video.videoButtonDesc": "Join video button", "app.video.videoMenu": "Video menu", "app.video.videoMenuDisabled": "Video menu Webcam is disabled in Settings", "app.video.videoMenuDesc": "Open video menu dropdown",