- {messages.map(message => (
- message.text !== ''
- ? (
+ {messages.map(message => {
+ const {
+ id,
+ time,
+ upload,
+ } = message;
+
+ const text = upload ? UploadService.getNotification(upload, intl) : message.text;
+
+ if (text === '') return null;
+
+ return (
- ) : null
- ))}
+ );
+ })}
);
diff --git a/bigbluebutton-html5/imports/ui/components/components-data/chat-context/context.jsx b/bigbluebutton-html5/imports/ui/components/components-data/chat-context/context.jsx
index 738fcce96a7a..7dc06ebc2e6a 100644
--- a/bigbluebutton-html5/imports/ui/components/components-data/chat-context/context.jsx
+++ b/bigbluebutton-html5/imports/ui/components/components-data/chat-context/context.jsx
@@ -67,15 +67,17 @@ const generateStateWithNewMessage = (msg, state, msgType = MESSAGE_TYPES.HISTORY
const indexValue = chatIndex ? (chatIndex + 1) : 1;
const messageKey = key + '-' + indexValue;
+ const content = [{ id: msg.id, text: msg.message, time: msg.timestamp }];
+ if (msg.upload) {
+ content[0].upload = msg.upload;
+ }
const tempGroupMessage = {
[messageKey]: {
...restMsg,
key: messageKey,
lastTimestamp: msg.timestamp,
read: msg.chatId === PUBLIC_CHAT_KEY && msg.timestamp <= getLoginTime() ? true : !!removedMessagesReadState[msg.id],
- content: [
- { id: msg.id, text: msg.message, time: msg.timestamp },
- ],
+ content,
}
};
diff --git a/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx b/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
index e6a744ca755d..08419e0b32df 100644
--- a/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
@@ -95,8 +95,8 @@ class VideoPlayer extends Component {
file: {
attributes: {
controls: isPresenter ? 'controls' : '',
- autoplay: 'autoplay',
- playsinline: 'playsinline',
+ autoPlay: 'autoplay',
+ playsInline: 'playsinline',
},
},
facebook: {
diff --git a/bigbluebutton-html5/imports/ui/components/external-video-player/modal/component.jsx b/bigbluebutton-html5/imports/ui/components/external-video-player/modal/component.jsx
index 51b5a93f4791..bd56a7ce6f63 100644
--- a/bigbluebutton-html5/imports/ui/components/external-video-player/modal/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/external-video-player/modal/component.jsx
@@ -1,7 +1,9 @@
import React, { Component } from 'react';
import { withModalMounter } from '/imports/ui/components/modal/service';
+import Icon from '/imports/ui/components/icon/component';
import Modal from '/imports/ui/components/modal/simple/component';
import Button from '/imports/ui/components/button/component';
+import UploadMediaService from '/imports/ui/components/upload/media/service';
import { defineMessages, injectIntl } from 'react-intl';
import { isUrlValid } from '../service';
@@ -33,6 +35,10 @@ const intlMessages = defineMessages({
id: 'app.externalVideo.close',
description: 'Close',
},
+ filename: {
+ id: 'app.externalVideo.filename',
+ description: 'Media filename',
+ },
note: {
id: 'app.externalVideo.noteLabel',
description: 'provides hint about Shared External videos',
@@ -54,6 +60,7 @@ class ExternalVideoModal extends Component {
this.updateVideoUrlHandler = this.updateVideoUrlHandler.bind(this);
this.renderUrlError = this.renderUrlError.bind(this);
this.updateVideoUrlHandler = this.updateVideoUrlHandler.bind(this);
+ this.onMediaFileClick = this.onMediaFileClick.bind(this);
}
startWatchingHandler() {
@@ -72,6 +79,18 @@ class ExternalVideoModal extends Component {
this.setState({ url: ev.target.value });
}
+ onMediaFileClick(id) {
+ const {
+ startWatching,
+ closeModal,
+ } = this.props;
+
+ const url = UploadMediaService.getDownloadURL(id);
+
+ startWatching(url.trim());
+ closeModal();
+ }
+
renderUrlError() {
const { intl } = this.props;
const { url } = this.state;
@@ -89,6 +108,51 @@ class ExternalVideoModal extends Component {
);
}
+ renderItem(item) {
+ const { intl } = this.props;
+
+ return (
+