123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- // @flow
-
- import _ from 'lodash';
-
- import { getCurrentConference } from '../base/conference';
- import { getParticipantCount, isLocalParticipantModerator } from '../base/participants';
- import { toState } from '../base/redux';
-
- import { FEATURE_KEY } from './constants';
-
- /**
- * Returns the rooms object for breakout rooms.
- *
- * @param {Function|Object} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {Object} Object of rooms.
- */
- export const getBreakoutRooms = (stateful: Function | Object) => toState(stateful)[FEATURE_KEY].rooms;
-
- /**
- * Returns the main room.
- *
- * @param {Function|Object} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {Object|undefined} The main room object, or undefined.
- */
- export const getMainRoom = (stateful: Function | Object) => {
- const rooms = getBreakoutRooms(stateful);
-
- return _.find(rooms, (room: Object) => room.isMainRoom);
- };
-
- /**
- * Returns the room by Jid.
- *
- * @param {Function|Object} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @param {string} roomJid - The jid of the room.
- * @returns {Object|undefined} The main room object, or undefined.
- */
- export const getRoomByJid = (stateful: Function | Object, roomJid: string): Object => {
- const rooms = getBreakoutRooms(stateful);
-
- return _.find(rooms, (room: Object) => room.jid === roomJid);
- };
-
- /**
- * Returns the id of the current room.
- *
- * @param {Function|Object} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {string} Room id or undefined.
- */
- export const getCurrentRoomId = (stateful: Function | Object) => {
- const conference = getCurrentConference(stateful);
-
- // $FlowExpectedError
- return conference?.getName();
- };
-
- /**
- * Determines whether the local participant is in a breakout room.
- *
- * @param {Function|Object} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {boolean}
- */
- export const isInBreakoutRoom = (stateful: Function | Object) => {
- const conference = getCurrentConference(stateful);
-
- // $FlowExpectedError
- return conference?.getBreakoutRooms()
- ?.isBreakoutRoom();
- };
-
- /**
- * Returns the breakout rooms config.
- *
- * @param {Function|Object} stateful - The redux store, the redux
- * {@code getState} function, or the redux state itself.
- * @returns {Object}
- */
- export const getBreakoutRoomsConfig = (stateful: Function | Object) => {
- const state = toState(stateful);
- const { breakoutRooms = {} } = state['features/base/config'];
-
- return breakoutRooms;
- };
-
- /**
- * Returns whether the add breakout room button is visible.
- *
- * @param {Function | Object} stateful - Global state.
- * @returns {boolean}
- */
- export const isAddBreakoutRoomButtonVisible = (stateful: Function | Object) => {
- 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 {Function | Object} stateful - Global state.
- * @returns {boolean}
- */
- export const isAutoAssignParticipantsVisible = (stateful: Function | Object) => {
- 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;
- };
|