bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/media/container.jsx

104 lines
3.0 KiB
React
Raw Normal View History

import React, { Component } from 'react';
import { withTracker } from 'meteor/react-meteor-data';
import Settings from '/imports/ui/services/settings';
import { defineMessages, injectIntl } from 'react-intl';
import { notify } from '/imports/ui/services/notification';
import Media from './component';
import MediaService from './service';
2017-02-17 05:11:46 +08:00
import PresentationAreaContainer from '../presentation/container';
2018-02-17 03:18:53 +08:00
import VideoProviderContainer from '../video-provider/container';
import ScreenshareContainer from '../screenshare/container';
2017-02-14 05:08:10 +08:00
import DefaultContent from '../presentation/default-content/component';
const defaultProps = {
2018-02-01 19:09:33 +08:00
overlay: null,
2018-02-01 19:31:17 +08:00
content: <PresentationAreaContainer />,
defaultContent: <DefaultContent />,
};
const intlMessages = defineMessages({
screenshareStarted: {
id: 'app.media.screenshare.start',
description: 'toast to show when a screenshare has started',
},
screenshareEnded: {
id: 'app.media.screenshare.end',
description: 'toast to show when a screenshare has ended',
},
});
2016-05-03 06:42:54 +08:00
class MediaContainer extends Component {
2016-04-29 03:02:51 +08:00
constructor(props) {
super(props);
const { overlay, content, defaultContent } = this.props;
this.state = {
2017-06-03 03:25:02 +08:00
overlay,
content: this.props.current_presentation ? content : defaultContent,
};
this.handleToggleLayout = this.handleToggleLayout.bind(this);
}
componentWillReceiveProps(nextProps) {
const {
isScreensharing,
intl,
} = this.props;
if (isScreensharing !== nextProps.isScreensharing) {
if (nextProps.isScreensharing) {
notify(intl.formatMessage(intlMessages.screenshareStarted), 'info', 'desktop');
} else {
notify(intl.formatMessage(intlMessages.screenshareEnded), 'info', 'desktop');
}
}
if (nextProps.current_presentation !== this.props.current_presentation) {
if (nextProps.current_presentation) {
this.setState({ content: this.props.content });
} else {
this.setState({ content: this.props.defaultContent });
}
}
}
handleToggleLayout() {
const { overlay, content } = this.state;
2018-02-01 19:09:33 +08:00
this.setState({ overlay: content, content: overlay });
2016-04-29 03:02:51 +08:00
}
render() {
return <Media {...this.props}>{this.props.children}</Media>;
2016-04-29 03:02:51 +08:00
}
}
MediaContainer.defaultProps = defaultProps;
export default withTracker(() => {
const { dataSaving } = Settings;
const { viewParticipantsWebcams, viewScreenshare } = dataSaving;
2017-06-03 03:25:02 +08:00
const data = {};
2016-09-15 04:25:31 +08:00
data.currentPresentation = MediaService.getPresentationInfo();
2017-03-22 05:46:41 +08:00
data.content = <DefaultContent />;
2016-09-15 04:25:31 +08:00
if (MediaService.shouldShowWhiteboard()) {
2017-03-07 03:34:30 +08:00
data.content = <PresentationAreaContainer />;
2016-09-15 04:25:31 +08:00
}
if (MediaService.shouldShowScreenshare() && (viewScreenshare || MediaService.isUserPresenter())) {
data.content = <ScreenshareContainer />;
2016-09-15 04:25:31 +08:00
}
if (MediaService.shouldShowOverlay() && viewParticipantsWebcams) {
2018-02-17 03:18:53 +08:00
data.overlay = <VideoProviderContainer />;
2016-09-15 04:25:31 +08:00
}
data.isScreensharing = MediaService.isVideoBroadcasting();
return data;
})(injectIntl(MediaContainer));