You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ContextMenuMore.js 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // @flow
  2. import React, { useCallback } from 'react';
  3. import { useTranslation } from 'react-i18next';
  4. import { TouchableOpacity } from 'react-native';
  5. import { Text } from 'react-native-paper';
  6. import { useDispatch, useSelector } from 'react-redux';
  7. import { openDialog, hideDialog } from '../../../base/dialog/actions';
  8. import BottomSheet from '../../../base/dialog/components/native/BottomSheet';
  9. import {
  10. Icon, IconMicDisabledHollow,
  11. IconVideoOff
  12. } from '../../../base/icons';
  13. import {
  14. getLocalParticipant,
  15. getParticipantCount, isEveryoneModerator
  16. } from '../../../base/participants';
  17. import { BlockAudioVideoDialog } from '../../../video-menu';
  18. import MuteEveryonesVideoDialog
  19. from '../../../video-menu/components/native/MuteEveryonesVideoDialog';
  20. import styles from './styles';
  21. export const ContextMenuMore = () => {
  22. const dispatch = useDispatch();
  23. const blockAudioVideo = useCallback(() => dispatch(openDialog(BlockAudioVideoDialog)), [ dispatch ]);
  24. const cancel = useCallback(() => dispatch(hideDialog()), [ dispatch ]);
  25. const { id } = useSelector(getLocalParticipant);
  26. const everyoneModerator = useSelector(isEveryoneModerator);
  27. const participantsCount = useSelector(getParticipantCount);
  28. const showSlidingView = !everyoneModerator && participantsCount > 2;
  29. const muteAllVideo = useCallback(() =>
  30. dispatch(openDialog(MuteEveryonesVideoDialog,
  31. { exclude: [ id ] })),
  32. [ dispatch ]);
  33. const { t } = useTranslation();
  34. return (
  35. <BottomSheet
  36. addScrollViewPadding = { false }
  37. onCancel = { cancel }
  38. showSlidingView = { showSlidingView }
  39. style = { styles.contextMenuMore }>
  40. <TouchableOpacity
  41. onPress = { muteAllVideo }
  42. style = { styles.contextMenuItem }>
  43. <Icon
  44. size = { 20 }
  45. src = { IconVideoOff } />
  46. <Text style = { styles.contextMenuItemText }>{t('participantsPane.actions.stopEveryonesVideo')}</Text>
  47. </TouchableOpacity>
  48. <TouchableOpacity
  49. onPress = { blockAudioVideo }
  50. style = { styles.contextMenuItem }>
  51. <Icon
  52. size = { 20 }
  53. src = { IconMicDisabledHollow }
  54. style = { styles.contextMenuIcon } />
  55. <Text style = { styles.contextMenuItemText }>
  56. {t('participantsPane.actions.blockEveryoneMicCamera')}
  57. </Text>
  58. </TouchableOpacity>
  59. </BottomSheet>
  60. );
  61. };