diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-options/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-options/component.jsx index bd9fa806ee..fc34c307b7 100755 --- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-options/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-options/component.jsx @@ -11,7 +11,6 @@ import DropdownList from '/imports/ui/components/dropdown/list/component'; import DropdownListItem from '/imports/ui/components/dropdown/list/item/component'; import LockViewersContainer from '/imports/ui/components/lock-viewers/container'; import BreakoutRoom from '/imports/ui/components/actions-bar/create-breakout-room/component'; -import userListService from '/imports/ui/components/user-list/service'; import { styles } from './styles'; const propTypes = { @@ -94,21 +93,6 @@ const intlMessages = defineMessages({ }); class UserOptions extends PureComponent { - static onSaveUserNames() { - const link = document.createElement('a'); - const mimeType = 'text/plain'; - - const userNamesObj = userListService.getUsers(); - const userNameListString = Object.keys(userNamesObj) - .map(key => userNamesObj[key].name, []).join('\r\n'); - link.setAttribute('download', `save-users-list-${Date.now()}.txt`); - link.setAttribute( - 'href', - `data: ${mimeType} ;charset=utf-8,${userNameListString}`, - ); - link.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window })); - } - constructor(props) { super(props); @@ -129,6 +113,22 @@ class UserOptions extends PureComponent { this.onCreateBreakouts = this.onCreateBreakouts.bind(this); this.onInvitationUsers = this.onInvitationUsers.bind(this); this.renderMenuItems = this.renderMenuItems.bind(this); + this.onSaveUserNames = this.onSaveUserNames.bind(this); + } + + onSaveUserNames() { + const link = document.createElement('a'); + const mimeType = 'text/plain'; + const { userListService } = this.props; + const userNamesObj = userListService.getUsers(); + const userNameListString = Object.keys(userNamesObj) + .map(key => userNamesObj[key].name, []).join('\r\n'); + link.setAttribute('download', `save-users-list-${Date.now()}.txt`); + link.setAttribute( + 'href', + `data: ${mimeType} ;charset=utf-16,${encodeURIComponent(userNameListString)}`, + ); + link.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window })); } onActionsShow() { @@ -259,7 +259,7 @@ class UserOptions extends PureComponent { icon="download" label={intl.formatMessage(intlMessages.saveUserNames)} key={this.saveUsersNameId} - onClick={UserOptions.onSaveUserNames} + onClick={this.onSaveUserNames} /> ) : null), diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-options/container.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-options/container.jsx index 472655c338..55f2bf660d 100755 --- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-options/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-options/container.jsx @@ -2,6 +2,7 @@ import { withTracker } from 'meteor/react-meteor-data'; import PropTypes from 'prop-types'; import Auth from '/imports/ui/services/auth'; import Service from '/imports/ui/components/actions-bar/service'; +import userListService from '/imports/ui/components/user-list/service'; import UserOptions from './component'; const propTypes = { @@ -39,6 +40,7 @@ const UserOptionsContainer = withTracker((props) => { getBreakouts: Service.getBreakouts, sendInvitation: Service.sendInvitation, getUsersNotAssigned: Service.getUsersNotAssigned, + userListService, }; })(UserOptions);