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.

HangupMenu.tsx 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import React, { useCallback } from 'react';
  2. import { View } from 'react-native';
  3. import { useDispatch, useSelector } from 'react-redux';
  4. import { createBreakoutRoomsEvent, createToolbarEvent } from '../../../analytics/AnalyticsEvents';
  5. import { sendAnalytics } from '../../../analytics/functions';
  6. import { appNavigate } from '../../../app/actions';
  7. import { IReduxState } from '../../../app/types';
  8. import ColorSchemeRegistry from '../../../base/color-scheme/ColorSchemeRegistry';
  9. import { endConference } from '../../../base/conference/actions';
  10. import { hideSheet } from '../../../base/dialog/actions';
  11. import BottomSheet from '../../../base/dialog/components/native/BottomSheet';
  12. import { PARTICIPANT_ROLE } from '../../../base/participants/constants';
  13. import { getLocalParticipant } from '../../../base/participants/functions';
  14. import Button from '../../../base/ui/components/native/Button';
  15. import { BUTTON_TYPES } from '../../../base/ui/constants.native';
  16. import { moveToRoom } from '../../../breakout-rooms/actions';
  17. import { isInBreakoutRoom } from '../../../breakout-rooms/functions';
  18. /**
  19. * Menu presenting options to leave a room or meeting and to end meeting.
  20. *
  21. * @returns {JSX.Element} - The hangup menu.
  22. */
  23. function HangupMenu() {
  24. const dispatch = useDispatch();
  25. const _styles: any = useSelector((state: IReduxState) => ColorSchemeRegistry.get(state, 'Toolbox'));
  26. const inBreakoutRoom = useSelector(isInBreakoutRoom);
  27. const isModerator = useSelector((state: IReduxState) =>
  28. getLocalParticipant(state)?.role === PARTICIPANT_ROLE.MODERATOR);
  29. const { DESTRUCTIVE, SECONDARY } = BUTTON_TYPES;
  30. const handleEndConference = useCallback(() => {
  31. dispatch(hideSheet());
  32. sendAnalytics(createToolbarEvent('endmeeting'));
  33. dispatch(endConference());
  34. dispatch(appNavigate(undefined));
  35. }, [ hideSheet ]);
  36. const handleLeaveConference = useCallback(() => {
  37. dispatch(hideSheet());
  38. sendAnalytics(createToolbarEvent('hangup'));
  39. dispatch(appNavigate(undefined));
  40. }, [ hideSheet ]);
  41. const handleLeaveBreakoutRoom = useCallback(() => {
  42. dispatch(hideSheet());
  43. sendAnalytics(createBreakoutRoomsEvent('leave'));
  44. dispatch(moveToRoom());
  45. }, [ hideSheet ]);
  46. return (
  47. <BottomSheet>
  48. <View style = { _styles.hangupMenuContainer }>
  49. { isModerator && <Button
  50. accessibilityLabel = 'toolbar.endConference'
  51. labelKey = 'toolbar.endConference'
  52. onClick = { handleEndConference }
  53. style = { _styles.hangupButton }
  54. type = { DESTRUCTIVE } /> }
  55. <Button
  56. accessibilityLabel = 'toolbar.leaveConference'
  57. labelKey = 'toolbar.leaveConference'
  58. onClick = { handleLeaveConference }
  59. style = { _styles.hangupButton }
  60. type = { SECONDARY } />
  61. { inBreakoutRoom && <Button
  62. accessibilityLabel = 'breakoutRooms.actions.leaveBreakoutRoom'
  63. labelKey = 'breakoutRooms.actions.leaveBreakoutRoom'
  64. onClick = { handleLeaveBreakoutRoom }
  65. style = { _styles.hangupButton }
  66. type = { SECONDARY } /> }
  67. </View>
  68. </BottomSheet>
  69. );
  70. }
  71. export default HangupMenu;