+
+ {clear ? null : (
+
+ )}
- {clear ? '' : data}
+ {clear ? '' : data.captionText}
- {clear ? '' : data}
+ {clear ? '' : data.captionText}
);
@@ -87,7 +101,7 @@ class LiveCaptions extends PureComponent {
}
LiveCaptions.propTypes = {
- data: PropTypes.string.isRequired,
+ data: PropTypes.object.isRequired,
};
export default LiveCaptions;
diff --git a/bigbluebutton-html5/imports/ui/components/captions/live/user/component.jsx b/bigbluebutton-html5/imports/ui/components/captions/live/user/component.jsx
new file mode 100644
index 000000000000..91f891976964
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/captions/live/user/component.jsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import UserAvatar from '/imports/ui/components/user-avatar/component';
+
+const User = ({
+ avatar,
+ background,
+ color,
+ moderator,
+ name,
+}) => (
+
+
+ {name.slice(0, 2)}
+
+
+);
+
+User.propTypes = {
+ avatar: PropTypes.string.isRequired,
+ background: PropTypes.string.isRequired,
+ color: PropTypes.string.isRequired,
+ moderator: PropTypes.bool.isRequired,
+ name: PropTypes.string.isRequired,
+};
+
+export default User;
diff --git a/bigbluebutton-html5/imports/ui/components/captions/live/user/container.jsx b/bigbluebutton-html5/imports/ui/components/captions/live/user/container.jsx
new file mode 100644
index 000000000000..8a4cbe1e03d4
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/captions/live/user/container.jsx
@@ -0,0 +1,42 @@
+import React from 'react';
+import { withTracker } from 'meteor/react-meteor-data';
+import Users from '/imports/api/users';
+import User from './component';
+
+const MODERATOR = Meteor.settings.public.user.role_moderator;
+
+const Container = (props) =>
;
+
+const getUser = (userId) => {
+ const user = Users.findOne(
+ { userId },
+ {
+ fields: {
+ avatar: 1,
+ color: 1,
+ role: 1,
+ name: 1,
+ },
+ },
+ );
+
+ if (user) {
+ return {
+ avatar: user.avatar,
+ color: user.color,
+ moderator: user.role === MODERATOR,
+ name: user.name,
+ };
+ }
+
+ return {
+ avatar: '',
+ color: '',
+ moderator: false,
+ name: '',
+ };
+};
+
+export default withTracker(({ userId }) => {
+ return getUser(userId);
+})(Container);
diff --git a/bigbluebutton-html5/imports/ui/components/captions/reader-menu/component.jsx b/bigbluebutton-html5/imports/ui/components/captions/reader-menu/component.jsx
index 8cb1c7c31779..003fb2b87f4f 100644
--- a/bigbluebutton-html5/imports/ui/components/captions/reader-menu/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/captions/reader-menu/component.jsx
@@ -5,6 +5,8 @@ import { GithubPicker } from 'react-color';
import { defineMessages, injectIntl } from 'react-intl';
import { withModalMounter } from '/imports/ui/components/common/modal/service';
import Styled from './styles';
+import { Session } from 'meteor/session';
+import Service from '/imports/ui/components/captions/service';
const DEFAULT_VALUE = 'select';
const DEFAULT_KEY = -1;
@@ -94,7 +96,7 @@ const propTypes = {
activateCaptions: PropTypes.func.isRequired,
getCaptionsSettings: PropTypes.func.isRequired,
closeModal: PropTypes.func.isRequired,
- ownedLocales: PropTypes.arrayOf(PropTypes.object).isRequired,
+ translatedLocales: PropTypes.arrayOf(PropTypes.object).isRequired,
intl: PropTypes.shape({
formatMessage: PropTypes.func.isRequired,
}).isRequired,
@@ -111,10 +113,19 @@ class ReaderMenu extends PureComponent {
fontSize,
} = props.getCaptionsSettings();
- const { ownedLocales } = this.props;
+ const { translatedLocales } = this.props;
+
+ let initLocale;
+ if (Service.getCaptionsActive() && translatedLocales.some ( locale => locale.locale == Service.getCaptionsActive()) ) {
+ initLocale = Service.getCaptionsActive();
+ } else {
+ const locale = translatedLocales?.[0] ? translatedLocales[0].locale : null;
+ Service.setCaptionsActive(locale);
+ initLocale = locale;
+ }
this.state = {
- locale: (ownedLocales && ownedLocales[0]) ? ownedLocales[0].locale : null,
+ locale: initLocale,
backgroundColor,
fontColor,
fontFamily,
@@ -179,6 +190,7 @@ class ReaderMenu extends PureComponent {
fontSize,
};
activateCaptions(locale, settings);
+ Service.setCaptionsActive(locale);
closeModal();
}
@@ -201,7 +213,7 @@ class ReaderMenu extends PureComponent {
render() {
const {
intl,
- ownedLocales,
+ translatedLocales,
closeModal,
} = this.props;
@@ -251,7 +263,7 @@ class ReaderMenu extends PureComponent {
>
{intl.formatMessage(intlMessages.select)}
- {ownedLocales.map((loc) => (
+ {translatedLocales.map((loc) => (