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

95 lines
2.9 KiB
React
Raw Normal View History

import React from 'react';
import { Meteor } from 'meteor/meteor';
import { withTracker } from 'meteor/react-meteor-data';
import { Session } from 'meteor/session';
import Meetings from '/imports/api/meetings';
import Users from '/imports/api/users';
import Auth from '/imports/ui/services/auth';
2017-10-11 06:08:51 +08:00
import { meetingIsBreakout } from '/imports/ui/components/app/service';
import getFromUserSettings from '/imports/ui/services/users-settings';
import userListService from '../user-list/service';
import ChatService from '../chat/service';
import Service from './service';
import NavBar from './component';
import mapUser from '../../services/user/mapUser';
2016-04-29 03:02:51 +08:00
const PUBLIC_CONFIG = Meteor.settings.public;
const PUBLIC_GROUP_CHAT_ID = PUBLIC_CONFIG.chat.public_group_id;
2017-10-11 06:08:51 +08:00
const NavBarContainer = ({ children, ...props }) => (
<NavBar {...props}>
{children}
</NavBar>
);
2016-04-29 03:02:51 +08:00
export default withTracker(() => {
const CLIENT_TITLE = getFromUserSettings('clientTitle', PUBLIC_CONFIG.app.clientTitle);
2016-07-11 20:34:58 +08:00
let meetingTitle;
let meetingRecorded;
const meetingId = Auth.meetingID;
2016-06-29 02:50:44 +08:00
const meetingObject = Meetings.findOne({
2017-06-03 03:25:02 +08:00
meetingId,
2016-06-29 02:50:44 +08:00
});
if (meetingObject != null) {
2017-08-16 01:24:58 +08:00
meetingTitle = meetingObject.meetingProp.name;
meetingRecorded = meetingObject.recordProp;
document.title = `${CLIENT_TITLE} - ${meetingTitle}`;
2016-06-29 02:50:44 +08:00
}
2016-06-18 06:15:11 +08:00
2016-10-12 01:36:28 +08:00
const checkUnreadMessages = () => {
2017-06-03 03:25:02 +08:00
const users = userListService.getUsers();
2016-10-12 01:36:28 +08:00
// 1.map every user id
// 2.filter the user except the current user from the user array
// 3.add the public chat to the array
// 4.check current user has unread messages or not.
return users
.map(user => user.id)
.filter(userID => userID !== Auth.userID)
.concat(PUBLIC_GROUP_CHAT_ID)
2016-10-12 01:36:28 +08:00
.some(receiverID => ChatService.hasUnreadMessages(receiverID));
};
2019-01-04 02:14:35 +08:00
Meetings.find({ meetingId: Auth.meetingID }).observeChanges({
changed: (id, fields) => {
if (fields.recordProp && fields.recordProp.recording) {
this.window.parent.postMessage({ response: 'recordingStarted' }, '*');
}
if (fields.recordProp && !fields.recordProp.recording) {
this.window.parent.postMessage({ response: 'recordingStopped' }, '*');
}
},
});
2016-11-29 03:48:02 +08:00
const breakouts = Service.getBreakouts();
const currentUserId = Auth.userID;
2019-01-09 06:17:11 +08:00
const { connectRecordingObserver, processOutsideToggleRecording } = Service;
2016-11-29 03:48:02 +08:00
2018-10-25 23:20:37 +08:00
const isExpanded = Session.get('isUserListOpen');
const amIModerator = () => {
const currentUser = Users.findOne({ userId: Auth.userID });
return mapUser(currentUser).isModerator;
};
2016-07-21 22:24:50 +08:00
return {
amIModerator,
2017-03-28 02:10:24 +08:00
isExpanded,
2016-11-29 03:48:02 +08:00
breakouts,
currentUserId,
2019-01-09 06:17:11 +08:00
processOutsideToggleRecording,
connectRecordingObserver,
2016-11-29 03:48:02 +08:00
meetingId,
2016-06-25 07:09:32 +08:00
presentationTitle: meetingTitle,
2016-10-12 01:36:28 +08:00
hasUnreadMessages: checkUnreadMessages(),
2017-03-16 01:54:40 +08:00
isBreakoutRoom: meetingIsBreakout(),
2018-12-21 03:39:04 +08:00
recordProps: meetingRecorded,
2016-07-21 22:24:50 +08:00
toggleUserList: () => {
Session.set('isUserListOpen', !isExpanded);
2016-07-21 22:24:50 +08:00
},
2016-04-29 03:02:51 +08:00
};
})(NavBarContainer);