agora-appbuilder-core 3.0.10 → 3.0.12

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 (249) hide show
  1. package/Readme.md +0 -6
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +4979 -7086
  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 -26
  36. package/template/index.js +0 -4
  37. package/template/index.rsdk.tsx +0 -1
  38. package/template/index.web.js +1 -7
  39. package/template/index.wsdk.tsx +1 -1
  40. package/template/ios/HelloWorld/Info.plist +1 -14
  41. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +0 -17
  42. package/template/metro.config.js +1 -1
  43. package/template/package.json +7 -21
  44. package/template/react-native-toast-message/index.d.ts +43 -43
  45. package/template/react-native-toast-message/src/colors/index.js +2 -3
  46. package/template/react-native-toast-message/src/components/base/index.js +59 -46
  47. package/template/react-native-toast-message/src/components/base/styles.js +32 -16
  48. package/template/react-native-toast-message/src/components/error.js +2 -3
  49. package/template/react-native-toast-message/src/components/info.js +2 -3
  50. package/template/react-native-toast-message/src/components/success.js +2 -3
  51. package/template/react-native-toast-message/src/index.js +31 -122
  52. package/template/react-native-toast-message/src/index.sdk.tsx +35 -125
  53. package/template/react-native-toast-message/src/styles.js +4 -3
  54. package/template/react-native-toast-message/src/styles.sdk.ts +4 -3
  55. package/template/src/App.tsx +0 -6
  56. package/template/src/AppWrapper.tsx +28 -63
  57. package/template/src/assets/icons.ts +102 -0
  58. package/template/src/atoms/HorizontalRule.tsx +1 -3
  59. package/template/src/atoms/PrimaryButton.tsx +26 -51
  60. package/template/src/atoms/SecondaryButton.tsx +5 -8
  61. package/template/src/atoms/TextInput.tsx +14 -12
  62. package/template/src/components/Chat.tsx +214 -86
  63. package/template/src/components/ChatContext.ts +1 -8
  64. package/template/src/components/ColorConfigure.tsx +1 -1
  65. package/template/src/components/ColorContext.ts +1 -1
  66. package/template/src/components/{Controls1.native.tsx → Controls.native.tsx} +4 -6
  67. package/template/src/components/Controls.tsx +42 -342
  68. package/template/src/components/DeviceConfigure.tsx +101 -461
  69. package/template/src/components/DeviceContext.tsx +4 -8
  70. package/template/src/components/EventsConfigure.tsx +7 -144
  71. package/template/src/components/GraphQLProvider.tsx +1 -1
  72. package/template/src/components/GridVideo.tsx +44 -59
  73. package/template/src/components/HostControlView.tsx +35 -114
  74. package/template/src/components/Navbar.tsx +398 -216
  75. package/template/src/components/NetworkQualityContext.tsx +20 -20
  76. package/template/src/components/ParticipantsView.tsx +154 -177
  77. package/template/src/components/PinnedVideo.tsx +120 -207
  78. package/template/src/components/Precall.native.tsx +119 -358
  79. package/template/src/components/Precall.tsx +135 -269
  80. package/template/src/components/RTMConfigure.tsx +4 -27
  81. package/template/src/components/Router.electron.ts +0 -1
  82. package/template/src/components/Router.native.ts +0 -1
  83. package/template/src/components/Router.sdk.ts +0 -1
  84. package/template/src/components/Router.ts +0 -1
  85. package/template/src/components/Settings.tsx +95 -26
  86. package/template/src/components/SettingsView.tsx +56 -251
  87. package/template/src/components/Share.tsx +273 -302
  88. package/template/src/components/StorageContext.tsx +3 -30
  89. package/template/src/components/chat-messages/useChatMessages.tsx +23 -69
  90. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -7
  91. package/template/src/components/common/Error.tsx +6 -20
  92. package/template/src/components/common/Logo.tsx +15 -16
  93. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -10
  94. package/template/src/components/contexts/VideoMeetingDataContext.tsx +7 -37
  95. package/template/src/components/livestream/LiveStreamContext.tsx +36 -270
  96. package/template/src/components/livestream/Types.ts +14 -39
  97. package/template/src/components/livestream/index.ts +0 -1
  98. package/template/src/components/livestream/views/LiveStreamControls.tsx +4 -12
  99. package/template/src/components/participants/AllAudienceParticipants.tsx +30 -101
  100. package/template/src/components/participants/AllHostParticipants.tsx +34 -103
  101. package/template/src/components/participants/MeParticipant.tsx +38 -0
  102. package/template/src/components/participants/ParticipantName.tsx +7 -13
  103. package/template/src/components/participants/ParticipantSectionTitle.tsx +10 -35
  104. package/template/src/components/participants/RemoteParticipants.tsx +71 -0
  105. package/template/src/components/participants/ScreenshareParticipants.tsx +12 -144
  106. package/template/src/components/precall/{LocalMute1.native.tsx → LocalMute.native.tsx} +5 -21
  107. package/template/src/components/precall/LocalMute.tsx +14 -84
  108. package/template/src/components/precall/VideoPreview.native.tsx +3 -48
  109. package/template/src/components/precall/VideoPreview.tsx +7 -163
  110. package/template/src/components/precall/joinCallBtn.tsx +2 -15
  111. package/template/src/components/precall/meetingTitle.tsx +12 -15
  112. package/template/src/components/precall/selectDevice.tsx +21 -1
  113. package/template/src/components/precall/textInput.tsx +4 -32
  114. package/template/src/components/precall/usePreCall.tsx +0 -16
  115. package/template/src/components/styles.ts +21 -42
  116. package/template/src/components/useShareLink.tsx +14 -12
  117. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  118. package/template/src/pages/Authenticate.tsx +15 -5
  119. package/template/src/pages/Create.tsx +165 -293
  120. package/template/src/pages/Join.tsx +67 -93
  121. package/template/src/pages/VideoCall.tsx +64 -89
  122. package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
  123. package/template/src/pages/video-call/NameWithMicIcon.tsx +44 -120
  124. package/template/src/pages/video-call/RenderComponent.tsx +2 -3
  125. package/template/src/pages/video-call/VideoCallScreen.tsx +9 -45
  126. package/template/src/pages/video-call/VideoComponent.tsx +3 -18
  127. package/template/src/pages/video-call/VideoRenderer.tsx +60 -218
  128. package/template/src/rtm-events/constants.ts +0 -2
  129. package/template/src/subComponents/ChatBubble.tsx +83 -123
  130. package/template/src/subComponents/ChatContainer.tsx +84 -257
  131. package/template/src/subComponents/ChatInput.tsx +46 -61
  132. package/template/src/subComponents/Checkbox.native.tsx +5 -16
  133. package/template/src/subComponents/Checkbox.tsx +2 -2
  134. package/template/src/subComponents/CopyJoinInfo.tsx +58 -36
  135. package/template/src/subComponents/FallbackLogo.tsx +40 -122
  136. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  137. package/template/src/subComponents/{LayoutIconDropdown1.native.tsx → LayoutIconDropdown.native.tsx} +18 -4
  138. package/template/src/subComponents/LayoutIconDropdown.tsx +134 -131
  139. package/template/src/subComponents/LocalAudioMute.tsx +27 -119
  140. package/template/src/subComponents/LocalEndCall.tsx +33 -71
  141. package/template/src/subComponents/LocalSwitchCamera.tsx +30 -17
  142. package/template/src/subComponents/LocalVideoMute.tsx +27 -117
  143. package/template/src/subComponents/Logo.tsx +4 -3
  144. package/template/src/subComponents/LogoutButton.tsx +1 -1
  145. package/template/src/subComponents/NetworkQualityPill.tsx +63 -60
  146. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  147. package/template/src/subComponents/Recording.tsx +29 -28
  148. package/template/src/subComponents/RemoteAudioMute.tsx +29 -83
  149. package/template/src/subComponents/RemoteEndCall.tsx +5 -8
  150. package/template/src/subComponents/RemoteVideoMute.tsx +21 -74
  151. package/template/src/subComponents/ScreenShareNotice.tsx +8 -83
  152. package/template/src/subComponents/SelectDevice.tsx +61 -404
  153. package/template/src/subComponents/SelectOAuth.tsx +8 -9
  154. package/template/src/subComponents/ToastConfig.tsx +10 -150
  155. package/template/src/subComponents/chat/ChatParticipants.tsx +78 -187
  156. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -95
  157. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -29
  158. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
  159. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +11 -24
  160. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +10 -17
  161. package/template/src/subComponents/recording/useRecording.tsx +27 -79
  162. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +70 -52
  163. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +2 -11
  164. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +4 -26
  165. package/template/src/utils/common.tsx +1 -155
  166. package/template/src/utils/index.tsx +0 -19
  167. package/template/src/utils/isMobileOrTablet.ts +2 -7
  168. package/template/src/utils/useButtonTemplate.tsx +0 -1
  169. package/template/src/utils/useMuteToggleLocal.ts +3 -54
  170. package/template/web/index.html +0 -5
  171. package/template/webpack.commons.js +8 -13
  172. package/template/webpack.web.config.js +0 -1
  173. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  174. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +0 -24
  175. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +0 -11
  176. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  177. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  178. package/template/android/app/src/main/res/values/colors.xml +0 -7
  179. package/template/react-native-toast-message/src/components/checkbox.js +0 -178
  180. package/template/react-native.config.js +0 -7
  181. package/template/src/assets/font-styles.css +0 -329
  182. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  183. package/template/src/assets/fonts/icomoon.ttf +0 -0
  184. package/template/src/assets/permission.png +0 -0
  185. package/template/src/assets/selection.json +0 -1
  186. package/template/src/atoms/ActionMenu.tsx +0 -236
  187. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +0 -71
  188. package/template/src/atoms/AnimatedActiveSpeaker.tsx +0 -84
  189. package/template/src/atoms/AnimatedRings.native.tsx +0 -68
  190. package/template/src/atoms/AnimatedRings.tsx +0 -70
  191. package/template/src/atoms/Card.tsx +0 -61
  192. package/template/src/atoms/CircularProgress.native.tsx +0 -121
  193. package/template/src/atoms/CircularProgress.tsx +0 -102
  194. package/template/src/atoms/CustomIcon.tsx +0 -88
  195. package/template/src/atoms/CustomSwitch.tsx +0 -287
  196. package/template/src/atoms/Dropdown.tsx +0 -306
  197. package/template/src/atoms/IconButton.tsx +0 -162
  198. package/template/src/atoms/ImageIcon.tsx +0 -98
  199. package/template/src/atoms/InfoBubble.tsx +0 -291
  200. package/template/src/atoms/Input.tsx +0 -87
  201. package/template/src/atoms/InviteInfo.tsx +0 -166
  202. package/template/src/atoms/LinkButton.tsx +0 -28
  203. package/template/src/atoms/OutlineButton.tsx +0 -61
  204. package/template/src/atoms/ParticipantsCount.tsx +0 -73
  205. package/template/src/atoms/Popup.tsx +0 -147
  206. package/template/src/atoms/RecordingInfo.tsx +0 -49
  207. package/template/src/atoms/Spacer.tsx +0 -22
  208. package/template/src/atoms/TertiaryButton.tsx +0 -78
  209. package/template/src/atoms/Toggle.tsx +0 -47
  210. package/template/src/atoms/Tooltip.native.tsx +0 -65
  211. package/template/src/atoms/Tooltip.tsx +0 -94
  212. package/template/src/atoms/UserAvatar.tsx +0 -60
  213. package/template/src/components/CommonStyles.ts +0 -44
  214. package/template/src/components/ToastComponent.tsx +0 -8
  215. package/template/src/components/participants/Participant.tsx +0 -302
  216. package/template/src/components/participants/UserActionMenuOptions.tsx +0 -398
  217. package/template/src/components/popups/InvitePopup.tsx +0 -115
  218. package/template/src/components/popups/StopRecordingPopup.tsx +0 -114
  219. package/template/src/components/precall/PermissionHelper.native.tsx +0 -5
  220. package/template/src/components/precall/PermissionHelper.tsx +0 -126
  221. package/template/src/components/precall/PreCallSettings.tsx +0 -52
  222. package/template/src/components/useToast.tsx +0 -41
  223. package/template/src/components/useVideoCall.tsx +0 -65
  224. package/template/src/pages/Endcall.tsx +0 -148
  225. package/template/src/pages/video-call/ActionSheet.native.tsx +0 -215
  226. package/template/src/pages/video-call/ActionSheet.tsx +0 -226
  227. package/template/src/pages/video-call/ActionSheetContent.tsx +0 -479
  228. package/template/src/pages/video-call/ActionSheetHandle.tsx +0 -38
  229. package/template/src/pages/video-call/ActionSheetStyles.css +0 -138
  230. package/template/src/pages/video-call/SidePanelHeader.tsx +0 -190
  231. package/template/src/pages/video-call/VideoCallMobileView.tsx +0 -139
  232. package/template/src/pages/video-call/VideoCallScreen.native.tsx +0 -37
  233. package/template/src/subComponents/ChatInput.ios.tsx +0 -237
  234. package/template/src/subComponents/EndcallPopup.tsx +0 -107
  235. package/template/src/subComponents/LayoutIconButton.tsx +0 -201
  236. package/template/src/subComponents/RemoteMutePopup.tsx +0 -193
  237. package/template/src/subComponents/RemoveMeetingPopup.tsx +0 -109
  238. package/template/src/subComponents/RemoveScreensharePopup.tsx +0 -109
  239. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +0 -207
  240. package/template/src/subComponents/SidePanelHeader.tsx +0 -112
  241. package/template/src/theme/index.ts +0 -46
  242. package/template/src/utils/PlatformWrapper.tsx +0 -21
  243. package/template/src/utils/hexadecimalTransparency.ts +0 -108
  244. package/template/src/utils/pendingStateUpdateHelper.ts +0 -19
  245. package/template/src/utils/useFocus.tsx +0 -46
  246. package/template/src/utils/useIsActiveSpeaker.ts +0 -27
  247. package/template/src/utils/useIsHandRaised.ts +0 -13
  248. package/template/src/utils/useRemoteEndScreenshare.ts +0 -26
  249. 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
- }