// @flow import { makeStyles } from '@material-ui/core/styles'; import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { useSelector, useDispatch } from 'react-redux'; import { Avatar } from '../../../base/avatar'; import { Icon, IconCheck, IconClose } from '../../../base/icons'; import { withPixelLineHeight } from '../../../base/styles/functions.web'; import { admitMultiple } from '../../../lobby/actions.web'; import { getLobbyEnabled, getKnockingParticipants } from '../../../lobby/functions'; import { Drawer, JitsiPortal } from '../../../toolbox/components/web'; import { showOverflowDrawer } from '../../../toolbox/functions'; import { useLobbyActions, useParticipantDrawer } from '../../hooks'; import LobbyParticipantItems from './LobbyParticipantItems'; const useStyles = makeStyles(theme => { return { drawerActions: { listStyleType: 'none', margin: 0, padding: 0 }, drawerItem: { alignItems: 'center', color: theme.palette.text01, display: 'flex', padding: '12px 16px', ...withPixelLineHeight(theme.typography.bodyShortRegularLarge), '&:first-child': { marginTop: '15px' }, '&:hover': { cursor: 'pointer', background: theme.palette.action02 } }, icon: { marginRight: 16 }, headingContainer: { alignItems: 'center', display: 'flex', justifyContent: 'space-between' }, heading: { ...withPixelLineHeight(theme.typography.heading7), color: theme.palette.text02 }, link: { ...withPixelLineHeight(theme.typography.labelBold), color: theme.palette.link01, cursor: 'pointer' } }; }); /** * Component used to display a list of participants waiting in the lobby. * * @returns {ReactNode} */ export default function LobbyParticipants() { const lobbyEnabled = useSelector(getLobbyEnabled); const participants = useSelector(getKnockingParticipants); const { t } = useTranslation(); const classes = useStyles(); const dispatch = useDispatch(); const admitAll = useCallback(() => { dispatch(admitMultiple(participants)); }, [ dispatch, participants ]); const overflowDrawer = useSelector(showOverflowDrawer); const [ drawerParticipant, closeDrawer, openDrawerForParticipant ] = useParticipantDrawer(); const [ admit, reject ] = useLobbyActions(drawerParticipant, closeDrawer); if (!lobbyEnabled || !participants.length) { return null; } return ( <>
{t('participantsPane.headings.lobby', { count: participants.length })}
{t('lobby.admitAll')}
  • { drawerParticipant && drawerParticipant.displayName }
  • { t('lobby.admit') }
  • { t('lobby.reject')}
); }