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
@@ -13,9 +13,8 @@ const DefaultRenderComponent: RenderComponentType = {
13
13
  };
14
14
  interface RenderComponentProps {
15
15
  uid: UidType;
16
- isMax?: boolean;
17
16
  }
18
- const RenderComponent = ({uid, isMax = false}: RenderComponentProps) => {
17
+ const RenderComponent = ({uid}: RenderComponentProps) => {
19
18
  const {renderList} = useRender();
20
19
  const FpeRenderComponent = useCustomization((config) =>
21
20
  typeof config?.components?.videoCall === 'object' &&
@@ -44,7 +43,7 @@ const RenderComponent = ({uid, isMax = false}: RenderComponentProps) => {
44
43
 
45
44
  const RenderComp = getRenderComponent(renderList[uid]?.type);
46
45
 
47
- return <RenderComp user={renderList[uid]} isMax={isMax} />;
46
+ return <RenderComp user={renderList[uid]} />;
48
47
  };
49
48
 
50
49
  export default RenderComponent;
@@ -1,24 +1,13 @@
1
- import React, {useContext, useEffect, useState} from 'react';
2
- import {
3
- View,
4
- StyleSheet,
5
- useWindowDimensions,
6
- Text,
7
- Platform,
8
- } from 'react-native';
1
+ import React, {useContext, useEffect} from 'react';
2
+ import {View, StyleSheet} from 'react-native';
9
3
  import {useCustomization} from 'customization-implementation';
10
4
  import Navbar from '../../components/Navbar';
11
5
  import ParticipantsView from '../../components/ParticipantsView';
12
6
  import SettingsView from '../../components/SettingsView';
13
7
  import Controls from '../../components/Controls';
14
- import Chat, {ChatProps} from '../../components/Chat';
8
+ import Chat from '../../components/Chat';
15
9
  import {SidePanelType} from '../../subComponents/SidePanelEnum';
16
- import {
17
- isMobileUA,
18
- isValidReactComponent,
19
- isWebInternal,
20
- useIsDesktop,
21
- } from '../../utils/common';
10
+ import {isValidReactComponent, isWebInternal} from '../../utils/common';
22
11
  import {useSidePanel} from '../../utils/useSidePanel';
23
12
  import VideoComponent from './VideoComponent';
24
13
  import {videoView} from '../../../theme.json';
@@ -28,13 +17,10 @@ import {
28
17
  } from '../../utils/useButtonTemplate';
29
18
  import SDKEvents from '../../utils/SdkEvents';
30
19
  import {useMeetingInfo} from '../../components/meeting-info/useMeetingInfo';
31
- import {controlMessageEnum, useRtc, useUserName} from 'customization-api';
32
- import events, {EventPersistLevel} from '../../rtm-events-api';
33
- import VideoCallMobileView from './VideoCallMobileView';
20
+ import {useRtc} from 'customization-api';
34
21
 
35
22
  const VideoCallScreen = () => {
36
23
  const {sidePanel} = useSidePanel();
37
- const [name] = useUserName();
38
24
  const rtc = useRtc();
39
25
  const {
40
26
  data: {meetingTitle, isHost},
@@ -51,7 +37,7 @@ const VideoCallScreen = () => {
51
37
  } = useCustomization((data) => {
52
38
  let components: {
53
39
  VideocallComponent?: React.ComponentType;
54
- ChatComponent: React.ComponentType<ChatProps>;
40
+ ChatComponent: React.ComponentType;
55
41
  BottombarComponent: React.ComponentType;
56
42
  ParticipantsComponent: React.ComponentType;
57
43
  SettingsComponent: React.ComponentType;
@@ -143,14 +129,6 @@ const VideoCallScreen = () => {
143
129
  });
144
130
 
145
131
  useEffect(() => {
146
- // setTimeout(() => {
147
- // events.send(
148
- // controlMessageEnum.newUserJoined,
149
- // JSON.stringify({name}),
150
- // EventPersistLevel.LEVEL1,
151
- // );
152
- // }, 1000);
153
-
154
132
  /**
155
133
  * OLD: Commenting this code as getDevices API is web only
156
134
  * The below code fails on native app
@@ -158,7 +136,6 @@ const VideoCallScreen = () => {
158
136
  */
159
137
  if (isWebInternal()) {
160
138
  new Promise((res) =>
161
- //@ts-ignore
162
139
  rtc.RtcEngine.getDevices(function (devices: MediaDeviceInfo[]) {
163
140
  res(devices);
164
141
  }),
@@ -169,16 +146,9 @@ const VideoCallScreen = () => {
169
146
  }
170
147
  }, []);
171
148
 
172
- const isDesktop = useIsDesktop();
173
-
174
149
  return VideocallComponent ? (
175
150
  <VideocallComponent />
176
- ) : // ) : !isDesktop ? (
177
- isMobileUA() ? (
178
- // Mobile View
179
- <VideoCallMobileView />
180
151
  ) : (
181
- // Desktop View
182
152
  <>
183
153
  <VideocallBeforeView />
184
154
  <View style={style.full}>
@@ -186,11 +156,7 @@ const VideoCallScreen = () => {
186
156
  value={{buttonTemplateName: ButtonTemplateName.topBar}}>
187
157
  <TopbarComponent />
188
158
  </ButtonTemplateProvider>
189
- <View
190
- style={[
191
- style.videoView,
192
- {paddingHorizontal: isDesktop() ? 32 : 10, paddingVertical: 10},
193
- ]}>
159
+ <View style={[style.videoView, {backgroundColor: '#ffffff00'}]}>
194
160
  <VideoComponent />
195
161
  {sidePanel === SidePanelType.Participants ? (
196
162
  <ParticipantsComponent />
@@ -229,8 +195,6 @@ const style = StyleSheet.create({
229
195
  flexDirection: 'column',
230
196
  overflow: 'hidden',
231
197
  },
232
- videoView: {
233
- flex: 12,
234
- flexDirection: 'row',
235
- },
198
+ //@ts-ignore
199
+ videoView: videoView,
236
200
  });
@@ -2,28 +2,13 @@ import React, {useEffect, useState} from 'react';
2
2
  import useLayoutsData from './useLayoutsData';
3
3
  import {isArray, isValidReactComponent} from '../../utils/common';
4
4
  import {useLayout} from '../../utils/useLayout';
5
- import {useRender, useRtc} from 'customization-api';
6
- import {getGridLayoutName} from './DefaultLayouts';
5
+ import {useRender} from 'customization-api';
7
6
 
8
7
  const VideoComponent = () => {
9
- const {dispatch} = useRtc();
10
8
  const [layout, setLayoutIndex] = useState(0);
11
9
  const layoutsData = useLayoutsData();
12
- const {currentLayout, setLayout} = useLayout();
13
- const {activeUids, pinnedUid} = useRender();
14
-
15
- useEffect(() => {
16
- if (activeUids && activeUids.length === 1) {
17
- if (pinnedUid) {
18
- dispatch({type: 'UserPin', value: [0]});
19
- }
20
- const gridLayoutName = getGridLayoutName();
21
- if (currentLayout !== gridLayoutName) {
22
- setLayout(gridLayoutName);
23
- }
24
- }
25
- }, [activeUids]);
26
-
10
+ const {currentLayout} = useLayout();
11
+ const {activeUids} = useRender();
27
12
  useEffect(() => {
28
13
  if (isArray(layoutsData)) {
29
14
  let index = layoutsData.findIndex((item) => item.name === currentLayout);
@@ -1,243 +1,85 @@
1
- import React, {useState, useRef, useContext, useEffect} from 'react';
2
- import {View, StyleSheet, Platform} from 'react-native';
3
- import {PropsContext, RenderInterface, UidType} from '../../../agora-rn-uikit';
1
+ import React, {useContext} from 'react';
2
+ import {View, StyleSheet} from 'react-native';
3
+ import {RenderInterface, UidType} from '../../../agora-rn-uikit';
4
4
  import ScreenShareNotice from '../../subComponents/ScreenShareNotice';
5
5
  import {MaxVideoView} from '../../../agora-rn-uikit';
6
6
  import FallbackLogo from '../../subComponents/FallbackLogo';
7
+ import ColorContext from '../../components/ColorContext';
7
8
  import NetworkQualityPill from '../../subComponents/NetworkQualityPill';
8
9
  import NameWithMicIcon from './NameWithMicIcon';
9
- import useIsActiveSpeaker from '../../utils/useIsActiveSpeaker';
10
- import {useLayout, useRender, useRtc} from 'customization-api';
11
- import {getGridLayoutName, getPinnedLayoutName} from './DefaultLayouts';
12
- import IconButton from '../../atoms/IconButton';
13
- import UserActionMenuOptionsOptions from '../../components/participants/UserActionMenuOptions';
14
- import {isMobileUA, isWebInternal} from '../../utils/common';
15
- import ThemeConfig from '../../theme';
16
10
 
17
11
  interface VideoRendererProps {
18
12
  user: RenderInterface;
19
- isMax?: boolean;
20
13
  }
21
- const VideoRenderer: React.FC<VideoRendererProps> = ({user, isMax = false}) => {
22
- const {dispatch} = useRtc();
23
- const isActiveSpeaker = useIsActiveSpeaker();
24
- const {pinnedUid, activeUids} = useRender();
25
- const activeSpeaker = isActiveSpeaker(user.uid);
26
- const [isHovered, setIsHovered] = useState(false);
27
- const {rtcProps} = useContext(PropsContext);
28
- const {currentLayout} = useLayout();
29
- const showReplacePin =
30
- pinnedUid && !isMax && isHovered && currentLayout === getPinnedLayoutName();
31
- const showPinForMe =
32
- !pinnedUid &&
33
- !isMax &&
34
- isHovered &&
35
- currentLayout === getPinnedLayoutName();
36
- const [videoTileWidth, setVideoTileWidth] = useState(0);
37
- const [avatarSize, setAvatarSize] = useState(100);
38
- const videoMoreMenuRef = useRef(null);
39
- const [actionMenuVisible, setActionMenuVisible] = React.useState(false);
14
+ const VideoRenderer: React.FC<VideoRendererProps> = ({user}) => {
15
+ const {primaryColor} = useContext(ColorContext);
40
16
  return (
41
- <>
42
- <UserActionMenuOptionsOptions
43
- actionMenuVisible={actionMenuVisible}
44
- setActionMenuVisible={(flag) => {
45
- //once user clicks action menu item -> hide the action menu and set parent isHovered false
46
- if (!flag) {
47
- setIsHovered(false);
48
- }
49
- setActionMenuVisible(flag);
17
+ <View style={maxStyle.container}>
18
+ <ScreenShareNotice uid={user.uid} />
19
+ <NetworkQualityPill
20
+ user={user}
21
+ primaryColor={primaryColor}
22
+ rootStyle={{
23
+ marginLeft: 25,
24
+ top: 8,
25
+ right: 10,
26
+ }}
27
+ small
28
+ />
29
+ <MaxVideoView
30
+ fallback={() => {
31
+ return FallbackLogo(user?.name);
50
32
  }}
51
33
  user={user}
52
- btnRef={videoMoreMenuRef}
53
- from={'video-tile'}
34
+ key={user.uid}
54
35
  />
55
- <PlatformWrapper isHovered={isHovered} setIsHovered={setIsHovered}>
56
- <View
57
- onLayout={({
58
- nativeEvent: {
59
- layout: {x, y, width, height},
60
- },
61
- }) => {
62
- setVideoTileWidth(width);
63
- setAvatarSize(Math.floor(width * 0.35));
64
- }}
65
- style={[
66
- maxStyle.container,
67
- activeSpeaker
68
- ? maxStyle.activeContainerStyle
69
- : user.video
70
- ? maxStyle.noVideoStyle
71
- : maxStyle.nonActiveContainerStyle,
72
- ]}>
73
- {!showReplacePin && !showPinForMe && (
74
- <ScreenShareNotice uid={user.uid} isMax={isMax} />
75
- )}
76
- <NetworkQualityPill user={user} />
77
- <MaxVideoView
78
- fallback={() => {
79
- return FallbackLogo(
80
- user?.name,
81
- activeSpeaker,
82
- (showReplacePin || showPinForMe) && !isMobileUA()
83
- ? true
84
- : false,
85
- isMax,
86
- avatarSize,
87
- );
88
- }}
89
- user={user}
90
- containerStyle={{
91
- width: '100%',
92
- height: '100%',
93
- }}
94
- key={user.uid}
95
- />
96
- <NameWithMicIcon
97
- videoTileWidth={videoTileWidth}
98
- user={user}
99
- isMax={isMax}
100
- />
101
- {user.uid !== rtcProps?.screenShareUid &&
102
- (isHovered || actionMenuVisible || isMobileUA()) ? (
103
- <MoreMenu
104
- videoMoreMenuRef={videoMoreMenuRef}
105
- setActionMenuVisible={setActionMenuVisible}
106
- />
107
- ) : (
108
- <></>
109
- )}
110
- {(showReplacePin || showPinForMe) && !isMobileUA() ? (
111
- <IconButton
112
- onPress={() => {
113
- dispatch({type: 'UserPin', value: [user.uid]});
114
- }}
115
- containerStyle={maxStyle.replacePinContainer}
116
- btnTextProps={{
117
- text: showReplacePin ? 'Replace Pin' : 'Pin for me',
118
- textColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
119
- textStyle: {
120
- marginTop: 0,
121
- fontWeight: '700',
122
- marginLeft: 6,
123
- },
124
- }}
125
- iconProps={{
126
- name: 'pin-filled',
127
- iconSize: 20,
128
- iconType: 'plain',
129
- tintColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
130
- }}
131
- />
132
- ) : (
133
- <></>
134
- )}
135
- </View>
136
- </PlatformWrapper>
137
- </>
138
- );
139
- };
140
-
141
- interface MoreMenuProps {
142
- setActionMenuVisible: (f: boolean) => void;
143
- videoMoreMenuRef: any;
144
- }
145
- const MoreMenu = ({setActionMenuVisible, videoMoreMenuRef}: MoreMenuProps) => {
146
- const {activeUids} = useRender();
147
- const {currentLayout} = useLayout();
148
- const reduceSpace =
149
- isMobileUA() &&
150
- activeUids.length > 4 &&
151
- currentLayout === getGridLayoutName();
152
- return (
153
- <>
154
- <View
155
- ref={videoMoreMenuRef}
156
- collapsable={false}
157
- style={{
158
- position: 'absolute',
159
- right: reduceSpace ? 2 : 8,
160
- bottom: reduceSpace ? 2 : 8,
161
- zIndex: 999,
162
- }}>
163
- <IconButton
164
- onPress={() => {
165
- setActionMenuVisible(true);
166
- }}
167
- iconProps={{
168
- iconContainerStyle: {
169
- padding: reduceSpace && activeUids.length > 12 ? 2 : 8,
170
- backgroundColor: $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR,
171
- },
172
- name: 'more-menu',
173
- iconSize: 20,
174
- tintColor: $config.SECONDARY_ACTION_COLOR,
175
- }}
176
- />
36
+ <View style={maxStyle.nameHolder}>
37
+ <NameWithMicIcon user={user} />
177
38
  </View>
178
- </>
179
- );
180
- };
181
-
182
- const PlatformWrapper = ({children, setIsHovered, isHovered}) => {
183
- return isWebInternal() && !isMobileUA() ? (
184
- <div
185
- style={{width: '100%', height: '100%'}}
186
- /**
187
- * why onMouseOver is used instead of onMouseEnter
188
- * when user clicks close icon the participant then video tile will expand and
189
- * cursor will directly land on child elements. so onhover kabab menu icon is not displayed
190
- *
191
- * As per doc
192
- * The mouseover event triggers when the mouse pointer enters the div element, and its child elements.
193
- * The mouseenter event is only triggered when the mouse pointer enters the div element.
194
- * */
195
- onMouseOver={() => {
196
- !isHovered && setIsHovered(true);
197
- }}
198
- onMouseLeave={() => {
199
- setIsHovered(false);
200
- }}>
201
- {children}
202
- </div>
203
- ) : (
204
- <>{children}</>
39
+ </View>
205
40
  );
206
41
  };
207
42
 
208
43
  const maxStyle = StyleSheet.create({
209
- replacePinContainer: {
210
- zIndex: 999,
211
- paddingHorizontal: 12,
212
- paddingVertical: 10,
213
- backgroundColor: $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR,
214
- borderRadius: 8,
44
+ container: {width: '100%', height: '100%'},
45
+ width80: {width: '80%'},
46
+ width100: {width: '100%'},
47
+ flex2: {flex: 2},
48
+ flex4: {flex: 4, backgroundColor: '#ffffff00'},
49
+ flex1: {flex: 1},
50
+ nameHolder: {
51
+ marginTop: -25,
52
+ backgroundColor: $config.SECONDARY_FONT_COLOR + 'aa',
53
+ alignSelf: 'flex-end',
54
+ paddingHorizontal: 8,
55
+ height: 25,
56
+ borderTopLeftRadius: 15,
57
+ borderBottomRightRadius: 15,
215
58
  flexDirection: 'row',
216
- position: 'absolute',
217
- left: 0,
218
- right: 0,
219
- top: 0,
220
- bottom: 0,
221
- margin: 'auto',
222
- maxWidth: 120,
223
- maxHeight: 32,
224
- },
225
- container: {
226
- width: '100%',
227
- height: '100%',
228
- position: 'relative',
229
- overflow: 'hidden',
230
- borderRadius: ThemeConfig.BorderRadius.small,
231
- borderWidth: 2,
59
+ zIndex: 5,
60
+ maxWidth: '100%',
232
61
  },
233
- activeContainerStyle: {
234
- borderColor: $config.PRIMARY_ACTION_BRAND_COLOR,
62
+ name: {
63
+ color: $config.PRIMARY_FONT_COLOR,
64
+ lineHeight: 25,
65
+ fontWeight: '700',
66
+ flexShrink: 1,
235
67
  },
236
- nonActiveContainerStyle: {
237
- borderColor: 'transparent',
68
+ MicBackdrop: {
69
+ width: 20,
70
+ height: 20,
71
+ borderRadius: 15,
72
+ marginHorizontal: 10,
73
+ backgroundColor: $config.SECONDARY_FONT_COLOR,
74
+ display: 'flex',
75
+ alignSelf: 'center',
76
+ justifyContent: 'center',
238
77
  },
239
- noVideoStyle: {
240
- borderColor: 'transparent',
78
+ MicIcon: {
79
+ width: '80%',
80
+ height: '80%',
81
+ alignSelf: 'center',
82
+ resizeMode: 'contain',
241
83
  },
242
84
  });
243
85
 
@@ -2,7 +2,6 @@
2
2
  // 1. RECORDING
3
3
  const RECORDING_STARTED = 'RECORDING_STARTED';
4
4
  const RECORDING_STOPPED = 'RECORDING_STOPPED';
5
- const RECORDING_STOP_REQUEST = 'RECORDING_STOP_REQUEST';
6
5
  // 2. SCREENSHARE
7
6
  const SCREENSHARE_STARTED = 'SCREENSHARE_STARTED';
8
7
  const SCREENSHARE_STOPPED = 'SCREENSHARE_STOPPED';
@@ -10,7 +9,6 @@ const SCREENSHARE_STOPPED = 'SCREENSHARE_STOPPED';
10
9
  const EventActions = {
11
10
  RECORDING_STARTED,
12
11
  RECORDING_STOPPED,
13
- RECORDING_STOP_REQUEST,
14
12
  SCREENSHARE_STARTED,
15
13
  SCREENSHARE_STOPPED,
16
14
  };