import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import { makeStyles } from 'tss-react/mui'; import { admitMultiple, goLive } from '../../../visitors/actions'; import { getPromotionRequests, getVisitorsCount, getVisitorsInQueueCount, isVisitorsLive, shouldDisplayCurrentVisitorsList } from '../../../visitors/functions'; import { VisitorsItem } from './VisitorsItem'; const useStyles = makeStyles()(theme => { return { container: { margin: `${theme.spacing(3)} 0` }, headingW: { color: theme.palette.warning02 }, drawerActions: { listStyleType: 'none', margin: 0, padding: 0 }, drawerItem: { alignItems: 'center', color: theme.palette.text01, display: 'flex', padding: '12px 16px', ...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: { ...theme.typography.bodyShortBold, color: theme.palette.text02 }, link: { ...theme.typography.labelBold, color: theme.palette.link01, cursor: 'pointer' } }; }); /** * Component used to display a list of visitors waiting for approval to join the main meeting. * * @returns {ReactNode} */ export default function VisitorsList() { const requests = useSelector(getPromotionRequests); const visitorsCount = useSelector(getVisitorsCount); const visitorsInQueueCount = useSelector(getVisitorsInQueueCount); const isLive = useSelector(isVisitorsLive); const showVisitorsInQueue = visitorsInQueueCount > 0 && isLive === false; const showCurrentVisitorsList = useSelector(shouldDisplayCurrentVisitorsList); const { t } = useTranslation(); const { classes, cx } = useStyles(); const dispatch = useDispatch(); const admitAll = useCallback(() => { dispatch(admitMultiple(requests)); }, [ dispatch, requests ]); const goLiveCb = useCallback(() => { dispatch(goLive()); }, [ dispatch ]); if (visitorsCount <= 0 && !showVisitorsInQueue) { return null; } if (showCurrentVisitorsList && requests.length <= 0 && !showVisitorsInQueue) { return null; } return ( <>
{ !showCurrentVisitorsList && t('participantsPane.headings.visitors', { count: visitorsCount })} { requests.length > 0 && t(`participantsPane.headings.${showCurrentVisitorsList ? 'viewerRequests' : 'visitorRequests'}`, { count: requests.length }) } { showVisitorsInQueue && t('participantsPane.headings.visitorInQueue', { count: visitorsInQueueCount }) }
{ requests.length > 1 && !showVisitorsInQueue // Go live button is with higher priority &&
{ t('participantsPane.actions.admitAll') }
} { showVisitorsInQueue &&
{ t('participantsPane.actions.goLive') }
}
{ requests.length > 0 &&
{ requests.map(r => ( ) ) }
} ); }