| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- import _ from 'lodash';
-
- import { IStateful } from '../base/app/types';
- import { getCurrentConference } from '../base/conference/functions';
- import { getParticipantById, getParticipantCount, isLocalParticipantModerator } from '../base/participants/functions';
- import { toState } from '../base/redux/functions';
-
- import { FEATURE_KEY } from './constants';
- import { IRoom, IRooms } from './types';
-
- /**
- * Returns the rooms object for breakout rooms.
- *
- * @param {IStateful} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {Object} Object of rooms.
- */
- export const getBreakoutRooms = (stateful: IStateful): IRooms => toState(stateful)[FEATURE_KEY].rooms;
-
- /**
- * Returns the main room.
- *
- * @param {IStateful} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {IRoom|undefined} The main room object, or undefined.
- */
- export const getMainRoom = (stateful: IStateful) => {
- const rooms = getBreakoutRooms(stateful);
-
- return _.find(rooms, room => Boolean(room.isMainRoom));
- };
-
- export const getRoomsInfo = (stateful: IStateful) => {
- const breakoutRooms = getBreakoutRooms(stateful);
- const conference = getCurrentConference(stateful);
-
- const initialRoomsInfo = {
- rooms: []
- };
-
- // only main roomn
- if (!breakoutRooms || Object.keys(breakoutRooms).length === 0) {
- return {
- ...initialRoomsInfo,
- rooms: [ {
- isMainRoom: true,
- id: conference?.room?.roomjid,
- jid: conference?.room?.myroomjid,
- participants: conference?.participants && Object.keys(conference.participants).length
- ? Object.keys(conference.participants).map(participantId => {
- const participantItem = conference?.participants[participantId];
- const storeParticipant = getParticipantById(stateful, participantItem._id);
-
- return {
- jid: participantItem._jid,
- role: participantItem._role,
- displayName: participantItem._displayName,
- avatarUrl: storeParticipant?.loadableAvatarUrl,
- id: participantItem._id
- };
- }) : []
- } ]
- };
- }
-
- return {
- ...initialRoomsInfo,
- rooms: Object.keys(breakoutRooms).map(breakoutRoomKey => {
- const breakoutRoomItem = breakoutRooms[breakoutRoomKey];
-
- return {
- isMainRoom: Boolean(breakoutRoomItem.isMainRoom),
- id: breakoutRoomItem.id,
- jid: breakoutRoomItem.jid,
- participants: breakoutRoomItem.participants && Object.keys(breakoutRoomItem.participants).length
- ? Object.keys(breakoutRoomItem.participants).map(participantLongId => {
- const participantItem = breakoutRoomItem.participants[participantLongId];
- const ids = participantLongId.split('/');
- const storeParticipant = getParticipantById(stateful,
- ids.length > 1 ? ids[1] : participantItem.jid);
-
- return {
- jid: participantItem?.jid,
- role: participantItem?.role,
- displayName: participantItem?.displayName,
- avatarUrl: storeParticipant?.loadableAvatarUrl,
- id: storeParticipant ? storeParticipant.id
- : participantLongId
- };
- }) : []
- };
- })
- };
- };
-
- /**
- * Returns the room by Jid.
- *
- * @param {IStateful} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @param {string} roomJid - The jid of the room.
- * @returns {IRoom|undefined} The main room object, or undefined.
- */
- export const getRoomByJid = (stateful: IStateful, roomJid: string) => {
- const rooms = getBreakoutRooms(stateful);
-
- return _.find(rooms, (room: IRoom) => room.jid === roomJid);
- };
-
- /**
- * Returns the id of the current room.
- *
- * @param {IStateful} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {string} Room id or undefined.
- */
- export const getCurrentRoomId = (stateful: IStateful) => {
- const conference = getCurrentConference(stateful);
-
- return conference?.getName();
- };
-
- /**
- * Determines whether the local participant is in a breakout room.
- *
- * @param {IStateful} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {boolean}
- */
- export const isInBreakoutRoom = (stateful: IStateful) => {
- const conference = getCurrentConference(stateful);
-
- return conference?.getBreakoutRooms()
- ?.isBreakoutRoom();
- };
-
- /**
- * Returns the breakout rooms config.
- *
- * @param {IStateful} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {Object}
- */
- export const getBreakoutRoomsConfig = (stateful: IStateful) => {
- const state = toState(stateful);
- const { breakoutRooms = {} } = state['features/base/config'];
-
- return breakoutRooms;
- };
-
- /**
- * Returns whether the add breakout room button is visible.
- *
- * @param {IStateful} stateful - Global state.
- * @returns {boolean}
- */
- export const isAddBreakoutRoomButtonVisible = (stateful: IStateful) => {
- const state = toState(stateful);
- const isLocalModerator = isLocalParticipantModerator(state);
- const { conference } = state['features/base/conference'];
- const isBreakoutRoomsSupported = conference?.getBreakoutRooms()?.isSupported();
- const { hideAddRoomButton } = getBreakoutRoomsConfig(state);
-
- return isLocalModerator && isBreakoutRoomsSupported && !hideAddRoomButton;
- };
-
- /**
- * Returns whether the auto assign participants to breakout rooms button is visible.
- *
- * @param {IStateful} stateful - Global state.
- * @returns {boolean}
- */
- export const isAutoAssignParticipantsVisible = (stateful: IStateful) => {
- const state = toState(stateful);
- const rooms = getBreakoutRooms(state);
- const inBreakoutRoom = isInBreakoutRoom(state);
- const isLocalModerator = isLocalParticipantModerator(state);
- const participantsCount = getParticipantCount(state);
- const { hideAutoAssignButton } = getBreakoutRoomsConfig(state);
-
- return !inBreakoutRoom
- && isLocalModerator
- && participantsCount > 2
- && Object.keys(rooms).length > 1
- && !hideAutoAssignButton;
- };
|