agora-appbuilder-core 2.2.0 → 2.3.0-beta.2

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 (301) hide show
  1. package/Readme.md +7 -1
  2. package/package.json +4 -3
  3. package/template/Gulpfile.js +306 -87
  4. package/template/_gitignore +4 -1
  5. package/template/_package-lock.json +32186 -3078
  6. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
  7. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
  8. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
  9. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
  12. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
  14. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
  16. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
  17. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
  21. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
  24. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
  25. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
  26. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
  27. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
  28. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
  30. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
  31. package/template/agora-rn-uikit/src/Rtc/Create.tsx +14 -2
  32. package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
  33. package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
  34. package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
  35. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
  36. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
  37. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
  38. package/template/agora-rn-uikit/src/index.ts +12 -12
  39. package/template/babel.config.js +17 -1
  40. package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
  41. package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
  42. package/template/bridge/rtc/webNg/Types.ts +14 -0
  43. package/template/bridge/rtc/webNg/index.ts +5 -2
  44. package/template/bridge/rtm/web/index.ts +13 -7
  45. package/template/electron-builder.js +3 -2
  46. package/template/esbuild.rsdk.go +226 -0
  47. package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
  48. package/template/fpe-api/components.ts +42 -0
  49. package/template/fpe-api/context.ts +45 -0
  50. package/template/fpe-api/fpeEvents.ts +9 -0
  51. package/template/fpe-api/index.ts +21 -0
  52. package/template/fpe-api/install.ts +128 -0
  53. package/template/fpe-api/typeDefinition.ts +143 -0
  54. package/template/fpe-api/useFpe.tsx +35 -0
  55. package/template/fpe-api/utils.ts +62 -0
  56. package/template/fpe-implementation/createHook.ts +33 -0
  57. package/template/fpe-implementation/dummyFpe.ts +17 -0
  58. package/template/fpe-implementation/index.ts +1 -0
  59. package/template/fpe-todo.txt +14 -0
  60. package/template/fpe.config.js +29 -0
  61. package/template/global.d.ts +4 -0
  62. package/template/index.rsdk.tsx +27 -0
  63. package/template/index.wsdk.tsx +27 -0
  64. package/template/package.json +28 -12
  65. package/template/react-native-toast-message/src/index.js +9 -10
  66. package/template/react-native-toast-message/src/index.wsdk.js +419 -0
  67. package/template/src/App.tsx +97 -65
  68. package/template/src/AppWrapper.tsx +79 -0
  69. package/template/src/SDKAppWrapper.tsx +67 -0
  70. package/template/src/atoms/PrimaryButton.tsx +14 -8
  71. package/template/src/atoms/TextInput.tsx +13 -5
  72. package/template/src/components/Chat.tsx +171 -139
  73. package/template/src/components/ChatContext.ts +14 -22
  74. package/template/src/components/ColorConfigure.tsx +2 -2
  75. package/template/src/components/Controls.native.tsx +72 -62
  76. package/template/src/components/Controls.tsx +90 -69
  77. package/template/src/components/DeviceConfigure.tsx +1 -1
  78. package/template/src/components/DeviceContext.tsx +14 -7
  79. package/template/src/components/GraphQLProvider.tsx +9 -2
  80. package/template/src/components/GridVideo.tsx +20 -159
  81. package/template/src/components/HostControlView.tsx +54 -15
  82. package/template/src/components/Navbar.tsx +408 -157
  83. package/template/src/components/NetworkQualityContext.tsx +29 -22
  84. package/template/src/components/ParticipantsView.tsx +91 -115
  85. package/template/src/components/PinnedVideo.tsx +41 -188
  86. package/template/src/components/Precall.native.tsx +131 -97
  87. package/template/src/components/Precall.tsx +193 -158
  88. package/template/src/components/RTMConfigure.tsx +328 -416
  89. package/template/src/components/Router.sdk.ts +20 -0
  90. package/template/src/components/SessionContext.tsx +6 -3
  91. package/template/src/components/Settings.native.tsx +3 -0
  92. package/template/src/components/Settings.tsx +65 -31
  93. package/template/src/components/SettingsView.tsx +14 -8
  94. package/template/src/components/Share.tsx +188 -220
  95. package/template/src/components/StorageContext.tsx +5 -5
  96. package/template/src/components/StoreToken.tsx +5 -1
  97. package/template/src/components/chat-messages/useChatMessages.tsx +208 -0
  98. package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
  99. package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
  100. package/template/src/components/common/Error.tsx +54 -0
  101. package/template/src/components/common/Logo.tsx +35 -0
  102. package/template/src/components/common/index.tsx +8 -0
  103. package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
  104. package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
  105. package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
  106. package/template/src/components/dimension/DimensionContext.ts +27 -0
  107. package/template/src/components/dimension/DimensionProvider.tsx +34 -0
  108. package/template/src/components/livestream/LiveStreamContext.tsx +293 -272
  109. package/template/src/components/livestream/Types.ts +26 -7
  110. package/template/src/components/livestream/index.ts +13 -2
  111. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
  112. package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
  113. package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
  114. package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
  115. package/template/src/components/participants/AllHostParticipants.tsx +41 -53
  116. package/template/src/components/participants/MeParticipant.tsx +9 -10
  117. package/template/src/components/participants/ParticipantName.tsx +2 -1
  118. package/template/src/components/participants/RemoteParticipants.tsx +3 -3
  119. package/template/src/components/precall/LocalMute.native.tsx +91 -0
  120. package/template/src/components/precall/LocalMute.tsx +90 -0
  121. package/template/src/components/precall/VideoPreview.native.tsx +35 -0
  122. package/template/src/components/precall/VideoPreview.tsx +33 -0
  123. package/template/src/components/precall/index.tsx +28 -0
  124. package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
  125. package/template/src/components/precall/joinCallBtn.tsx +91 -0
  126. package/template/src/components/precall/meetingTitle.tsx +26 -0
  127. package/template/src/components/precall/selectDevice.tsx +46 -0
  128. package/template/src/components/precall/textInput.tsx +43 -0
  129. package/template/src/components/precall/usePreCall.tsx +41 -0
  130. package/template/src/components/styles.ts +20 -3
  131. package/template/src/components/useShareLink.tsx +239 -0
  132. package/template/src/components/useWakeLock.tsx +3 -3
  133. package/template/src/custom-events/CustomEvents.ts +221 -0
  134. package/template/src/custom-events/index.tsx +4 -0
  135. package/template/src/custom-events/types.ts +51 -0
  136. package/template/src/language/default-labels/commonLabels.ts +21 -0
  137. package/template/src/language/default-labels/createScreenLabels.ts +22 -0
  138. package/template/src/language/default-labels/index.ts +38 -0
  139. package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
  140. package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
  141. package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
  142. package/template/src/language/default-labels/videoCallScreenLabels.ts +189 -0
  143. package/template/src/language/i18nTypes.ts +10 -0
  144. package/template/src/language/index.ts +18 -0
  145. package/template/src/language/useLanguage.tsx +92 -0
  146. package/template/src/pages/Authenticate.tsx +21 -15
  147. package/template/src/pages/Create.tsx +176 -159
  148. package/template/src/pages/Join.tsx +44 -32
  149. package/template/src/pages/VideoCall.tsx +134 -406
  150. package/template/src/pages/create/useCreate.tsx +37 -0
  151. package/template/src/pages/video-call/CustomLayout.ts +17 -0
  152. package/template/src/pages/video-call/CustomUserContextHolder.tsx +12 -0
  153. package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
  154. package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
  155. package/template/src/pages/video-call/RenderComponent.tsx +52 -0
  156. package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
  157. package/template/src/pages/video-call/VideoComponent.tsx +34 -0
  158. package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
  159. package/template/src/pages/video-call/index.ts +20 -0
  160. package/template/src/rtm/RTMEngine.ts +58 -0
  161. package/template/src/rtm/utils.ts +44 -0
  162. package/template/src/rtm-events/EventUtils.ts +267 -0
  163. package/template/src/rtm-events/EventsQueue.ts +38 -0
  164. package/template/src/rtm-events/constants.ts +40 -0
  165. package/template/src/rtm-events/index.tsx +8 -0
  166. package/template/src/rtm-events/types.ts +7 -0
  167. package/template/src/subComponents/ChatBubble.tsx +18 -11
  168. package/template/src/subComponents/ChatContainer.tsx +79 -30
  169. package/template/src/subComponents/ChatInput.tsx +146 -70
  170. package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
  171. package/template/src/subComponents/Error.tsx +35 -24
  172. package/template/src/subComponents/LanguageSelector.tsx +85 -0
  173. package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
  174. package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
  175. package/template/src/subComponents/LocalAudioMute.tsx +52 -30
  176. package/template/src/subComponents/LocalEndCall.tsx +52 -0
  177. package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
  178. package/template/src/subComponents/LocalVideoMute.tsx +48 -30
  179. package/template/src/subComponents/LogoutButton.tsx +20 -5
  180. package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
  181. package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
  182. package/template/src/subComponents/Recording.tsx +46 -138
  183. package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
  184. package/template/src/subComponents/RemoteEndCall.tsx +18 -7
  185. package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
  186. package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
  187. package/template/src/subComponents/SelectDevice.tsx +88 -45
  188. package/template/src/subComponents/SelectOAuth.tsx +30 -6
  189. package/template/src/subComponents/SidePanelButtons.ts +39 -0
  190. package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
  191. package/template/src/subComponents/TextWithTooltip.tsx +15 -20
  192. package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
  193. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
  194. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
  195. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
  196. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
  197. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
  198. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
  199. package/template/src/subComponents/livestream/index.ts +10 -2
  200. package/template/src/subComponents/recording/useRecording.tsx +209 -0
  201. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
  202. package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
  203. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +61 -31
  204. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
  205. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +102 -143
  206. package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
  207. package/template/src/subComponents/toastConfig.tsx +25 -20
  208. package/template/src/utils/IsAttendeeUser.ts +34 -0
  209. package/template/src/utils/SdkEvents.ts +68 -0
  210. package/template/src/utils/common.tsx +40 -0
  211. package/template/src/utils/eventEmitter.ts +29 -0
  212. package/template/src/utils/getMeetingInvite.ts +30 -0
  213. package/template/src/utils/index.tsx +11 -2
  214. package/template/src/utils/isAudioEnabled.ts +29 -0
  215. package/template/src/utils/isHostUser.ts +33 -0
  216. package/template/src/utils/isMobileOrTablet.native.ts +5 -0
  217. package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
  218. package/template/src/utils/isPSTNUser.ts +30 -0
  219. package/template/src/utils/isSDK.sdk.ts +5 -0
  220. package/template/src/utils/isSDK.ts +5 -0
  221. package/template/src/utils/isScreenShareUser.ts +31 -0
  222. package/template/src/utils/isVideoEnabled.ts +29 -0
  223. package/template/src/utils/useButtonTemplate.tsx +43 -0
  224. package/template/src/utils/useCreateMeeting.ts +74 -0
  225. package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
  226. package/template/src/utils/useGetMeetingPhrase.ts +68 -0
  227. package/template/src/utils/useGetName.ts +20 -0
  228. package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
  229. package/template/src/utils/useJoinMeeting.ts +120 -0
  230. package/template/src/utils/useLayout.tsx +40 -0
  231. package/template/src/utils/useLiveStreamingUids.ts +26 -0
  232. package/template/src/utils/useMutePSTN.ts +43 -0
  233. package/template/src/utils/useMuteToggleLocal.ts +109 -0
  234. package/template/src/utils/useNavParams.ts +6 -0
  235. package/template/src/utils/useNavigateTo.ts +8 -0
  236. package/template/src/utils/usePrivateMessages.ts +33 -0
  237. package/template/src/utils/useRemoteEndCall.ts +27 -0
  238. package/template/src/utils/useRemoteMute.ts +64 -0
  239. package/template/src/utils/useSendControlMessage.ts +51 -0
  240. package/template/src/utils/useSendMessage.ts +40 -0
  241. package/template/src/utils/useSetName.ts +20 -0
  242. package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
  243. package/template/src/utils/useSidePanel.tsx +41 -0
  244. package/template/src/utils/useString.ts +61 -0
  245. package/template/src/utils/useUnreadMessageCount.ts +50 -0
  246. package/template/src/utils/useUserList.ts +26 -0
  247. package/template/tsconfig.json +4 -4
  248. package/template/tsconfig_fpeApi.json +103 -0
  249. package/template/tsconfig_rsdk_index.json +105 -0
  250. package/template/tsconfig_wsdk_index.json +104 -0
  251. package/template/webpack.commons.js +40 -16
  252. package/template/webpack.main.config.js +2 -1
  253. package/template/webpack.renderer.config.js +1 -1
  254. package/template/webpack.rsdk.config.js +33 -0
  255. package/template/webpack.ts.config.js +89 -0
  256. package/template/webpack.web.config.js +8 -1
  257. package/template/webpack.wsdk.config.js +34 -0
  258. package/template/agora-rn-uikit/.git/HEAD +0 -1
  259. package/template/agora-rn-uikit/.git/config +0 -16
  260. package/template/agora-rn-uikit/.git/description +0 -1
  261. package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
  262. package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
  263. package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -173
  264. package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
  265. package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
  266. package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
  267. package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
  268. package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
  269. package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
  270. package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
  271. package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
  272. package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
  273. package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
  274. package/template/agora-rn-uikit/.git/index +0 -0
  275. package/template/agora-rn-uikit/.git/info/exclude +0 -6
  276. package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
  277. package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
  278. package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
  279. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
  280. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
  281. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.pack +0 -0
  282. package/template/agora-rn-uikit/.git/packed-refs +0 -24
  283. package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
  284. package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
  285. package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
  286. package/template/agora-rn-uikit/.gitignore +0 -63
  287. package/template/agora-rn-uikit/package-lock.json +0 -7612
  288. package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
  289. package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
  290. package/template/package-lock.json +0 -22923
  291. package/template/react-native-toast-message/.gitignore +0 -5
  292. package/template/react-native-toast-message/.npmignore +0 -5
  293. package/template/react-native-toast-message/package-lock.json +0 -10553
  294. package/template/src/.DS_Store +0 -0
  295. package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
  296. package/template/src/subComponents/.DS_Store +0 -0
  297. package/template/src/subComponents/ScreenshareButton.tsx +0 -257
  298. package/template/src/subComponents/SwitchCamera.tsx +0 -35
  299. package/template/src/utils/hasBrandLogo.tsx +0 -3
  300. package/template/src/utils/mobileWebTest.native.tsx +0 -5
  301. package/template/src/utils/shouldAuthenticate.tsx +0 -7
@@ -10,9 +10,10 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {createContext, useContext, useState} from 'react';
13
- import {RtcContext} from '../../agora-rn-uikit';
13
+ import {RtcContext, UidType, useLocalUid} from '../../agora-rn-uikit';
14
14
  import useMount from './useMount';
15
15
  import icons from '../assets/icons';
16
+ import {NetworkQualities} from '../language/default-labels/videoCallScreenLabels';
16
17
 
17
18
  /**
18
19
  * Network Icons container object with color and string mapping to network quality stat [ 0 - 8]
@@ -30,59 +31,61 @@ export const networkIconsObject: {
30
31
  [key: number]: {
31
32
  icon: string;
32
33
  tint: string;
33
- text: string;
34
+ text: NetworkQualities;
34
35
  };
35
36
  } = {
36
37
  0: {
37
38
  icon: icons.networkIcons['Unsupported'],
38
39
  tint: 'primary',
39
- text: 'Unknown',
40
+ text: 'unknown',
40
41
  },
41
42
  1: {
42
43
  icon: icons.networkIcons['Excellent'],
43
44
  tint: '#2BD900',
44
- text: 'Excellent',
45
+ text: 'excellent',
45
46
  },
46
47
  2: {
47
48
  icon: icons.networkIcons['Good'],
48
49
  tint: '#FFEE00',
49
- text: 'Good',
50
+ text: 'good',
50
51
  },
51
52
  3: {
52
53
  icon: icons.networkIcons['Bad'],
53
54
  tint: '#F8AA00',
54
- text: 'Bad',
55
+ text: 'bad',
55
56
  },
56
57
  4: {
57
58
  icon: icons.networkIcons['Bad'],
58
59
  tint: '#F8AA00',
59
- text: 'Bad',
60
+ text: 'bad',
60
61
  },
61
62
  5: {
62
63
  icon: icons.networkIcons['VeryBad'],
63
64
  tint: 'red',
64
- text: 'Very Bad',
65
+ text: 'veryBad',
65
66
  },
66
67
  6: {
67
68
  icon: icons.networkIcons['VeryBad'],
68
69
  tint: 'red',
69
- text: 'Very Bad',
70
+ text: 'veryBad',
70
71
  },
71
72
  7: {
72
73
  icon: icons.networkIcons['Unsupported'],
73
74
  tint: 'primary',
74
- text: 'Unpublished',
75
+ text: 'unpublished',
75
76
  },
76
77
  8: {
77
78
  icon: icons.networkIcons['Loading'],
78
79
  tint: 'primary',
79
- text: 'Loading',
80
+ text: 'loading',
80
81
  },
81
82
  };
82
83
 
83
- const initNewtorkQualityStats: {[key in string | number]: number} = {
84
- local: 0,
85
- };
84
+ interface NetworkQualityStatsInterface {
85
+ [key: number]: number;
86
+ }
87
+
88
+ const initNewtorkQualityStats: NetworkQualityStatsInterface = {};
86
89
 
87
90
  const NetworkQualityContext = createContext(initNewtorkQualityStats);
88
91
 
@@ -90,15 +93,19 @@ export default NetworkQualityContext;
90
93
 
91
94
  export const NetworkQualityConsumer = NetworkQualityContext.Consumer;
92
95
 
93
- export const NetworkQualityProvider: React.FC = (props) => {
94
- const [networkQualityStats, setNetworkQualityStats] = useState(
95
- initNewtorkQualityStats,
96
- );
96
+ export const NetworkQualityProvider: React.FC = (props: {
97
+ children: React.ReactNode;
98
+ }) => {
99
+ const localUid = useLocalUid();
100
+ const [networkQualityStats, setNetworkQualityStats] =
101
+ useState<NetworkQualityStatsInterface>({
102
+ [localUid]: 0,
103
+ });
97
104
  const {RtcEngine} = useContext(RtcContext);
98
105
 
99
106
  useMount(() => {
100
107
  function handleNetworkQuality(
101
- uid: number | string,
108
+ uid: UidType,
102
109
  downlinkQuality: number,
103
110
  // Currently unused , potential use might be to take weighted average
104
111
  // of this alongside the downlink quality.
@@ -108,14 +115,14 @@ export const NetworkQualityProvider: React.FC = (props) => {
108
115
  const updatedNetworkQualityStats = {...prevNetworkQualityStats};
109
116
  if (uid === 0) {
110
117
  const displayedNetworkQuality =
111
- // check if either are unsupported (0)
112
- // if not then display whichever is poorer
118
+ // check if either are unsupported (0)
119
+ // if not then display whichever is poorer
113
120
  downlinkQuality * uplinkQuality !== 0
114
121
  ? downlinkQuality < uplinkQuality
115
122
  ? uplinkQuality
116
123
  : downlinkQuality
117
124
  : 0;
118
- updatedNetworkQualityStats['local'] = displayedNetworkQuality;
125
+ updatedNetworkQualityStats[localUid] = displayedNetworkQuality;
119
126
  } else {
120
127
  updatedNetworkQualityStats[uid] = downlinkQuality;
121
128
  }
@@ -10,42 +10,40 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {useContext, useState} from 'react';
13
- import {
14
- View,
15
- Text,
16
- StyleSheet,
17
- Platform,
18
- ScrollView,
19
- Dimensions,
20
- useWindowDimensions,
21
- } from 'react-native';
13
+ import {View, Text, StyleSheet, ScrollView, Dimensions} from 'react-native';
22
14
  import {PropsContext, ClientRole} from '../../agora-rn-uikit';
23
15
  import CopyJoinInfo from '../subComponents/CopyJoinInfo';
24
- import chatContext from './ChatContext';
25
16
  import ParticipantSectionTitle from './participants/ParticipantSectionTitle';
26
17
  import AllHostParticipants from './participants/AllHostParticipants';
27
18
  import AllAudienceParticipants from './participants/AllAudienceParticipants';
28
19
  import CurrentLiveStreamRequestsView from '../subComponents/livestream/CurrentLiveStreamRequestsView';
29
- import {
30
- ParticipantContextProvider,
31
- ParticipantContextConsumer,
32
- } from './participants/context/ParticipantContext';
20
+ import {useString} from '../utils/useString';
21
+ import {isWeb} from '../utils/common';
22
+ import {useMeetingInfo} from './meeting-info/useMeetingInfo';
23
+ import {useLiveStreamDataContext} from './contexts/LiveStreamDataContext';
33
24
 
34
- const ParticipantView = (props: any) => {
35
- const {userList} = useContext(chatContext);
25
+ const ParticipantView = () => {
26
+ const {liveStreamData, audienceUids, hostUids} = useLiveStreamDataContext();
36
27
  const {rtcProps} = useContext(PropsContext);
37
-
28
+ //commented for v1 release
29
+ // const hostLabel = useString('hostLabel')();
30
+ // const audienceLabel = useString('audienceLabel')();
31
+ // const participantsLabel = useString('participantsLabel')();
32
+ const hostLabel = 'Host';
33
+ const audienceLabel = 'Audience';
34
+ const participantsLabel = 'Participants';
35
+ const {isHost} = useMeetingInfo();
38
36
  const [dim, setDim] = useState([
39
37
  Dimensions.get('window').width,
40
38
  Dimensions.get('window').height,
41
39
  Dimensions.get('window').width > Dimensions.get('window').height,
42
40
  ]);
43
41
  const isSmall = dim[0] < 700;
44
- let fontSize = Platform.OS === 'web' ? 14 : 16;
42
+
45
43
  return (
46
44
  <View
47
45
  style={
48
- Platform.OS === 'web'
46
+ isWeb
49
47
  ? isSmall
50
48
  ? style.participantViewNative
51
49
  : style.participantView
@@ -53,117 +51,100 @@ const ParticipantView = (props: any) => {
53
51
  }>
54
52
  <View style={[style.padding10]}>
55
53
  <View style={style.lineUnderHeading}>
56
- <Text style={style.mainHeading}>Participants</Text>
54
+ <Text style={style.mainHeading}>{participantsLabel}</Text>
57
55
  </View>
58
56
  </View>
59
57
  <ScrollView style={[style.bodyContainer, style.padding10]}>
60
58
  {$config.EVENT_MODE ? (
61
- // Live streaming is true
62
- <ParticipantContextProvider>
63
- {/* Host and New host view */}
64
- {rtcProps?.role == ClientRole.Broadcaster &&
65
- (props.isHost ? (
66
- /**
67
- * Original Host
68
- * a) Can view streaming requests
69
- * b) Can view all hosts with remote controls
70
- */
71
- <>
72
- {/* a) Live streaming view */}
73
- <View style={style.participantsection}>
74
- <CurrentLiveStreamRequestsView
75
- p_style={style}
76
- userList={userList}
77
- />
78
- </View>
79
- {/* b) Host view with remote controls*/}
80
- <ParticipantContextConsumer>
81
- {({hostCount}) => {
82
- return (
83
- <View style={style.participantsection}>
84
- <ParticipantSectionTitle
85
- title="Host"
86
- count={hostCount}
87
- />
88
- <View style={style.participantContainer}>
89
- <AllHostParticipants
90
- p_style={style}
91
- isHost={props.isHost}
92
- />
93
- </View>
94
- </View>
95
- );
96
- }}
97
- </ParticipantContextConsumer>
98
- </>
99
- ) : (
100
- /** New Host ( earlier was 'audience' and now is host )
101
- * a) Can view all hosts without remote controls
102
- */
103
- <ParticipantContextConsumer>
104
- {({hostList, hostCount}) => {
105
- return (
106
- <View style={style.participantsection}>
107
- <ParticipantSectionTitle
108
- title="Host"
109
- count={hostCount}
110
- />
111
- <AllAudienceParticipants
112
- p_style={style}
113
- participantList={hostList}
114
- isHost={props.isHost}
115
- />
116
- </View>
117
- );
118
- }}
119
- </ParticipantContextConsumer>
120
- ))}
121
- {/**
122
- * Audience views all hosts without remote controls
123
- */}
124
- {rtcProps?.role == ClientRole.Audience && (
125
- <ParticipantContextConsumer>
126
- {({hostList, hostCount}) => {
127
- return (
59
+ <>
60
+ {
61
+ /*Live streaming is true
62
+ Host and New host view */
63
+ rtcProps?.role == ClientRole.Broadcaster &&
64
+ (isHost ? (
65
+ /**
66
+ * Original Host
67
+ * a) Can view streaming requests
68
+ * b) Can view all hosts with remote controls
69
+ */
70
+ <>
71
+ {/* a) Live streaming view */}
128
72
  <View style={style.participantsection}>
129
- <ParticipantSectionTitle title="Host" count={hostCount} />
130
- <AllAudienceParticipants
131
- participantList={hostList}
73
+ <CurrentLiveStreamRequestsView
132
74
  p_style={style}
133
- isHost={props.isHost}
75
+ userList={liveStreamData}
134
76
  />
135
77
  </View>
136
- );
137
- }}
138
- </ParticipantContextConsumer>
139
- )}
140
- {/* Everyone can see audience */}
141
- <ParticipantContextConsumer>
142
- {({audienceList, audienceCount}) => {
143
- return (
78
+ {/* b) Host view with remote controls*/}
79
+ <View style={style.participantsection}>
80
+ <ParticipantSectionTitle
81
+ title={hostLabel}
82
+ count={hostUids.length}
83
+ />
84
+ <View style={style.participantContainer}>
85
+ <AllHostParticipants p_style={style} isHost={isHost} />
86
+ </View>
87
+ </View>
88
+ </>
89
+ ) : (
90
+ /** New Host ( earlier was 'audience' and now is host )
91
+ * a) Can view all hosts without remote controls
92
+ */
144
93
  <View style={style.participantsection}>
145
94
  <ParticipantSectionTitle
146
- title="Audience"
147
- count={audienceCount}
95
+ title={hostLabel}
96
+ count={hostUids.length}
148
97
  />
149
98
  <AllAudienceParticipants
99
+ uids={hostUids}
150
100
  p_style={style}
151
- participantList={audienceList}
152
- isHost={props.isHost}
101
+ isHost={isHost}
153
102
  />
154
103
  </View>
155
- );
156
- }}
157
- </ParticipantContextConsumer>
158
- </ParticipantContextProvider>
104
+ ))
105
+ }
106
+ {
107
+ /**
108
+ * Audience views all hosts without remote controls
109
+ */
110
+ rtcProps?.role == ClientRole.Audience && (
111
+ <View style={style.participantsection}>
112
+ <ParticipantSectionTitle
113
+ title={hostLabel}
114
+ count={hostUids.length}
115
+ />
116
+ <AllAudienceParticipants
117
+ uids={hostUids}
118
+ p_style={style}
119
+ isHost={isHost}
120
+ />
121
+ </View>
122
+ )
123
+ }
124
+ {
125
+ /* Everyone can see audience */
126
+ <View style={style.participantsection}>
127
+ <ParticipantSectionTitle
128
+ title={audienceLabel}
129
+ count={audienceUids.length}
130
+ />
131
+ <AllAudienceParticipants
132
+ uids={audienceUids}
133
+ p_style={style}
134
+ isHost={isHost}
135
+ />
136
+ </View>
137
+ }
138
+ </>
159
139
  ) : (
160
140
  <View style={style.participantsection}>
161
141
  <View style={style.participantContainer}>
162
- <AllHostParticipants p_style={style} isHost={props.isHost} />
142
+ <AllHostParticipants p_style={style} isHost={isHost} />
163
143
  </View>
164
144
  </View>
165
145
  )}
166
146
  </ScrollView>
147
+
167
148
  <View
168
149
  style={{
169
150
  width: '100%',
@@ -251,19 +232,14 @@ const style = StyleSheet.create({
251
232
  },
252
233
  participantText: {
253
234
  lineHeight: 24,
254
- fontSize: Platform.OS === 'web' ? 18 : 16,
235
+ fontSize: isWeb ? 18 : 16,
255
236
  flexDirection: 'row',
256
237
  letterSpacing: 0.3,
257
238
  color: $config.PRIMARY_FONT_COLOR,
258
239
  fontWeight: '300',
259
240
  },
260
241
  participantTextSmall: {
261
- fontSize: Platform.OS === 'web' ? 14 : 12,
262
- },
263
- dummyView: {
264
- flex: 0.5,
265
- opacity: 0,
266
- marginHorizontal: 5,
242
+ fontSize: isWeb ? 14 : 12,
267
243
  },
268
244
  dummyView: {
269
245
  flex: 0.5,
@@ -16,32 +16,17 @@ import {
16
16
  Dimensions,
17
17
  StyleSheet,
18
18
  Text,
19
- Image,
20
19
  Pressable,
21
- useWindowDimensions,
22
20
  } from 'react-native';
23
- import {MinUidConsumer} from '../../agora-rn-uikit';
24
21
  import {RtcContext} from '../../agora-rn-uikit';
25
- import {MaxVideoView} from '../../agora-rn-uikit';
26
- import {MaxUidConsumer} from '../../agora-rn-uikit';
27
- import chatContext from './ChatContext';
28
- import ColorContext from './ColorContext';
29
22
  import {layoutProps} from '../../theme.json';
30
- import FallbackLogo from '../subComponents/FallbackLogo';
31
- import {ImageIcon} from '../../agora-rn-uikit';
32
- import ScreenShareNotice from '../subComponents/ScreenShareNotice';
33
- import {RFValue} from 'react-native-responsive-fontsize';
23
+ import {layoutComponent} from 'fpe-api';
24
+ import RenderComponent from '../pages/video-call/RenderComponent';
34
25
  const {topPinned} = layoutProps;
35
- import networkQualityContext from './NetworkQualityContext';
36
- import {NetworkQualityPill} from '../subComponents/NetworkQualityPill';
37
- import TextWithTooltip from '../subComponents/TextWithTooltip';
38
26
 
39
- const PinnedVideo = () => {
40
- const {height, width} = useWindowDimensions();
41
- const {primaryColor} = useContext(ColorContext);
42
- const networkQualityStat = useContext(networkQualityContext);
27
+ const PinnedVideo: layoutComponent = ({renderData}) => {
43
28
  const [collapse, setCollapse] = useState(false);
44
- const [dim, setDim] = useState([
29
+ const [dim, setDim] = useState<[number, number, boolean]>([
45
30
  Dimensions.get('window').width,
46
31
  Dimensions.get('window').height,
47
32
  Dimensions.get('window').width > Dimensions.get('window').height,
@@ -54,7 +39,9 @@ const PinnedVideo = () => {
54
39
  }, 20);
55
40
  };
56
41
  const isSidePinnedlayout = topPinned === true ? false : dim[2]; // if either explicity set to false or auto evaluation
57
- const {userList, localUid} = useContext(chatContext);
42
+ const [maxUid, ...minUids] = renderData;
43
+ const {dispatch} = useContext(RtcContext);
44
+
58
45
  return (
59
46
  <View
60
47
  style={{
@@ -77,13 +64,6 @@ const PinnedVideo = () => {
77
64
  borderRadius: 50,
78
65
  justifyContent: 'center',
79
66
  }}>
80
- {/* <Image
81
- source={{
82
- uri: icons.micOff,
83
- }}
84
- style={[style.MicIcon]}
85
- resizeMode={'contain'}
86
- /> */}
87
67
  <Text
88
68
  style={{
89
69
  alignSelf: 'center',
@@ -100,107 +80,36 @@ const PinnedVideo = () => {
100
80
  <ScrollView
101
81
  horizontal={!isSidePinnedlayout}
102
82
  decelerationRate={0}
103
- // snapToInterval={
104
- // dim[2] ? dim[0] * 0.1125 + 2 : ((dim[1] / 3.6) * 16) / 9
105
- // }
106
- // snapToAlignment={'center'}
107
83
  style={
108
84
  isSidePinnedlayout
109
85
  ? {width: '20%', paddingHorizontal: 8}
110
86
  : {flex: 1}
111
87
  }>
112
- <RtcContext.Consumer>
113
- {(data) => (
114
- <MinUidConsumer>
115
- {(minUsers) =>
116
- minUsers.map((user) => (
117
- <Pressable
118
- style={
119
- isSidePinnedlayout
120
- ? {
121
- width: '100%',
122
- height: dim[0] * 0.1125 + 2, // width * 20/100 * 9/16 + 2
123
- zIndex: 40,
124
- paddingBottom: 8,
125
- }
126
- : {
127
- width: ((dim[1] / 3) * 16) / 9 / 2 + 12, //dim[1] /4.3
128
- height: '100%',
129
- zIndex: 40,
130
- paddingRight: 8,
131
- paddingVertical: 4,
132
- }
133
- }
134
- key={user.uid}
135
- onPress={() => {
136
- data.dispatch({type: 'SwapVideo', value: [user]});
137
- }}>
138
- <View style={style.flex1}>
139
- <NetworkQualityPill
140
- networkStat={
141
- networkQualityStat[user.uid]
142
- ? networkQualityStat[user.uid]
143
- : user.audio || user.video
144
- ? 8
145
- : 7
146
- }
147
- primaryColor={primaryColor}
148
- rootStyle={{left: 5, top: 5}}
149
- small
150
- />
151
- <MaxVideoView
152
- fallback={() => {
153
- if (user.uid === 'local') {
154
- return FallbackLogo(userList[localUid]?.name);
155
- } else if (String(user.uid)[0] === '1') {
156
- return FallbackLogo('PSTN User');
157
- } else {
158
- return FallbackLogo(userList[user.uid]?.name);
159
- }
160
- }}
161
- user={user}
162
- key={user.uid}
163
- />
164
- <View style={style.nameHolder}>
165
- <View style={[style.MicBackdrop]}>
166
- <ImageIcon
167
- name={user.audio ? 'mic' : 'micOff'}
168
- color={user.audio ? primaryColor : 'red'}
169
- style={style.MicIcon}
170
- />
171
- </View>
172
- <View style={{flex:1}}>
173
- <TextWithTooltip
174
- value={user.uid === 'local'
175
- ? userList[localUid]
176
- ? userList[localUid].name + ' '
177
- : 'You '
178
- : userList[user.uid]
179
- ? userList[user.uid].name + ' '
180
- : user.uid === 1
181
- ? (userList[localUid]?.name + "'s screen ")
182
- : String(user.uid)[0] === '1'
183
- ? 'PSTN User '
184
- : 'User '}
185
- style={[
186
- style.name,
187
- {
188
- fontSize: RFValue(
189
- 14,
190
- height > width ? height : width,
191
- ),
192
- },
193
- ]}
194
- />
195
- </View>
196
- </View>
197
- </View>
198
- </Pressable>
199
- ))
200
- }
201
- </MinUidConsumer>
202
- )}
203
- </RtcContext.Consumer>
88
+ {minUids.map((minUid, i) => (
89
+ <Pressable
90
+ style={
91
+ isSidePinnedlayout
92
+ ? {
93
+ width: '100%',
94
+ height: dim[0] * 0.1125 + 2, // width * 20/100 * 9/16 + 2
95
+ zIndex: 40,
96
+ paddingBottom: 8,
97
+ }
98
+ : {
99
+ width: ((dim[1] / 3) * 16) / 9 / 2 + 12, //dim[1] /4.3
100
+ height: '100%',
101
+ zIndex: 40,
102
+ paddingRight: 8,
103
+ paddingVertical: 4,
104
+ }
105
+ }
106
+ key={'minVideo' + i}
107
+ onPress={() => {
108
+ dispatch({type: 'SwapVideo', value: [minUid]});
109
+ }}>
110
+ <RenderComponent uid={minUid} />
111
+ </Pressable>
112
+ ))}
204
113
  </ScrollView>
205
114
  )}
206
115
  <View
@@ -211,70 +120,9 @@ const PinnedVideo = () => {
211
120
  : style.width80
212
121
  : style.flex4
213
122
  }>
214
- <MaxUidConsumer>
215
- {(maxUsers) => (
216
- <>
217
- <View style={style.flex1}>
218
- <ScreenShareNotice uid={maxUsers[0].uid} />
219
- <NetworkQualityPill
220
- networkStat={
221
- networkQualityStat[maxUsers[0].uid]
222
- ? networkQualityStat[maxUsers[0].uid]
223
- : maxUsers[0].audio || maxUsers[0].video
224
- ? 8
225
- : 7
226
- }
227
- primaryColor={primaryColor}
228
- rootStyle={{
229
- marginLeft: 25,
230
- top: 8,
231
- right: 10,
232
- }}
233
- small
234
- />
235
- <MaxVideoView
236
- fallback={() => {
237
- if (maxUsers[0].uid === 'local') {
238
- return FallbackLogo(userList[localUid]?.name);
239
- } else if (String(maxUsers[0].uid)[0] === '1') {
240
- return FallbackLogo('PSTN User');
241
- } else {
242
- return FallbackLogo(userList[maxUsers[0].uid]?.name);
243
- }
244
- }}
245
- user={maxUsers[0]}
246
- key={maxUsers[0].uid}
247
- />
248
- <View style={style.nameHolder}>
249
- <View style={[style.MicBackdrop]}>
250
- <ImageIcon
251
- name={maxUsers[0].audio ? 'mic' : 'micOff'}
252
- color={maxUsers[0].audio ? primaryColor : 'red'}
253
- style={style.MicIcon}
254
- />
255
- </View>
256
- <View style={{flex:1}}>
257
- <TextWithTooltip
258
- value={maxUsers[0].uid === 'local'
259
- ? userList[localUid]
260
- ? userList[localUid].name + ' '
261
- : 'You '
262
- : userList[maxUsers[0].uid]
263
- ? userList[maxUsers[0].uid].name + ' '
264
- : maxUsers[0].uid === 1
265
- ? (userList[localUid].name + "'s screen ")
266
- : 'User '}
267
- style={[
268
- style.name,
269
- {fontSize: RFValue(14, height > width ? height : width)},
270
- ]}
271
- />
272
- </View>
273
- </View>
274
- </View>
275
- </>
276
- )}
277
- </MaxUidConsumer>
123
+ <View style={style.flex1} key={'maxVideo' + maxUid}>
124
+ <RenderComponent uid={maxUid} />
125
+ </View>
278
126
  </View>
279
127
  </View>
280
128
  );
@@ -298,7 +146,12 @@ const style = StyleSheet.create({
298
146
  zIndex: 5,
299
147
  maxWidth: '100%',
300
148
  },
301
- name: {color: $config.PRIMARY_FONT_COLOR, lineHeight: 25, fontWeight: '700', flexShrink: 1},
149
+ name: {
150
+ color: $config.PRIMARY_FONT_COLOR,
151
+ lineHeight: 25,
152
+ fontWeight: '700',
153
+ flexShrink: 1,
154
+ },
302
155
  MicBackdrop: {
303
156
  width: 20,
304
157
  height: 20,