agora-appbuilder-core 3.0.10 → 3.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/Readme.md +0 -6
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +4719 -5862
  4. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +0 -4
  5. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +0 -18
  6. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +0 -2
  7. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +26 -30
  8. package/template/agora-rn-uikit/src/Controls/Icons.ts +83 -30
  9. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  10. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +0 -1
  11. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +0 -1
  12. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +0 -1
  13. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +0 -1
  14. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +0 -1
  15. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +0 -2
  16. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +0 -1
  17. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +0 -1
  18. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +0 -1
  19. package/template/agora-rn-uikit/src/Reducer/index.ts +0 -3
  20. package/template/agora-rn-uikit/src/Rtc/Create.tsx +1 -89
  21. package/template/agora-rn-uikit/src/RtcConfigure.tsx +2 -39
  22. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +5 -15
  23. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +9 -15
  24. package/template/agora-rn-uikit/src/index.ts +1 -3
  25. package/template/android/app/build.gradle +0 -1
  26. package/template/android/app/src/main/AndroidManifest.xml +15 -22
  27. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +0 -50
  28. package/template/android/build.gradle +3 -3
  29. package/template/babel.config.js +0 -1
  30. package/template/bridge/rtc/webNg/RtcEngine.ts +17 -110
  31. package/template/customization-api/sub-components.ts +1 -1
  32. package/template/customization-api/typeDefinition.ts +1 -2
  33. package/template/electron/index.html +27 -27
  34. package/template/electron/renderer/index.js +0 -1
  35. package/template/global.d.ts +4 -25
  36. package/template/index.rsdk.tsx +0 -1
  37. package/template/index.web.js +1 -2
  38. package/template/index.wsdk.tsx +1 -1
  39. package/template/ios/HelloWorld/Info.plist +1 -14
  40. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +0 -17
  41. package/template/metro.config.js +1 -1
  42. package/template/package.json +7 -18
  43. package/template/react-native-toast-message/index.d.ts +43 -43
  44. package/template/react-native-toast-message/src/colors/index.js +2 -3
  45. package/template/react-native-toast-message/src/components/base/index.js +59 -46
  46. package/template/react-native-toast-message/src/components/base/styles.js +32 -16
  47. package/template/react-native-toast-message/src/components/error.js +2 -3
  48. package/template/react-native-toast-message/src/components/info.js +2 -3
  49. package/template/react-native-toast-message/src/components/success.js +2 -3
  50. package/template/react-native-toast-message/src/index.js +31 -122
  51. package/template/react-native-toast-message/src/index.sdk.tsx +35 -125
  52. package/template/react-native-toast-message/src/styles.js +4 -3
  53. package/template/react-native-toast-message/src/styles.sdk.ts +4 -3
  54. package/template/src/App.tsx +0 -6
  55. package/template/src/AppWrapper.tsx +28 -63
  56. package/template/src/assets/icons.ts +102 -0
  57. package/template/src/atoms/HorizontalRule.tsx +1 -3
  58. package/template/src/atoms/PrimaryButton.tsx +26 -51
  59. package/template/src/atoms/SecondaryButton.tsx +5 -8
  60. package/template/src/atoms/TextInput.tsx +14 -12
  61. package/template/src/components/Chat.tsx +214 -86
  62. package/template/src/components/ChatContext.ts +1 -8
  63. package/template/src/components/ColorConfigure.tsx +1 -1
  64. package/template/src/components/ColorContext.ts +1 -1
  65. package/template/src/components/{Controls1.native.tsx → Controls.native.tsx} +4 -6
  66. package/template/src/components/Controls.tsx +42 -342
  67. package/template/src/components/DeviceConfigure.tsx +101 -461
  68. package/template/src/components/DeviceContext.tsx +4 -8
  69. package/template/src/components/EventsConfigure.tsx +7 -144
  70. package/template/src/components/GraphQLProvider.tsx +1 -1
  71. package/template/src/components/GridVideo.tsx +44 -59
  72. package/template/src/components/HostControlView.tsx +35 -114
  73. package/template/src/components/Navbar.tsx +398 -216
  74. package/template/src/components/NetworkQualityContext.tsx +20 -20
  75. package/template/src/components/ParticipantsView.tsx +154 -177
  76. package/template/src/components/PinnedVideo.tsx +120 -207
  77. package/template/src/components/Precall.native.tsx +119 -358
  78. package/template/src/components/Precall.tsx +135 -269
  79. package/template/src/components/RTMConfigure.tsx +4 -27
  80. package/template/src/components/Router.electron.ts +0 -1
  81. package/template/src/components/Router.native.ts +0 -1
  82. package/template/src/components/Router.sdk.ts +0 -1
  83. package/template/src/components/Router.ts +0 -1
  84. package/template/src/components/Settings.tsx +95 -26
  85. package/template/src/components/SettingsView.tsx +56 -251
  86. package/template/src/components/Share.tsx +273 -302
  87. package/template/src/components/StorageContext.tsx +3 -30
  88. package/template/src/components/chat-messages/useChatMessages.tsx +23 -69
  89. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -7
  90. package/template/src/components/common/Error.tsx +6 -20
  91. package/template/src/components/common/Logo.tsx +15 -16
  92. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -10
  93. package/template/src/components/contexts/VideoMeetingDataContext.tsx +7 -37
  94. package/template/src/components/livestream/LiveStreamContext.tsx +36 -270
  95. package/template/src/components/livestream/Types.ts +14 -39
  96. package/template/src/components/livestream/index.ts +0 -1
  97. package/template/src/components/livestream/views/LiveStreamControls.tsx +4 -12
  98. package/template/src/components/participants/AllAudienceParticipants.tsx +30 -101
  99. package/template/src/components/participants/AllHostParticipants.tsx +34 -103
  100. package/template/src/components/participants/MeParticipant.tsx +38 -0
  101. package/template/src/components/participants/ParticipantName.tsx +7 -13
  102. package/template/src/components/participants/ParticipantSectionTitle.tsx +10 -35
  103. package/template/src/components/participants/RemoteParticipants.tsx +71 -0
  104. package/template/src/components/participants/ScreenshareParticipants.tsx +12 -144
  105. package/template/src/components/precall/{LocalMute1.native.tsx → LocalMute.native.tsx} +5 -21
  106. package/template/src/components/precall/LocalMute.tsx +14 -84
  107. package/template/src/components/precall/VideoPreview.native.tsx +3 -48
  108. package/template/src/components/precall/VideoPreview.tsx +7 -163
  109. package/template/src/components/precall/joinCallBtn.tsx +2 -15
  110. package/template/src/components/precall/meetingTitle.tsx +12 -15
  111. package/template/src/components/precall/selectDevice.tsx +21 -1
  112. package/template/src/components/precall/textInput.tsx +4 -32
  113. package/template/src/components/precall/usePreCall.tsx +0 -16
  114. package/template/src/components/styles.ts +21 -42
  115. package/template/src/components/useShareLink.tsx +14 -12
  116. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  117. package/template/src/pages/Authenticate.tsx +15 -5
  118. package/template/src/pages/Create.tsx +165 -293
  119. package/template/src/pages/Join.tsx +67 -93
  120. package/template/src/pages/VideoCall.tsx +64 -89
  121. package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
  122. package/template/src/pages/video-call/NameWithMicIcon.tsx +44 -120
  123. package/template/src/pages/video-call/RenderComponent.tsx +2 -3
  124. package/template/src/pages/video-call/VideoCallScreen.tsx +9 -45
  125. package/template/src/pages/video-call/VideoComponent.tsx +3 -18
  126. package/template/src/pages/video-call/VideoRenderer.tsx +60 -218
  127. package/template/src/rtm-events/constants.ts +0 -2
  128. package/template/src/subComponents/ChatBubble.tsx +83 -123
  129. package/template/src/subComponents/ChatContainer.tsx +84 -257
  130. package/template/src/subComponents/ChatInput.tsx +46 -61
  131. package/template/src/subComponents/Checkbox.native.tsx +5 -16
  132. package/template/src/subComponents/Checkbox.tsx +2 -2
  133. package/template/src/subComponents/CopyJoinInfo.tsx +58 -36
  134. package/template/src/subComponents/FallbackLogo.tsx +40 -122
  135. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  136. package/template/src/subComponents/{LayoutIconDropdown1.native.tsx → LayoutIconDropdown.native.tsx} +18 -4
  137. package/template/src/subComponents/LayoutIconDropdown.tsx +134 -131
  138. package/template/src/subComponents/LocalAudioMute.tsx +27 -119
  139. package/template/src/subComponents/LocalEndCall.tsx +33 -71
  140. package/template/src/subComponents/LocalSwitchCamera.tsx +30 -17
  141. package/template/src/subComponents/LocalVideoMute.tsx +27 -117
  142. package/template/src/subComponents/Logo.tsx +4 -3
  143. package/template/src/subComponents/LogoutButton.tsx +1 -1
  144. package/template/src/subComponents/NetworkQualityPill.tsx +63 -60
  145. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  146. package/template/src/subComponents/Recording.tsx +29 -28
  147. package/template/src/subComponents/RemoteAudioMute.tsx +29 -83
  148. package/template/src/subComponents/RemoteEndCall.tsx +5 -8
  149. package/template/src/subComponents/RemoteVideoMute.tsx +21 -74
  150. package/template/src/subComponents/ScreenShareNotice.tsx +8 -83
  151. package/template/src/subComponents/SelectDevice.tsx +61 -404
  152. package/template/src/subComponents/SelectOAuth.tsx +8 -9
  153. package/template/src/subComponents/ToastConfig.tsx +10 -150
  154. package/template/src/subComponents/chat/ChatParticipants.tsx +78 -187
  155. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -95
  156. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -29
  157. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
  158. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +11 -24
  159. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +10 -17
  160. package/template/src/subComponents/recording/useRecording.tsx +27 -79
  161. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +70 -52
  162. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +2 -11
  163. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +4 -26
  164. package/template/src/utils/common.tsx +1 -155
  165. package/template/src/utils/index.tsx +0 -19
  166. package/template/src/utils/isMobileOrTablet.ts +2 -7
  167. package/template/src/utils/useButtonTemplate.tsx +0 -1
  168. package/template/src/utils/useMuteToggleLocal.ts +3 -54
  169. package/template/web/index.html +0 -5
  170. package/template/webpack.commons.js +8 -13
  171. package/template/webpack.web.config.js +0 -1
  172. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  173. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +0 -24
  174. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +0 -11
  175. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  176. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  177. package/template/android/app/src/main/res/values/colors.xml +0 -7
  178. package/template/react-native-toast-message/src/components/checkbox.js +0 -178
  179. package/template/react-native.config.js +0 -7
  180. package/template/src/assets/font-styles.css +0 -329
  181. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  182. package/template/src/assets/fonts/icomoon.ttf +0 -0
  183. package/template/src/assets/permission.png +0 -0
  184. package/template/src/assets/selection.json +0 -1
  185. package/template/src/atoms/ActionMenu.tsx +0 -236
  186. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +0 -71
  187. package/template/src/atoms/AnimatedActiveSpeaker.tsx +0 -84
  188. package/template/src/atoms/AnimatedRings.native.tsx +0 -68
  189. package/template/src/atoms/AnimatedRings.tsx +0 -70
  190. package/template/src/atoms/Card.tsx +0 -61
  191. package/template/src/atoms/CircularProgress.native.tsx +0 -121
  192. package/template/src/atoms/CircularProgress.tsx +0 -102
  193. package/template/src/atoms/CustomIcon.tsx +0 -88
  194. package/template/src/atoms/CustomSwitch.tsx +0 -287
  195. package/template/src/atoms/Dropdown.tsx +0 -306
  196. package/template/src/atoms/IconButton.tsx +0 -162
  197. package/template/src/atoms/ImageIcon.tsx +0 -98
  198. package/template/src/atoms/InfoBubble.tsx +0 -291
  199. package/template/src/atoms/Input.tsx +0 -87
  200. package/template/src/atoms/InviteInfo.tsx +0 -166
  201. package/template/src/atoms/LinkButton.tsx +0 -28
  202. package/template/src/atoms/OutlineButton.tsx +0 -61
  203. package/template/src/atoms/ParticipantsCount.tsx +0 -73
  204. package/template/src/atoms/Popup.tsx +0 -147
  205. package/template/src/atoms/RecordingInfo.tsx +0 -49
  206. package/template/src/atoms/Spacer.tsx +0 -22
  207. package/template/src/atoms/TertiaryButton.tsx +0 -78
  208. package/template/src/atoms/Toggle.tsx +0 -47
  209. package/template/src/atoms/Tooltip.native.tsx +0 -65
  210. package/template/src/atoms/Tooltip.tsx +0 -94
  211. package/template/src/atoms/UserAvatar.tsx +0 -60
  212. package/template/src/components/CommonStyles.ts +0 -44
  213. package/template/src/components/ToastComponent.tsx +0 -8
  214. package/template/src/components/participants/Participant.tsx +0 -302
  215. package/template/src/components/participants/UserActionMenuOptions.tsx +0 -398
  216. package/template/src/components/popups/InvitePopup.tsx +0 -115
  217. package/template/src/components/popups/StopRecordingPopup.tsx +0 -114
  218. package/template/src/components/precall/PermissionHelper.native.tsx +0 -5
  219. package/template/src/components/precall/PermissionHelper.tsx +0 -126
  220. package/template/src/components/precall/PreCallSettings.tsx +0 -52
  221. package/template/src/components/useToast.tsx +0 -41
  222. package/template/src/components/useVideoCall.tsx +0 -65
  223. package/template/src/pages/Endcall.tsx +0 -148
  224. package/template/src/pages/video-call/ActionSheet.native.tsx +0 -215
  225. package/template/src/pages/video-call/ActionSheet.tsx +0 -226
  226. package/template/src/pages/video-call/ActionSheetContent.tsx +0 -479
  227. package/template/src/pages/video-call/ActionSheetHandle.tsx +0 -38
  228. package/template/src/pages/video-call/ActionSheetStyles.css +0 -138
  229. package/template/src/pages/video-call/SidePanelHeader.tsx +0 -190
  230. package/template/src/pages/video-call/VideoCallMobileView.tsx +0 -139
  231. package/template/src/pages/video-call/VideoCallScreen.native.tsx +0 -37
  232. package/template/src/subComponents/ChatInput.ios.tsx +0 -237
  233. package/template/src/subComponents/EndcallPopup.tsx +0 -107
  234. package/template/src/subComponents/LayoutIconButton.tsx +0 -201
  235. package/template/src/subComponents/RemoteMutePopup.tsx +0 -193
  236. package/template/src/subComponents/RemoveMeetingPopup.tsx +0 -109
  237. package/template/src/subComponents/RemoveScreensharePopup.tsx +0 -109
  238. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +0 -207
  239. package/template/src/subComponents/SidePanelHeader.tsx +0 -112
  240. package/template/src/theme/index.ts +0 -46
  241. package/template/src/utils/PlatformWrapper.tsx +0 -21
  242. package/template/src/utils/hexadecimalTransparency.ts +0 -108
  243. package/template/src/utils/pendingStateUpdateHelper.ts +0 -19
  244. package/template/src/utils/useFocus.tsx +0 -46
  245. package/template/src/utils/useIsActiveSpeaker.ts +0 -27
  246. package/template/src/utils/useIsHandRaised.ts +0 -13
  247. package/template/src/utils/useRemoteEndScreenshare.ts +0 -26
  248. package/template/src/utils/useRemoteRequest.ts +0 -84
@@ -1,302 +0,0 @@
1
- /*
2
- ********************************************
3
- Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
- AppBuilder and all associated components, source code, APIs, services, and documentation
5
- (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
- accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
- Use without a license or in violation of any license terms and conditions (including use for
8
- any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
- information visit https://appbuilder.agora.io.
10
- *********************************************
11
- */
12
- import React, {useContext, useRef, useState} from 'react';
13
- import {View, StyleSheet, Text, TouchableOpacity} from 'react-native';
14
- import RemoteAudioMute from '../../subComponents/RemoteAudioMute';
15
- import RemoteVideoMute from '../../subComponents/RemoteVideoMute';
16
- import {ClientRole, RenderInterface} from '../../../agora-rn-uikit';
17
- import UserAvatar from '../../atoms/UserAvatar';
18
- import {isMobileUA, isWebInternal} from '../../utils/common';
19
- import ActionMenu, {ActionMenuItem} from '../../atoms/ActionMenu';
20
- import Spacer from '../../atoms/Spacer';
21
- import useRemoteEndCall from '../../utils/useRemoteEndCall';
22
- import {useChatMessages} from '../chat-messages/useChatMessages';
23
- import LocalVideoMute from '../../subComponents/LocalVideoMute';
24
- import {ButtonTemplateName} from '../../utils/useButtonTemplate';
25
- import LocalAudioMute from '../../subComponents/LocalAudioMute';
26
- import RemoveMeetingPopup from '../../subComponents/RemoveMeetingPopup';
27
- import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
28
- import {
29
- RaiseHandValue,
30
- LiveStreamContext,
31
- LiveStreamControlMessageEnum,
32
- } from '../livestream';
33
- import events, {EventPersistLevel} from '../../rtm-events-api';
34
- import IconButton from '../../atoms/IconButton';
35
- import ThemeConfig from '../../theme';
36
- import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
37
- import useRemoteRequest, {
38
- REQUEST_REMOTE_TYPE,
39
- } from '../../utils/useRemoteRequest';
40
- import useRemoteMute, {MUTE_REMOTE_TYPE} from '../../utils/useRemoteMute';
41
- import {useLiveStreamDataContext} from '../contexts/LiveStreamDataContext';
42
- import {
43
- SidePanelType,
44
- useLayout,
45
- useRender,
46
- useRtc,
47
- useSidePanel,
48
- } from 'customization-api';
49
- import {getPinnedLayoutName} from '../../pages/video-call/DefaultLayouts';
50
- import UserActionMenuOptionsOptions from './UserActionMenuOptions';
51
- interface ParticipantInterface {
52
- isLocal: boolean;
53
- name: string;
54
- user: RenderInterface;
55
- showControls: boolean;
56
- isHostUser: boolean;
57
- isAudienceUser: boolean;
58
- isMobile?: boolean;
59
- handleClose: () => {};
60
- updateActionSheet: (screenName: 'chat' | 'participants' | 'settings') => {};
61
- }
62
-
63
- const Participant = (props: ParticipantInterface) => {
64
- const {coHostUids} = useContext(LiveStreamContext);
65
- const [isHovered, setIsHovered] = React.useState(false);
66
- const [actionMenuVisible, setActionMenuVisible] = React.useState(false);
67
- const usercontainerRef = useRef(null);
68
- const moreIconRef = useRef(null);
69
- const {
70
- user,
71
- name,
72
- showControls,
73
- isHostUser,
74
- isLocal,
75
- isAudienceUser,
76
- isMobile = false,
77
- handleClose,
78
- updateActionSheet,
79
- } = props;
80
- const {
81
- data: {isHost},
82
- } = useMeetingInfo();
83
-
84
- const showModal = () => {
85
- setActionMenuVisible((state) => !state);
86
- };
87
- return (
88
- <>
89
- <UserActionMenuOptionsOptions
90
- actionMenuVisible={actionMenuVisible}
91
- setActionMenuVisible={setActionMenuVisible}
92
- user={props.user}
93
- btnRef={moreIconRef}
94
- from={'partcipant'}
95
- />
96
- <PlatformWrapper showModal={showModal} setIsHovered={setIsHovered}>
97
- <View style={styles.container} ref={usercontainerRef}>
98
- <View style={styles.bgContainerStyle}>
99
- <UserAvatar
100
- name={name}
101
- containerStyle={styles.containerStyle}
102
- textStyle={styles.textStyle}
103
- />
104
- </View>
105
- <View style={{flex: 1, marginHorizontal: 8, alignSelf: 'center'}}>
106
- <Text style={styles.participantNameText} numberOfLines={1}>
107
- {name}
108
- </Text>
109
- {isLocal && <Text style={styles.subText}>{'Me'}</Text>}
110
- {!isLocal &&
111
- $config.EVENT_MODE &&
112
- coHostUids.indexOf(user.uid) !== -1 ? (
113
- <Text style={styles.subText}>{'Presenter'}</Text>
114
- ) : (
115
- <></>
116
- )}
117
- </View>
118
- <View style={styles.iconContainer}>
119
- {isHovered || actionMenuVisible || isMobileUA() ? (
120
- <View
121
- ref={moreIconRef}
122
- collapsable={false}
123
- style={{
124
- width: 24,
125
- height: 24,
126
- alignSelf: 'center',
127
- justifyContent: 'center',
128
- alignItems: 'center',
129
- borderRadius: 20,
130
- }}>
131
- <IconButton
132
- hoverEffect={true}
133
- hoverEffectStyle={{
134
- backgroundColor:
135
- $config.CARD_LAYER_5_COLOR +
136
- hexadecimalTransparency['20%'],
137
- borderRadius: 20,
138
- padding: 5,
139
- }}
140
- iconProps={{
141
- iconType: 'plain',
142
- name: 'more-menu',
143
- iconSize: 20,
144
- tintColor: $config.SECONDARY_ACTION_COLOR,
145
- }}
146
- onPress={() => {
147
- showModal();
148
- }}
149
- />
150
- </View>
151
- ) : (
152
- <Spacer size={24} horizontal={true} />
153
- )}
154
- {showControls ? (
155
- <>
156
- <Spacer horizontal={true} size={8} />
157
- {!$config.AUDIO_ROOM &&
158
- (isLocal
159
- ? !isAudienceUser && (
160
- <View>
161
- <LocalVideoMute
162
- plainIconHoverEffect={true}
163
- iconProps={(isVideoEnabled, isPermissionDenied) => {
164
- return {
165
- iconSize: 20,
166
- iconType: 'plain',
167
- iconContainerStyle: {padding: 8},
168
- showWarningIcon: false,
169
- tintColor: isVideoEnabled
170
- ? $config.PRIMARY_ACTION_BRAND_COLOR
171
- : isPermissionDenied
172
- ? $config.SEMANTIC_NEUTRAL
173
- : $config.SEMANTIC_ERROR,
174
- };
175
- }}
176
- showLabel={false}
177
- isMobileView={isMobile}
178
- />
179
- </View>
180
- )
181
- : !isAudienceUser && (
182
- <View>
183
- <RemoteVideoMute
184
- uid={user.uid}
185
- video={user.video}
186
- isHost={isHost}
187
- userContainerRef={usercontainerRef}
188
- />
189
- </View>
190
- ))}
191
- {isLocal
192
- ? !isAudienceUser && (
193
- <View>
194
- <LocalAudioMute
195
- plainIconHoverEffect={true}
196
- iconProps={(isAudioEnabled, isPermissionDenied) => {
197
- return {
198
- iconSize: 20,
199
- iconType: 'plain',
200
- iconContainerStyle: {padding: 8},
201
- showWarningIcon: false,
202
- tintColor: isAudioEnabled
203
- ? $config.PRIMARY_ACTION_BRAND_COLOR
204
- : isPermissionDenied
205
- ? $config.SEMANTIC_NEUTRAL
206
- : $config.SEMANTIC_ERROR,
207
- };
208
- }}
209
- showLabel={false}
210
- isMobileView={isMobile}
211
- />
212
- </View>
213
- )
214
- : !isAudienceUser && (
215
- <View>
216
- <RemoteAudioMute
217
- uid={user.uid}
218
- audio={user.audio}
219
- isHost={isHost}
220
- userContainerRef={usercontainerRef}
221
- />
222
- </View>
223
- )}
224
- </>
225
- ) : (
226
- <></>
227
- )}
228
- </View>
229
- </View>
230
- </PlatformWrapper>
231
- </>
232
- );
233
- };
234
- export default Participant;
235
-
236
- const PlatformWrapper = ({children, showModal, setIsHovered}) => {
237
- return isWebInternal() ? (
238
- <div
239
- style={{}}
240
- onMouseEnter={() => {
241
- setIsHovered(true);
242
- }}
243
- onMouseLeave={() => {
244
- setIsHovered(false);
245
- }}>
246
- {children}
247
- </div>
248
- ) : (
249
- <>{children}</>
250
- );
251
- };
252
-
253
- const styles = StyleSheet.create({
254
- bgContainerStyle: {
255
- backgroundColor: $config.VIDEO_AUDIO_TILE_AVATAR_COLOR,
256
- width: 36,
257
- height: 36,
258
- borderRadius: 18,
259
- },
260
- containerStyle: {
261
- width: 36,
262
- height: 36,
263
- borderRadius: 18,
264
- },
265
- textStyle: {
266
- fontSize: ThemeConfig.FontSize.tiny,
267
- lineHeight: 12,
268
- fontWeight: '400',
269
- color: $config.CARD_LAYER_1_COLOR,
270
- },
271
- participantNameText: {
272
- fontWeight: '400',
273
- fontSize: ThemeConfig.FontSize.tiny,
274
- fontFamily: ThemeConfig.FontFamily.sansPro,
275
- flexDirection: 'row',
276
- color: $config.FONT_COLOR,
277
- textAlign: 'left',
278
- },
279
- subText: {
280
- fontSize: ThemeConfig.FontSize.tiny,
281
- lineHeight: ThemeConfig.FontSize.tiny,
282
- fontFamily: ThemeConfig.FontFamily.sansPro,
283
- fontWeight: '400',
284
- color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.disabled,
285
- marginTop: 4,
286
- },
287
- container: {
288
- flexDirection: 'row',
289
- justifyContent: 'space-between',
290
- paddingHorizontal: 20,
291
- paddingVertical: 8,
292
- },
293
- userInfoContainer: {
294
- flexDirection: 'row',
295
- },
296
- iconContainer: {
297
- flexDirection: 'row',
298
- },
299
- controlsContainer: {
300
- backgroundColor: 'red',
301
- },
302
- });
@@ -1,398 +0,0 @@
1
- import React, {useContext, useEffect, useRef, useState} from 'react';
2
- import {
3
- MUTE_REMOTE_TYPE,
4
- RenderInterface,
5
- SidePanelType,
6
- useLayout,
7
- useLocalUid,
8
- useMeetingInfo,
9
- useRemoteMute,
10
- useRender,
11
- useRtc,
12
- useSidePanel,
13
- } from 'customization-api';
14
- import {getPinnedLayoutName} from '../../pages/video-call/DefaultLayouts';
15
- import useRemoteRequest, {
16
- REQUEST_REMOTE_TYPE,
17
- } from '../../utils/useRemoteRequest';
18
- import ActionMenu, {ActionMenuItem} from '../../atoms/ActionMenu';
19
- import {useChatMessages} from '../chat-messages/useChatMessages';
20
- import {useLiveStreamDataContext} from '../contexts/LiveStreamDataContext';
21
- import useRemoteEndCall from '../../utils/useRemoteEndCall';
22
- import LiveStreamContext from '../livestream/LiveStreamContext';
23
- import {ClientRole, UidType} from '../../../agora-rn-uikit';
24
- import {useWindowDimensions} from 'react-native';
25
- import {
26
- LiveStreamControlMessageEnum,
27
- RaiseHandValue,
28
- } from '../livestream/Types';
29
- import events, {EventPersistLevel} from '../../rtm-events-api';
30
- import RemoveMeetingPopup from '../../subComponents/RemoveMeetingPopup';
31
- import RemoveScreensharePopup from '../../subComponents/RemoveScreensharePopup';
32
- import useRemoteEndScreenshare from '../../utils/useRemoteEndScreenshare';
33
- import {useScreenshare} from '../../subComponents/screenshare/useScreenshare';
34
- import {useFocus} from '../../utils/useFocus';
35
- import Toast from '../../../react-native-toast-message';
36
- import RemoteMutePopup from '../../subComponents/RemoteMutePopup';
37
- import {calculatePosition, trimText} from '../../utils/common';
38
-
39
- interface UserActionMenuOptionsOptionsProps {
40
- user: RenderInterface;
41
- actionMenuVisible: boolean;
42
- setActionMenuVisible: (actionMenuVisible: boolean) => void;
43
- btnRef: any;
44
- from: 'partcipant' | 'screenshare-participant' | 'video-tile';
45
- }
46
- export default function UserActionMenuOptionsOptions(
47
- props: UserActionMenuOptionsOptionsProps,
48
- ) {
49
- const [showAudioMuteModal, setShowAudioMuteModal] = useState(false);
50
- const [showVideoMuteModal, setShowVideoMuteModal] = useState(false);
51
- const [isPosCalculated, setIsPosCalculated] = useState(false);
52
- const {setFocus} = useFocus();
53
- const {stopUserScreenShare} = useScreenshare();
54
- const remoteEndScreenshare = useRemoteEndScreenshare();
55
- const [removeScreensharePopupVisible, setRemoveScreensharePopupVisible] =
56
- useState(false);
57
- const [actionMenuitems, setActionMenuitems] = useState<ActionMenuItem[]>([]);
58
- const {setSidePanel} = useSidePanel();
59
- const {user, actionMenuVisible, setActionMenuVisible} = props;
60
- const {pinnedUid, activeUids} = useRender();
61
- const {dispatch} = useRtc();
62
- const {setLayout} = useLayout();
63
- const localuid = useLocalUid();
64
- const {openPrivateChat} = useChatMessages();
65
- const {hostUids, audienceUids} = useLiveStreamDataContext();
66
- const {
67
- data: {isHost},
68
- } = useMeetingInfo();
69
- const remoteRequest = useRemoteRequest();
70
- const remoteMute = useRemoteMute();
71
- const endRemoteCall = useRemoteEndCall();
72
- const {promoteAudienceAsCoHost, raiseHandList} =
73
- useContext(LiveStreamContext);
74
- const [removeMeetingPopupVisible, setRemoveMeetingPopupVisible] =
75
- useState(false);
76
-
77
- useEffect(() => {
78
- const items: ActionMenuItem[] = [];
79
-
80
- /**
81
- * In VideoMeeting/VoiceChat - Show pin menu for all users
82
- * In Livestreaming/AudioLivecast - Show only for host -> i.e who is streaming video/audio. don't show it for audience
83
- */
84
- if (
85
- !$config.EVENT_MODE ||
86
- !(
87
- $config.EVENT_MODE &&
88
- $config.RAISE_HAND &&
89
- audienceUids.indexOf(user.uid) !== -1
90
- )
91
- ) {
92
- items.push({
93
- disabled: activeUids.length === 1,
94
- icon: pinnedUid ? 'unpin-outlined' : 'pin-outlined',
95
- onHoverIcon: pinnedUid ? 'unpin-outlined' : 'pin-filled',
96
- iconColor: $config.SECONDARY_ACTION_COLOR,
97
- textColor: $config.SECONDARY_ACTION_COLOR,
98
- title: pinnedUid
99
- ? user.uid === pinnedUid
100
- ? 'Unpin'
101
- : 'Replace Pin'
102
- : 'Pin for me',
103
- callback: () => {
104
- setActionMenuVisible(false);
105
- dispatch({
106
- type: 'UserPin',
107
- value: [pinnedUid && user.uid === pinnedUid ? 0 : user.uid],
108
- });
109
- setLayout(getPinnedLayoutName());
110
- },
111
- });
112
- }
113
-
114
- /**
115
- * Below menu items for remote user with type rtc(not for screenshare)
116
- */
117
- if (localuid !== user.uid && user.type === 'rtc') {
118
- /**
119
- * Chat menu
120
- */
121
- items.push({
122
- icon: 'chat-outlined',
123
- onHoverIcon: 'chat-filled',
124
- iconColor: $config.SECONDARY_ACTION_COLOR,
125
- textColor: $config.SECONDARY_ACTION_COLOR,
126
- title: 'Message Privately',
127
- callback: () => {
128
- setActionMenuVisible(false);
129
- openPrivateChat(user.uid);
130
- },
131
- });
132
-
133
- /**
134
- * Only host can see this menu item - request/mute - video/audio, promote to co host,demote to audience,remove form meeting
135
- */
136
- if (isHost) {
137
- /**
138
- * Request/Mute -> Audio/Video
139
- * VideoMeeting/Voice chat - show this for all user
140
- * Livestreaming/Audio livecast - show this for host user only(because audience not have permission to stream)
141
- *
142
- * note:
143
- * Audio Menu applicable to all vertcials
144
- * Video menu applicable to VideoMeeting and Livestreaming
145
- */
146
- if (
147
- !$config.EVENT_MODE ||
148
- ($config.EVENT_MODE &&
149
- $config.RAISE_HAND &&
150
- hostUids.indexOf(user.uid) !== -1)
151
- ) {
152
- items.push({
153
- icon: user.audio ? 'mic-off-outlined' : 'mic-on-outlined',
154
- onHoverIcon: user.audio ? 'mic-off-filled' : 'mic-on-filled',
155
- iconColor: $config.SECONDARY_ACTION_COLOR,
156
- textColor: $config.SECONDARY_ACTION_COLOR,
157
- title: user.audio ? 'Mute Audio' : 'Request Audio',
158
- callback: () => {
159
- setActionMenuVisible(false);
160
- user.audio
161
- ? setShowAudioMuteModal(true)
162
- : remoteRequest(REQUEST_REMOTE_TYPE.audio, user.uid);
163
- },
164
- });
165
- if (!$config.AUDIO_ROOM) {
166
- items.push({
167
- icon: user.video ? 'video-off-outlined' : 'video-on-outlined',
168
- onHoverIcon: user.video ? 'video-off-filled' : 'video-on-filled',
169
- iconColor: $config.SECONDARY_ACTION_COLOR,
170
- textColor: $config.SECONDARY_ACTION_COLOR,
171
- title: user.video ? 'Mute Video' : 'Request Video',
172
- callback: () => {
173
- setActionMenuVisible(false);
174
- user.video
175
- ? setShowVideoMuteModal(true)
176
- : remoteRequest(REQUEST_REMOTE_TYPE.video, user.uid);
177
- },
178
- });
179
- }
180
- }
181
-
182
- /**
183
- * Promote co host -> show only on Livestreaming and Audio livecast
184
- */
185
- if (
186
- $config.EVENT_MODE &&
187
- $config.RAISE_HAND &&
188
- hostUids.indexOf(user.uid) === -1
189
- ) {
190
- items.push({
191
- icon: 'promote-outlined',
192
- onHoverIcon: 'promote-filled',
193
- iconColor: $config.SECONDARY_ACTION_COLOR,
194
- textColor: $config.SECONDARY_ACTION_COLOR,
195
- title: 'Add as Presenter',
196
- callback: () => {
197
- setActionMenuVisible(false);
198
- promoteAudienceAsCoHost(user.uid);
199
- },
200
- });
201
- }
202
- if ($config.EVENT_MODE) {
203
- if (
204
- raiseHandList[user.uid]?.raised === RaiseHandValue.TRUE &&
205
- raiseHandList[user.uid]?.role == ClientRole.Broadcaster
206
- ) {
207
- items.push({
208
- isBase64Icon: true,
209
- icon: 'demote-outlined',
210
- onHoverIcon: 'demote-filled',
211
- iconColor: $config.SECONDARY_ACTION_COLOR,
212
- textColor: $config.SECONDARY_ACTION_COLOR,
213
- title: 'Remove as Presenter',
214
- callback: () => {
215
- setActionMenuVisible(false);
216
- events.send(
217
- LiveStreamControlMessageEnum.raiseHandRequestRejected,
218
- '',
219
- EventPersistLevel.LEVEL1,
220
- user.uid,
221
- );
222
- },
223
- });
224
- }
225
- }
226
-
227
- items.push({
228
- icon: 'remove-meeting',
229
- iconColor: $config.SEMANTIC_ERROR,
230
- textColor: $config.SEMANTIC_ERROR,
231
- title: 'Remove From Meeting',
232
- callback: () => {
233
- setActionMenuVisible(false);
234
- setRemoveMeetingPopupVisible(true);
235
- },
236
- });
237
- }
238
- }
239
-
240
- /**
241
- * Local User menu item - change name
242
- */
243
- if (localuid == user.uid && user.type === 'rtc') {
244
- items.push({
245
- icon: 'pencil-outlined',
246
- onHoverIcon: 'pencil-filled',
247
- iconColor: $config.SECONDARY_ACTION_COLOR,
248
- textColor: $config.SECONDARY_ACTION_COLOR,
249
- title: 'Change Name',
250
- callback: () => {
251
- setFocus((prevState) => {
252
- return {
253
- ...prevState,
254
- editName: true,
255
- };
256
- });
257
-
258
- setActionMenuVisible(false);
259
- setSidePanel(SidePanelType.Settings);
260
- },
261
- });
262
- }
263
- //Screenshare menu item
264
- if (
265
- (isHost || localuid === user.parentUid) &&
266
- user.type === 'screenshare'
267
- ) {
268
- items.push({
269
- icon: 'remove-meeting',
270
- iconColor: $config.SEMANTIC_ERROR,
271
- textColor: $config.SEMANTIC_ERROR,
272
- title:
273
- localuid === user?.parentUid
274
- ? 'Stop Screenshare'
275
- : 'Remove Screenshare',
276
- callback: () => {
277
- setActionMenuVisible(false);
278
- //for local user directly stop the screenshare
279
- if (localuid === user.parentUid) {
280
- stopUserScreenShare();
281
- }
282
- //for remote user show popup and then user will use cta to stop screenshare
283
- else {
284
- setRemoveScreensharePopupVisible(true);
285
- }
286
- },
287
- });
288
- }
289
- setActionMenuitems(items);
290
- }, [pinnedUid, isHost, raiseHandList, hostUids, user]);
291
-
292
- const {width: globalWidth, height: globalHeight} = useWindowDimensions();
293
- const [modalPosition, setModalPosition] = useState({});
294
-
295
- useEffect(() => {
296
- if (actionMenuVisible) {
297
- //getting btnRef x,y
298
- props.btnRef?.current?.measure(
299
- (
300
- _fx: number,
301
- _fy: number,
302
- localWidth: number,
303
- localHeight: number,
304
- px: number,
305
- py: number,
306
- ) => {
307
- const data = calculatePosition({
308
- px,
309
- py,
310
- localWidth,
311
- localHeight,
312
- globalHeight,
313
- globalWidth,
314
- });
315
- setModalPosition(data);
316
- setIsPosCalculated(true);
317
- },
318
- );
319
- }
320
- }, [actionMenuVisible]);
321
-
322
- return (
323
- <>
324
- {isHost ? (
325
- <RemoteMutePopup
326
- type="audio"
327
- actionMenuVisible={showAudioMuteModal}
328
- setActionMenuVisible={setShowAudioMuteModal}
329
- name={props?.user.name}
330
- modalPosition={modalPosition}
331
- onMutePress={() => {
332
- remoteMute(MUTE_REMOTE_TYPE.audio, user.uid);
333
- setShowAudioMuteModal(false);
334
- }}
335
- />
336
- ) : (
337
- <></>
338
- )}
339
- {isHost ? (
340
- <RemoteMutePopup
341
- type="video"
342
- actionMenuVisible={showVideoMuteModal}
343
- setActionMenuVisible={setShowVideoMuteModal}
344
- name={props?.user.name}
345
- modalPosition={modalPosition}
346
- onMutePress={() => {
347
- remoteMute(MUTE_REMOTE_TYPE.video, user.uid);
348
- setShowVideoMuteModal(false);
349
- }}
350
- />
351
- ) : (
352
- <></>
353
- )}
354
- {isHost ? (
355
- <RemoveScreensharePopup
356
- modalVisible={removeScreensharePopupVisible}
357
- setModalVisible={setRemoveScreensharePopupVisible}
358
- username={user.name}
359
- removeScreenShareFromMeeting={() => {
360
- props.user.parentUid
361
- ? remoteEndScreenshare(props.user.parentUid)
362
- : console.log('Parent Uid is not available');
363
- }}
364
- />
365
- ) : (
366
- <></>
367
- )}
368
- {isHost ? (
369
- <RemoveMeetingPopup
370
- modalVisible={removeMeetingPopupVisible}
371
- setModalVisible={setRemoveMeetingPopupVisible}
372
- username={user.name}
373
- removeUserFromMeeting={() => {
374
- Toast.show({
375
- type: 'info',
376
- text1: `The system will remove ${trimText(
377
- user.name,
378
- )} from this call after 5 secs.`,
379
- visibilityTime: 5000,
380
- primaryBtn: null,
381
- secondaryBtn: null,
382
- });
383
- endRemoteCall(user.uid);
384
- }}
385
- />
386
- ) : (
387
- <></>
388
- )}
389
- <ActionMenu
390
- from={props.from}
391
- actionMenuVisible={actionMenuVisible && isPosCalculated}
392
- setActionMenuVisible={setActionMenuVisible}
393
- modalPosition={modalPosition}
394
- items={actionMenuitems}
395
- />
396
- </>
397
- );
398
- }