import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { TouchableOpacity, View, ViewStyle } from 'react-native'; import { Divider, Text } from 'react-native-paper'; import { useDispatch, useSelector } from 'react-redux'; import { IReduxState } from '../../../app/types'; import { requestDisableAudioModeration, requestDisableVideoModeration, requestEnableAudioModeration, requestEnableVideoModeration } from '../../../av-moderation/actions'; import { MEDIA_TYPE } from '../../../av-moderation/constants'; import { isEnabled as isAvModerationEnabled, isSupported as isAvModerationSupported } from '../../../av-moderation/functions'; import { getCurrentConference } from '../../../base/conference/functions'; import { hideSheet, openDialog } from '../../../base/dialog/actions'; import BottomSheet from '../../../base/dialog/components/native/BottomSheet'; import Icon from '../../../base/icons/components/Icon'; import { IconCheck, IconRaiseHand, IconVideoOff } from '../../../base/icons/svg'; import { raiseHand } from '../../../base/participants/actions'; import { getRaiseHandsQueue, isLocalParticipantModerator } from '../../../base/participants/functions'; import { LOWER_HAND_MESSAGE } from '../../../base/tracks/constants'; import MuteEveryonesVideoDialog from '../../../video-menu/components/native/MuteEveryonesVideoDialog'; import styles from './styles'; export const ContextMenuMore = () => { const dispatch = useDispatch(); const muteAllVideo = useCallback(() => { dispatch(openDialog(MuteEveryonesVideoDialog)); dispatch(hideSheet()); }, [ dispatch ]); const conference = useSelector(getCurrentConference); const raisedHandsQueue = useSelector(getRaiseHandsQueue); const moderator = useSelector(isLocalParticipantModerator); const lowerAllHands = useCallback(() => { dispatch(raiseHand(false)); conference?.sendEndpointMessage('', { name: LOWER_HAND_MESSAGE }); dispatch(hideSheet()); }, [ dispatch ]); const { t } = useTranslation(); const isModerationSupported = useSelector((state: IReduxState) => isAvModerationSupported()(state)); const isAudioModerationEnabled = useSelector(isAvModerationEnabled(MEDIA_TYPE.AUDIO)); const isVideoModerationEnabled = useSelector(isAvModerationEnabled(MEDIA_TYPE.VIDEO)); const disableAudioModeration = useCallback(() => dispatch(requestDisableAudioModeration()), [ dispatch ]); const disableVideoModeration = useCallback(() => dispatch(requestDisableVideoModeration()), [ dispatch ]); const enableAudioModeration = useCallback(() => dispatch(requestEnableAudioModeration()), [ dispatch ]); const enableVideoModeration = useCallback(() => dispatch(requestEnableVideoModeration()), [ dispatch ]); return ( {t('participantsPane.actions.stopEveryonesVideo')} { moderator && raisedHandsQueue.length !== 0 && {t('participantsPane.actions.lowerAllHands')} } {isModerationSupported && <> {/* @ts-ignore */} {t('participantsPane.actions.allow')} {isAudioModerationEnabled ? {t('participantsPane.actions.audioModeration')} : {t('participantsPane.actions.audioModeration')} } {isVideoModerationEnabled ? {t('participantsPane.actions.videoModeration')} : {t('participantsPane.actions.videoModeration')} } } ); };