// @flow import React, { useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { TouchableOpacity, View } from 'react-native'; import { Divider, Text } from 'react-native-paper'; import { useDispatch, useSelector, useStore } from 'react-redux'; import { Avatar } from '../../../base/avatar'; import { hideDialog, openDialog } from '../../../base/dialog'; import BottomSheet from '../../../base/dialog/components/native/BottomSheet'; import { Icon, IconCloseCircle, IconConnectionActive, IconMessage, IconMicrophoneEmptySlash, IconMuteEveryoneElse, IconVideoOff } from '../../../base/icons'; import { isLocalParticipantModerator } from '../../../base/participants'; import { getIsParticipantVideoMuted } from '../../../base/tracks'; import { openChat } from '../../../chat/actions.native'; import { KickRemoteParticipantDialog, MuteEveryoneDialog, MuteRemoteParticipantDialog, MuteRemoteParticipantsVideoDialog, VolumeSlider } from '../../../video-menu'; import styles from './styles'; type Props = { /** * Participant reference */ participant: Object }; export const ContextMenuMeetingParticipantDetails = ({ participant: p }: Props) => { const [ volume, setVolume ] = useState(undefined); const store = useStore(); const startSilent = store.getState['features/base/config']; const dispatch = useDispatch(); const cancel = useCallback(() => dispatch(hideDialog()), [ dispatch ]); const changeVolume = useCallback(() => setVolume(volume), [ volume ]); const displayName = p.name; const isLocalModerator = useSelector(isLocalParticipantModerator); const isParticipantVideoMuted = useSelector(getIsParticipantVideoMuted(p)); const kickRemoteParticipant = useCallback(() => { dispatch(openDialog(KickRemoteParticipantDialog, { participantID: p.id })); }, [ dispatch, p ]); const muteAudio = useCallback(() => { dispatch(openDialog(MuteRemoteParticipantDialog, { participantID: p.id })); }, [ dispatch, p ]); const muteEveryoneElse = useCallback(() => { dispatch(openDialog(MuteEveryoneDialog, { exclude: [ p.id ] })); }, [ dispatch, p ]); const muteVideo = useCallback(() => { dispatch(openDialog(MuteRemoteParticipantsVideoDialog, { participantID: p.id })); }, [ dispatch, p ]); const onVolumeChange = startSilent ? undefined : changeVolume; const sendPrivateMessage = useCallback(() => { dispatch(hideDialog()); dispatch(openChat(p)); }, [ dispatch, p ]); const { t } = useTranslation(); return ( { displayName } { isLocalModerator && { t('participantsPane.actions.mute') } } { isLocalModerator && { t('participantsPane.actions.muteEveryoneElse') } } { isLocalModerator && ( isParticipantVideoMuted || { t('participantsPane.actions.stopVideo') } ) } { isLocalModerator && { t('videothumbnail.kick') } } { t('toolbar.accessibilityLabel.privateMessage') } { t('participantsPane.actions.networkStats') } ); };