import React from 'react'; import { useSelector } from 'react-redux'; import { makeStyles } from 'tss-react/mui'; import { IReduxState } from '../../../app/types'; import { IconPinParticipant } from '../../../base/icons/svg'; import { getParticipantById } from '../../../base/participants/functions'; import BaseIndicator from '../../../base/react/components/web/BaseIndicator'; // eslint-disable-next-line lines-around-comment // @ts-ignore import { getPinnedActiveParticipants, isStageFilmstripAvailable } from '../../functions.web'; /** * The type of the React {@code Component} props of {@link PinnedIndicator}. */ type Props = { /** * The font-size for the icon. */ iconSize: number; /** * The participant id who we want to render the raised hand indicator * for. */ participantId: string; /** * From which side of the indicator the tooltip should appear from. */ tooltipPosition: string; }; const useStyles = makeStyles()(() => { return { pinnedIndicator: { backgroundColor: 'rgba(0, 0, 0, .7)', padding: '2px', zIndex: 3, display: 'inline-block', borderRadius: '4px', boxSizing: 'border-box' } }; }); /** * Thumbnail badge showing that the participant would like to speak. * * @returns {ReactElement} */ const PinnedIndicator = ({ iconSize, participantId, tooltipPosition }: Props) => { const stageFilmstrip = useSelector(isStageFilmstripAvailable); const pinned = useSelector((state: IReduxState) => getParticipantById(state, participantId))?.pinned; const activePinnedParticipants: Array<{ participantId: string; pinned: boolean; }> = useSelector(getPinnedActiveParticipants); const isPinned = activePinnedParticipants.find(p => p.participantId === participantId); const { classes: styles } = useStyles(); if ((stageFilmstrip && !isPinned) || (!stageFilmstrip && !pinned)) { return null; } return (