// @flow import { makeStyles } from '@material-ui/styles'; import React, { useCallback, useState, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { ContextMenu, ContextMenuItemGroup } from '../../../base/components'; import { IconChat, IconCloseCircle, IconHorizontalPoints } from '../../../base/icons'; import { hasRaisedHand } from '../../../base/participants'; import Button from '../../../base/ui/components/web/Button'; import { BUTTON_TYPES } from '../../../base/ui/constants'; import { showLobbyChatButton } from '../../../lobby/functions'; import { ACTION_TRIGGER, MEDIA_STATE } from '../../constants'; import { useLobbyActions } from '../../hooks'; import ParticipantItem from './ParticipantItem'; type Props = { /** * If an overflow drawer should be displayed. */ overflowDrawer: boolean, /** * Callback used to open a drawer with admit/reject actions. */ openDrawerForParticipant: Function, /** * Participant reference. */ participant: Object }; const useStyles = makeStyles(theme => { return { button: { marginRight: `${theme.spacing(2)}px` }, moreButton: { paddingRight: '6px', paddingLeft: '6px', marginRight: `${theme.spacing(2)}px` }, contextMenu: { position: 'fixed', top: 'auto', marginRight: '8px' } }; }); export const LobbyParticipantItem = ({ overflowDrawer, participant: p, openDrawerForParticipant }: Props) => { const { id } = p; const [ admit, reject, chat ] = useLobbyActions({ participantID: id }); const { t } = useTranslation(); const [ isOpen, setIsOpen ] = useState(false); const styles = useStyles(); const showChat = useSelector(showLobbyChatButton(p)); const moreButtonRef = useRef(); const openContextMenu = useCallback(() => setIsOpen(true)); const closeContextMenu = useCallback(() => setIsOpen(false)); const renderAdmitButton = () => (