bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/nav-bar/talking-indicator/container.jsx

70 lines
1.8 KiB
React
Raw Normal View History

import React from 'react';
import { withTracker } from 'meteor/react-meteor-data';
import VoiceUsers from '/imports/api/voice-users';
import Users from '/imports/api/users'
import Auth from '/imports/ui/services/auth';
2020-06-02 05:37:14 +08:00
import { debounce } from 'lodash';
import TalkingIndicator from './component';
import { makeCall } from '/imports/ui/services/api';
2019-11-20 23:08:36 +08:00
import Service from './service';
const APP_CONFIG = Meteor.settings.public.app;
const { enableTalkingIndicator } = APP_CONFIG;
const TalkingIndicatorContainer = (props) => {
if (!enableTalkingIndicator) return null;
return (<TalkingIndicator {...props} />);
};
export default withTracker(() => {
const talkers = {};
const meetingId = Auth.meetingID;
2019-11-14 00:24:38 +08:00
const usersTalking = VoiceUsers.find({ meetingId, joined: true, spoke: true }, {
fields: {
callerName: 1,
talking: 1,
color: 1,
startTime: 1,
voiceUserId: 1,
muted: 1,
intId: 1,
},
2019-11-20 23:08:36 +08:00
}).fetch().sort(Service.sortVoiceUsers);
if (usersTalking) {
2019-11-06 04:19:50 +08:00
for (let i = 0; i < usersTalking.length; i += 1) {
const {
callerName, talking, color, voiceUserId, muted, intId,
} = usersTalking[i];
const user = Users.findOne({ userId: voiceUserId }, { fields: { name: 1 } });
const _name = user ? user.name : 'USER';
talkers[`${intId}`] = {
color,
talking,
voiceUserId,
muted,
callerName: _name,
};
2019-11-06 04:19:50 +08:00
}
}
const muteUser = (id) => {
const user = VoiceUsers.findOne({ meetingId, voiceUserId: id }, {
fields: {
muted: 1,
},
});
if (user.muted) return;
makeCall('toggleVoice', id);
};
return {
talkers,
2020-06-02 05:37:14 +08:00
muteUser: id => debounce(muteUser(id), 500, { leading: true, trailing: false }),
2019-11-26 03:24:12 +08:00
openPanel: Session.get('openPanel'),
};
})(TalkingIndicatorContainer);