Files
jitsi-meet/react/features/breakout-rooms/components/web/RoomContextMenu.js
robertpin c2ab8935c1 fix(breakout-rooms) Improve breakout rooms
Don't show more menu on the main room

Fix join room on mobile web

When moving to room reset breakout rooms state to avoid showing incorrect data before response from prosody is received
2021-11-26 08:40:42 +01:00

103 lines
3.1 KiB
JavaScript

// @flow
import React, { useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux';
import { createBreakoutRoomsEvent, sendAnalytics } from '../../../analytics';
import { ContextMenu, ContextMenuItemGroup } from '../../../base/components';
import {
IconClose,
IconRingGroup
} from '../../../base/icons';
import { isLocalParticipantModerator } from '../../../base/participants';
import { showOverflowDrawer } from '../../../toolbox/functions.web';
import { closeBreakoutRoom, moveToRoom, removeBreakoutRoom } from '../../actions';
type Props = {
/**
* Room reference.
*/
entity: Object,
/**
* Target elements against which positioning calculations are made.
*/
offsetTarget: HTMLElement,
/**
* Callback for the mouse entering the component.
*/
onEnter: Function,
/**
* Callback for the mouse leaving the component.
*/
onLeave: Function,
/**
* Callback for making a selection in the menu.
*/
onSelect: Function
};
export const RoomContextMenu = ({
entity: room,
offsetTarget,
onEnter,
onLeave,
onSelect
}: Props) => {
const dispatch = useDispatch();
const { t } = useTranslation();
const isLocalModerator = useSelector(isLocalParticipantModerator);
const _overflowDrawer = useSelector(showOverflowDrawer);
const onJoinRoom = useCallback(() => {
sendAnalytics(createBreakoutRoomsEvent('join'));
dispatch(moveToRoom(room.jid));
}, [ dispatch, room ]);
const onRemoveBreakoutRoom = useCallback(() => {
dispatch(removeBreakoutRoom(room.jid));
}, [ dispatch, room ]);
const onCloseBreakoutRoom = useCallback(() => {
dispatch(closeBreakoutRoom(room.id));
}, [ dispatch, room ]);
const isRoomEmpty = !(room?.participants && Object.keys(room.participants).length > 0);
const actions = [
_overflowDrawer ? {
accessibilityLabel: t('breakoutRooms.actions.join'),
icon: IconRingGroup,
onClick: onJoinRoom,
text: t('breakoutRooms.actions.join')
} : null,
!room?.isMainRoom && isLocalModerator ? {
accessibilityLabel: isRoomEmpty ? t('breakoutRooms.actions.remove') : t('breakoutRooms.actions.close'),
icon: IconClose,
id: isRoomEmpty ? `remove-room-${room?.id}` : `close-room-${room?.id}`,
onClick: isRoomEmpty ? onRemoveBreakoutRoom : onCloseBreakoutRoom,
text: isRoomEmpty ? t('breakoutRooms.actions.remove') : t('breakoutRooms.actions.close')
} : null
].filter(Boolean);
const lowerMenu = useCallback(() => onSelect(true));
return (
<ContextMenu
entity = { room }
isDrawerOpen = { room }
offsetTarget = { offsetTarget }
onClick = { lowerMenu }
onDrawerClose = { onSelect }
onMouseEnter = { onEnter }
onMouseLeave = { onLeave }>
<ContextMenuItemGroup actions = { actions } />
</ContextMenu>
);
};