Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

BreakoutRoomContextMenu.js 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 { createBreakoutRoomsEvent, sendAnalytics } from '../../../analytics';
  8. import { hideDialog } from '../../../base/dialog/actions';
  9. import BottomSheet from '../../../base/dialog/components/native/BottomSheet';
  10. import {
  11. Icon,
  12. IconClose,
  13. IconRingGroup
  14. } from '../../../base/icons';
  15. import { isLocalParticipantModerator } from '../../../base/participants';
  16. import styles from '../../../participants-pane/components/native/styles';
  17. import { closeBreakoutRoom, moveToRoom, removeBreakoutRoom } from '../../actions';
  18. type Props = {
  19. /**
  20. * The room for which the menu is open.
  21. */
  22. room: Object
  23. }
  24. const BreakoutRoomContextMenu = ({ room }: Props) => {
  25. const dispatch = useDispatch();
  26. const closeDialog = useCallback(() => dispatch(hideDialog()), [ dispatch ]);
  27. const isLocalModerator = useSelector(isLocalParticipantModerator);
  28. const { t } = useTranslation();
  29. const onJoinRoom = useCallback(() => {
  30. sendAnalytics(createBreakoutRoomsEvent('join'));
  31. dispatch(moveToRoom(room.jid));
  32. closeDialog();
  33. }, [ dispatch, room ]);
  34. const onRemoveBreakoutRoom = useCallback(() => {
  35. dispatch(removeBreakoutRoom(room.jid));
  36. closeDialog();
  37. }, [ dispatch, room ]);
  38. const onCloseBreakoutRoom = useCallback(() => {
  39. dispatch(closeBreakoutRoom(room.id));
  40. closeDialog();
  41. }, [ dispatch, room ]);
  42. return (
  43. <BottomSheet
  44. addScrollViewPadding = { false }
  45. onCancel = { closeDialog }
  46. showSlidingView = { true }>
  47. <TouchableOpacity
  48. onPress = { onJoinRoom }
  49. style = { styles.contextMenuItem }>
  50. <Icon
  51. size = { 24 }
  52. src = { IconRingGroup } />
  53. <Text style = { styles.contextMenuItemText }>{t('breakoutRooms.actions.join')}</Text>
  54. </TouchableOpacity>
  55. {!room?.isMainRoom && isLocalModerator
  56. && !(room?.participants && Object.keys(room.participants).length > 0)
  57. ? <TouchableOpacity
  58. onPress = { onRemoveBreakoutRoom }
  59. style = { styles.contextMenuItem }>
  60. <Icon
  61. size = { 24 }
  62. src = { IconClose } />
  63. <Text style = { styles.contextMenuItemText }>{t('breakoutRooms.actions.remove')}</Text>
  64. </TouchableOpacity>
  65. : <TouchableOpacity
  66. onPress = { onCloseBreakoutRoom }
  67. style = { styles.contextMenuItem }>
  68. <Icon
  69. size = { 24 }
  70. src = { IconClose } />
  71. <Text style = { styles.contextMenuItemText }>{t('breakoutRooms.actions.close')}</Text>
  72. </TouchableOpacity>
  73. }
  74. </BottomSheet>
  75. );
  76. };
  77. export default BreakoutRoomContextMenu;