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.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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
  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 participantsCount = useSelector(getParticipantCount);
  27. const showSlidingView = participantsCount > 2;
  28. const muteAllVideo = useCallback(() =>
  29. dispatch(openDialog(MuteEveryonesVideoDialog,
  30. { exclude: [ id ] })),
  31. [ dispatch ]);
  32. const { t } = useTranslation();
  33. return (
  34. <BottomSheet
  35. addScrollViewPadding = { false }
  36. onCancel = { cancel }
  37. showSlidingView = { showSlidingView }
  38. style = { styles.contextMenuMore }>
  39. <TouchableOpacity
  40. onPress = { muteAllVideo }
  41. style = { styles.contextMenuItem }>
  42. <Icon
  43. size = { 20 }
  44. src = { IconVideoOff } />
  45. <Text style = { styles.contextMenuItemText }>{t('participantsPane.actions.stopEveryonesVideo')}</Text>
  46. </TouchableOpacity>
  47. <TouchableOpacity
  48. onPress = { blockAudioVideo }
  49. style = { styles.contextMenuItem }>
  50. <Icon
  51. size = { 20 }
  52. src = { IconMicDisabledHollow }
  53. style = { styles.contextMenuIcon } />
  54. <Text style = { styles.contextMenuItemText }>
  55. {t('participantsPane.actions.blockEveryoneMicCamera')}
  56. </Text>
  57. </TouchableOpacity>
  58. </BottomSheet>
  59. );
  60. };