60 lines
2.5 KiB
JavaScript
Executable File
60 lines
2.5 KiB
JavaScript
Executable File
import Auth from '/imports/ui/services/auth';
|
||
import Users from '/imports/api/users';
|
||
import fp from 'lodash/fp';
|
||
import { makeCall } from '/imports/ui/services/api';
|
||
import Meetings from '/imports/api/meetings';
|
||
import Breakouts from '/imports/api/breakouts';
|
||
import { getVideoId } from '/imports/ui/components/external-video-player/service';
|
||
|
||
const USER_CONFIG = Meteor.settings.public.user;
|
||
const ROLE_MODERATOR = USER_CONFIG.role_moderator;
|
||
|
||
const getBreakouts = () => Breakouts.find({ parentMeetingId: Auth.meetingID })
|
||
.fetch()
|
||
.sort((a, b) => a.sequence - b.sequence);
|
||
|
||
const getBreakoutUser = user => Users.find({
|
||
extId: new RegExp(`^${user.userId}`),
|
||
connectionStatus: 'online',
|
||
}).fetch();
|
||
|
||
const currentBreakoutUsers = userArray => userArray.length === 1;
|
||
|
||
const filterBreakoutUsers = filter => users => users.filter(filter);
|
||
|
||
const filterUsersNotAssigned = filterBreakoutUsers(currentBreakoutUsers);
|
||
|
||
const mapUsersToNotAssined = mapFunction => users => users.map(mapFunction);
|
||
|
||
const flatUsersArray = usersArray => usersArray.reduce((acc, users) => [...acc, ...users], []);
|
||
|
||
/*
|
||
The concept of pipe is simple
|
||
it combines n functions. It’s a pipe flowing left-to-right,
|
||
calling each function with the output of the last one.
|
||
*/
|
||
const getUsersNotAssigned = fp.pipe(
|
||
mapUsersToNotAssined(getBreakoutUser),
|
||
filterUsersNotAssigned,
|
||
flatUsersArray,
|
||
);
|
||
|
||
const takePresenterRole = () => makeCall('assignPresenter', Auth.userID);
|
||
|
||
export default {
|
||
isUserPresenter: () => Users.findOne({ userId: Auth.userID }).presenter,
|
||
isUserModerator: () => Users.findOne({ userId: Auth.userID }).role === ROLE_MODERATOR,
|
||
recordSettingsList: () => Meetings.findOne({ meetingId: Auth.meetingID }).recordProp,
|
||
meetingIsBreakout: () => Meetings.findOne({ meetingId: Auth.meetingID }).meetingProp.isBreakout,
|
||
meetingName: () => Meetings.findOne({ meetingId: Auth.meetingID }).meetingProp.name,
|
||
users: () => Users.find({ connectionStatus: 'online', meetingId: Auth.meetingID }).fetch(),
|
||
hasBreakoutRoom: () => Breakouts.find({ parentMeetingId: Auth.meetingID }).fetch().length > 0,
|
||
toggleRecording: () => makeCall('toggleRecording'),
|
||
createBreakoutRoom: (numberOfRooms, durationInMinutes, freeJoin = true, record = false) => makeCall('createBreakoutRoom', numberOfRooms, durationInMinutes, freeJoin, record),
|
||
sendInvitation: (breakoutId, userId) => makeCall('requestJoinURL', { breakoutId, userId }),
|
||
getBreakouts,
|
||
getUsersNotAssigned,
|
||
takePresenterRole,
|
||
isSharingVideo: () => getVideoId(),
|
||
};
|