// @flow import React from 'react'; import type { Node } from 'react'; import { useTranslation } from 'react-i18next'; import { TouchableOpacity, View } from 'react-native'; import { Text } from 'react-native-paper'; import { Avatar } from '../../../base/avatar'; import { MEDIA_STATE, type MediaState, AudioStateIcons, VideoStateIcons } from '../../constants'; import { RaisedHandIndicator } from './RaisedHandIndicator'; import styles from './styles'; type Props = { /** * Media state for audio */ audioMediaState: MediaState, /** * React children */ children?: Node, /** * The name of the participant. Used for showing lobby names. */ displayName: string, /** * Is the participant waiting? */ isKnockingParticipant: boolean, /** * Whether or not the user is a moderator. */ isModerator?: boolean, /** * True if the participant is local. */ local: boolean, /** * Callback to be invoked on pressing the participant item. */ onPress?: Function, /** * The ID of the participant. */ participantID: string, /** * True if the participant have raised hand. */ raisedHand: boolean, /** * Media state for video */ videoMediaState: MediaState } /** * Participant item. * * @returns {React$Element} */ function ParticipantItem({ children, displayName, isKnockingParticipant, isModerator, local, onPress, participantID, raisedHand, audioMediaState = MEDIA_STATE.NONE, videoMediaState = MEDIA_STATE.NONE }: Props) { const { t } = useTranslation(); return ( { displayName } { local ? ({t('chat.you')}) : null } {isModerator && {t('videothumbnail.moderator')}} { !isKnockingParticipant && <> { raisedHand && } {VideoStateIcons[videoMediaState]} {AudioStateIcons[audioMediaState]} } { !local && children } ); } export default ParticipantItem;