agora-appbuilder-core 4.0.0-test.2 → 4.0.1

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 (442) hide show
  1. package/package.json +3 -3
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +22 -22
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +20328 -20229
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/.eslintrc.js +5 -0
  10. package/template/agora-rn-uikit/package.json +14 -14
  11. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  12. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  13. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  14. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +6 -6
  15. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +78 -38
  16. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +26 -17
  17. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Icons.ts +39 -0
  19. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  20. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  21. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +5 -2
  22. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
  23. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  24. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
  25. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  26. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
  27. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  28. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
  29. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  30. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  31. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -7
  32. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -7
  33. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +6 -7
  34. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -8
  35. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -9
  36. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -8
  37. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +14 -13
  38. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -7
  39. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -7
  40. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -6
  41. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +20 -3
  42. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  43. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -1
  44. package/template/agora-rn-uikit/src/Rtc/Create.tsx +117 -111
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +46 -27
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +174 -75
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +2 -2
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +41 -19
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +37 -17
  51. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
  52. package/template/agora-rn-uikit/src/index.ts +15 -9
  53. package/template/android/app/build.gradle +59 -156
  54. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  55. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  56. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  57. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  58. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  59. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +22 -36
  60. package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
  61. package/template/android/app/src/main/res/values/strings.xml +3 -0
  62. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  63. package/template/android/build.gradle +17 -31
  64. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  65. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  66. package/template/android/gradle.properties +18 -4
  67. package/template/android/gradlew +165 -104
  68. package/template/android/gradlew.bat +12 -23
  69. package/template/android/settings.gradle +1 -0
  70. package/template/bridge/rtc/webNg/RtcEngine.ts +191 -71
  71. package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -26
  72. package/template/bridge/rtc/webNg/Types.ts +20 -5
  73. package/template/bridge/rtc/webNg/index.ts +81 -14
  74. package/template/bridge/rtm/web/index.ts +5 -3
  75. package/template/configTransform.js +16 -1
  76. package/template/customization-api/action-library.ts +4 -16
  77. package/template/customization-api/app-state.ts +15 -8
  78. package/template/customization-api/customEvents.ts +7 -2
  79. package/template/customization-api/customize.ts +1 -1
  80. package/template/customization-api/index.ts +4 -0
  81. package/template/customization-api/sub-components.ts +17 -16
  82. package/template/customization-api/temp.ts +52 -0
  83. package/template/customization-api/typeDefinition.ts +32 -45
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/index.ts +0 -1
  87. package/template/defaultConfig.js +72 -0
  88. package/template/global.d.ts +9 -1
  89. package/template/index.js +1 -4
  90. package/template/index.web.js +0 -5
  91. package/template/ios/.xcode.env +11 -0
  92. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  93. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  94. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  95. package/template/ios/HelloWorld/Info.plist +7 -1
  96. package/template/ios/HelloWorld/main.m +2 -1
  97. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +81 -119
  98. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  99. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  100. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  101. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  102. package/template/ios/HelloWorldTests/Info.plist +2 -2
  103. package/template/ios/Podfile +51 -21
  104. package/template/ios/Podfile.lock +553 -294
  105. package/template/jest.config.js +4 -0
  106. package/template/metro.config.js +7 -32
  107. package/template/package.json +48 -39
  108. package/template/react-native-toast-message/index.d.ts +3 -1
  109. package/template/react-native-toast-message/index.js +1 -0
  110. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  111. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  112. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  113. package/template/react-native-toast-message/src/index.js +3 -1
  114. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  115. package/template/src/App.tsx +79 -22
  116. package/template/src/AppRoutes.tsx +48 -3
  117. package/template/src/AppWrapper.tsx +25 -21
  118. package/template/src/SDKAppWrapper.tsx +11 -11
  119. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  120. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  121. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  122. package/template/src/app-state/useVideoQuality.tsx +39 -0
  123. package/template/src/assets/font-styles.css +174 -3
  124. package/template/src/assets/fonts/icomoon.ttf +0 -0
  125. package/template/src/assets/selection.json +1 -1
  126. package/template/src/atoms/ActionMenu.tsx +50 -11
  127. package/template/src/atoms/Avatar.tsx +51 -0
  128. package/template/src/atoms/Card.tsx +21 -8
  129. package/template/src/atoms/Carousel.native.tsx +105 -0
  130. package/template/src/atoms/Carousel.tsx +103 -0
  131. package/template/src/atoms/Checkbox.tsx +98 -0
  132. package/template/src/atoms/CircularProgress.tsx +0 -1
  133. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  134. package/template/src/atoms/CustomIcon.tsx +46 -0
  135. package/template/src/atoms/DropDownMulti.tsx +349 -0
  136. package/template/src/atoms/Dropdown.tsx +3 -3
  137. package/template/src/atoms/IconButton.tsx +52 -9
  138. package/template/src/atoms/ImageIcon.tsx +18 -5
  139. package/template/src/atoms/InlineNotification.tsx +81 -0
  140. package/template/src/atoms/InviteInfo.tsx +4 -4
  141. package/template/src/atoms/MeetingLink.tsx +160 -0
  142. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  143. package/template/src/atoms/Popup.tsx +46 -26
  144. package/template/src/atoms/PrimaryButton.tsx +19 -5
  145. package/template/src/atoms/RecordingInfo.tsx +8 -5
  146. package/template/src/atoms/SecondaryButton.tsx +2 -0
  147. package/template/src/atoms/Spacer.tsx +1 -0
  148. package/template/src/atoms/TertiaryButton.tsx +35 -5
  149. package/template/src/atoms/TextInput.tsx +2 -1
  150. package/template/src/atoms/Toolbar.tsx +102 -0
  151. package/template/src/atoms/ToolbarItem.tsx +85 -0
  152. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  153. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  154. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  155. package/template/src/atoms/Tooltip.tsx +30 -13
  156. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  157. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  158. package/template/src/auth/AuthProvider.tsx +30 -32
  159. package/template/src/auth/AuthRoute.tsx +11 -3
  160. package/template/src/auth/IDPAuth.electron.tsx +4 -3
  161. package/template/src/auth/IDPAuth.tsx +10 -2
  162. package/template/src/auth/IDPLogoutComponent.tsx +14 -5
  163. package/template/src/auth/UserCancelPopup.tsx +11 -4
  164. package/template/src/auth/openIDPURL.electron.tsx +5 -4
  165. package/template/src/auth/openIDPURL.tsx +1 -1
  166. package/template/src/auth/useIDPAuth.electron.tsx +6 -3
  167. package/template/src/auth/useIDPAuth.tsx +0 -4
  168. package/template/src/auth/useTokenAuth.tsx +10 -8
  169. package/template/src/components/Chat.tsx +97 -78
  170. package/template/src/components/ChatContext.ts +2 -0
  171. package/template/src/components/ColorConfigure.tsx +0 -1
  172. package/template/src/components/CommonStyles.ts +9 -2
  173. package/template/src/components/Controls.tsx +914 -182
  174. package/template/src/components/Controls1.native.tsx +9 -5
  175. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  176. package/template/src/components/DeviceConfigure.tsx +88 -43
  177. package/template/src/components/DeviceContext.tsx +2 -0
  178. package/template/src/components/EventsConfigure.tsx +685 -81
  179. package/template/src/components/GraphQLProvider.tsx +51 -33
  180. package/template/src/components/GridVideo.tsx +30 -16
  181. package/template/src/components/HostControlView.tsx +11 -14
  182. package/template/src/components/JoinPhrase.tsx +0 -1
  183. package/template/src/components/Leftbar.tsx +110 -0
  184. package/template/src/components/Navbar.tsx +296 -149
  185. package/template/src/components/NavbarMobile.tsx +119 -0
  186. package/template/src/components/NetworkQualityContext.tsx +12 -6
  187. package/template/src/components/ParticipantsView.tsx +62 -55
  188. package/template/src/components/PinnedVideo.tsx +191 -119
  189. package/template/src/components/Precall.native.tsx +155 -72
  190. package/template/src/components/Precall.tsx +225 -73
  191. package/template/src/components/RTMConfigure.tsx +180 -63
  192. package/template/src/components/Rightbar.tsx +112 -0
  193. package/template/src/components/SdkApiContext.tsx +26 -24
  194. package/template/src/components/SdkMuteToggleListener.tsx +8 -12
  195. package/template/src/components/SessionContext.tsx +0 -1
  196. package/template/src/components/Settings.tsx +33 -4
  197. package/template/src/components/SettingsView.tsx +42 -9
  198. package/template/src/components/Share.tsx +130 -72
  199. package/template/src/components/StorageContext.tsx +5 -4
  200. package/template/src/components/ToastComponent.tsx +7 -1
  201. package/template/src/components/WhiteboardLayout.tsx +291 -0
  202. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  203. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  204. package/template/src/components/common/Error.tsx +2 -0
  205. package/template/src/components/common/Logo.tsx +2 -2
  206. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  207. package/template/src/components/contexts/ScreenShareContext.tsx +1 -0
  208. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  209. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  210. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  211. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  212. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  213. package/template/src/components/livestream/Types.ts +36 -20
  214. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  215. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  216. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  217. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  218. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  219. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  220. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  221. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  222. package/template/src/components/participants/Participant.tsx +45 -16
  223. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  224. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  225. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  226. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  227. package/template/src/components/popups/InvitePopup.tsx +105 -44
  228. package/template/src/components/popups/StartScreenSharePopup.native.tsx +26 -23
  229. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  230. package/template/src/components/popups/StopScreenSharePopup.native.tsx +17 -5
  231. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  232. package/template/src/components/precall/LocalMute.tsx +69 -45
  233. package/template/src/components/precall/PermissionHelper.tsx +31 -28
  234. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  235. package/template/src/components/precall/VideoFallback.tsx +173 -0
  236. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  237. package/template/src/components/precall/VideoPreview.tsx +29 -164
  238. package/template/src/components/precall/index.tsx +2 -0
  239. package/template/src/components/precall/joinCallBtn.native.tsx +9 -4
  240. package/template/src/components/precall/joinCallBtn.tsx +9 -4
  241. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  242. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  243. package/template/src/components/precall/meetingTitle.tsx +37 -11
  244. package/template/src/components/precall/selectDevice.tsx +5 -5
  245. package/template/src/components/precall/textInput.tsx +17 -19
  246. package/template/src/components/precall/usePreCall.tsx +4 -4
  247. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  248. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  249. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  250. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  251. package/template/src/components/recordings/recording-table.tsx +154 -0
  252. package/template/src/components/recordings/style.ts +183 -0
  253. package/template/src/components/recordings/utils.ts +80 -0
  254. package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +46 -12
  255. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  256. package/template/src/components/useShareLink.tsx +23 -60
  257. package/template/src/components/useUserPreference.tsx +54 -17
  258. package/template/src/components/useVideoCall.tsx +52 -7
  259. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  260. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  261. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  262. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  263. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  264. package/template/src/components/virtual-background/VButils.ts +104 -0
  265. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  266. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  267. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  268. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  269. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  270. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  271. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  272. package/template/src/components/virtual-background/images/index.ts +37 -0
  273. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  274. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  275. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  276. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  277. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  278. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  279. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  280. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  281. package/template/src/components/virtual-background/useVB.tsx +267 -0
  282. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  283. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  284. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  285. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  286. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  287. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  288. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  289. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  290. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  291. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  292. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  293. package/template/src/language/default-labels/commonLabels.ts +51 -14
  294. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  295. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  296. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  297. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  298. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  299. package/template/src/pages/Create.tsx +118 -92
  300. package/template/src/pages/Endcall.tsx +2 -2
  301. package/template/src/pages/Join.tsx +67 -45
  302. package/template/src/pages/VideoCall.tsx +240 -132
  303. package/template/src/pages/video-call/ActionSheet.native.tsx +33 -3
  304. package/template/src/pages/video-call/ActionSheet.tsx +54 -15
  305. package/template/src/pages/video-call/ActionSheetContent.tsx +487 -313
  306. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  307. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  308. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  309. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  310. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  311. package/template/src/pages/video-call/VideoCallMobileView.tsx +199 -99
  312. package/template/src/pages/video-call/VideoCallScreen.native.tsx +2 -25
  313. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -57
  314. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  315. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  316. package/template/src/pages/video-call/VideoRenderer.tsx +237 -98
  317. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  318. package/template/src/pages/video-call/index.ts +42 -8
  319. package/template/src/rtm/RTMEngine.ts +9 -4
  320. package/template/src/rtm-events/constants.ts +21 -3
  321. package/template/src/rtm-events-api/Events.ts +6 -4
  322. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  323. package/template/src/rtm-events-api/types.ts +5 -5
  324. package/template/src/selection.json +1 -0
  325. package/template/src/subComponents/ChatBubble.tsx +87 -67
  326. package/template/src/subComponents/ChatContainer.tsx +70 -49
  327. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  328. package/template/src/subComponents/ChatInput.tsx +31 -80
  329. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  330. package/template/src/subComponents/Checkbox.tsx +7 -6
  331. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  332. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  333. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  334. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  335. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  336. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  337. package/template/src/subComponents/Loading.tsx +22 -9
  338. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  339. package/template/src/subComponents/LocalEndCall.tsx +48 -31
  340. package/template/src/subComponents/LocalSwitchCamera.tsx +49 -11
  341. package/template/src/subComponents/LocalVideoMute.tsx +87 -35
  342. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  343. package/template/src/subComponents/Recording.tsx +29 -9
  344. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  345. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  346. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  347. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  348. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  349. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  350. package/template/src/subComponents/SelectDevice.tsx +103 -34
  351. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  352. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  353. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  354. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  355. package/template/src/subComponents/ToastConfig.tsx +70 -61
  356. package/template/src/subComponents/caption/Caption.tsx +132 -0
  357. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  358. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  359. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  360. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  361. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  362. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  363. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  364. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  365. package/template/src/subComponents/caption/index.ts +3 -0
  366. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  367. package/template/src/subComponents/caption/proto/test.proto +23 -0
  368. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  369. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  370. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  371. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  372. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  373. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  374. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  375. package/template/src/subComponents/caption/utils.ts +126 -0
  376. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  377. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  378. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  379. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  380. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  381. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  382. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  383. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  384. package/template/src/subComponents/recording/useRecording.tsx +251 -150
  385. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  386. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +18 -13
  387. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +164 -93
  388. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +163 -108
  389. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  390. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  391. package/template/src/theme/index.ts +13 -0
  392. package/template/src/utils/SdkMethodEvents.ts +5 -5
  393. package/template/src/utils/axiomLogger.ts +117 -0
  394. package/template/src/utils/book.jpg +0 -0
  395. package/template/src/utils/common.tsx +96 -1
  396. package/template/src/utils/constants.ts +4 -0
  397. package/template/src/utils/getCustomRoute.ts +7 -0
  398. package/template/src/utils/index.tsx +34 -0
  399. package/template/src/utils/useActionSheet.tsx +50 -0
  400. package/template/src/utils/useActiveSpeaker.ts +38 -0
  401. package/template/src/utils/useAppState.ts +17 -0
  402. package/template/src/utils/useAsyncEffect.ts +138 -0
  403. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
  404. package/template/src/utils/useEndCall.ts +65 -0
  405. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  406. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  407. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  408. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  409. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  410. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  411. package/template/src/utils/useIsPSTN.ts +3 -3
  412. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  413. package/template/src/utils/useJoinRoom.ts +199 -0
  414. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  415. package/template/src/{components/Settings.native.tsx → utils/useMenu.tsx} +16 -6
  416. package/template/src/utils/useModal.tsx +8 -0
  417. package/template/src/utils/useMutePSTN.ts +2 -2
  418. package/template/src/utils/useMuteToggleLocal.ts +21 -9
  419. package/template/src/utils/useRemoteEndCall.ts +4 -4
  420. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  421. package/template/src/utils/useRemoteMute.ts +7 -7
  422. package/template/src/utils/useRemoteRequest.ts +7 -7
  423. package/template/src/utils/useSearchParams.tsx +18 -0
  424. package/template/src/utils/useString.ts +13 -3
  425. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  426. package/template/src/utils/useSwitchCamera.tsx +19 -0
  427. package/template/src/utils/useToolbar.tsx +59 -0
  428. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  429. package/template/static.d.ts +42 -0
  430. package/template/web/index.html +20 -0
  431. package/template/webpack.commons.js +21 -10
  432. package/template/_buckconfig +0 -6
  433. package/template/_gitattributes +0 -1
  434. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  435. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  436. package/template/android/app/_BUCK +0 -55
  437. package/template/android/app/build_defs.bzl +0 -19
  438. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  439. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  440. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  441. package/template/src/utils/useButtonTemplate.tsx +0 -44
  442. package/template/src/utils/useJoinMeeting.ts +0 -142
@@ -1,20 +1,23 @@
1
- import React, {useState, useEffect, useContext, useRef, FC} from 'react';
2
- import RtcEngine, {
1
+ import React, {useState, useEffect, useContext, useRef} from 'react';
2
+ import {
3
+ createAgoraRtcEngine,
3
4
  VideoEncoderConfiguration,
4
5
  AreaCode,
5
- AudioProfile,
6
- AudioScenario,
6
+ IRtcEngine,
7
+ AudioProfileType,
8
+ AudioScenarioType,
7
9
  } from 'react-native-agora';
8
10
  import {Platform} from 'react-native';
9
11
  import requestCameraAndAudioPermission from '../Utils/permission';
10
- import {DispatchType} from '../Contexts/RtcContext';
12
+ import {DispatchType} from '../Contexts/DispatchContext';
11
13
  import PropsContext, {
12
14
  ToggleState,
13
- ClientRole,
14
- ChannelProfile,
15
+ ClientRoleType,
16
+ ChannelProfileType,
15
17
  PermissionState,
16
18
  } from '../Contexts/PropsContext';
17
19
  import quality from '../Utils/quality';
20
+ import {isBotUser} from '../Utils/isBotUser';
18
21
 
19
22
  const Create = ({
20
23
  dispatch,
@@ -22,9 +25,9 @@ const Create = ({
22
25
  }: {
23
26
  dispatch: DispatchType;
24
27
  children: (
25
- engine: React.MutableRefObject<RtcEngine>,
28
+ engine: React.MutableRefObject<IRtcEngine>,
26
29
  tracksReady: boolean,
27
- ) => JSX.Element;
30
+ ) => React.ReactElement;
28
31
  }) => {
29
32
  const mutexLock = useRef(false);
30
33
  const [ready, setReady] = useState(false);
@@ -35,7 +38,7 @@ const Create = ({
35
38
  audioRoom = false,
36
39
  activeSpeaker = false,
37
40
  } = rtcProps || {};
38
- let engine = useRef<RtcEngine>({} as RtcEngine);
41
+ let engine = useRef<IRtcEngine>({} as IRtcEngine);
39
42
  // commented for v1 release
40
43
  // const beforeCreate = rtcProps?.lifecycle?.useBeforeCreate
41
44
  // ? rtcProps.lifecycle.useBeforeCreate()
@@ -188,8 +191,8 @@ const Create = ({
188
191
  };
189
192
  const enableVideoAndAudioWithInitialStates = async () => {
190
193
  if (
191
- mode == ChannelProfile.LiveBroadcasting &&
192
- rtcProps?.role == ClientRole.Audience
194
+ mode === ChannelProfileType.ChannelProfileLiveBroadcasting &&
195
+ rtcProps?.role === ClientRoleType.ClientRoleAudience
193
196
  ) {
194
197
  enableVideoAndAudioWithDisabledState();
195
198
  } else {
@@ -213,70 +216,74 @@ const Create = ({
213
216
  // console.error('FPE:Error on executing useBeforeCreate', error);
214
217
  // }
215
218
  try {
219
+ engine.current = createAgoraRtcEngine();
216
220
  if (
217
221
  geoFencing === true &&
218
222
  (Platform.OS === 'android' || Platform.OS === 'ios')
219
223
  ) {
220
- engine.current = await RtcEngine.createWithAreaCode(
221
- rtcProps.appId,
222
- // eslint-disable-next-line no-bitwise
223
- AreaCode.GLOB ^ AreaCode.CN,
224
- );
224
+ if (rtcProps?.appId) {
225
+ engine.current.initialize({
226
+ appId: rtcProps.appId,
227
+ // eslint-disable-next-line no-bitwise
228
+ areaCode: AreaCode.AreaCodeGlob ^ AreaCode.AreaCodeCn,
229
+ });
230
+ }
225
231
  } else {
226
- engine.current = await RtcEngine.create(rtcProps.appId);
232
+ if (rtcProps?.appId) {
233
+ engine.current.initialize({appId: rtcProps.appId});
234
+ }
227
235
  }
228
236
  /* Live Streaming */
229
- if (mode == ChannelProfile.LiveBroadcasting) {
237
+ if (mode === ChannelProfileType.ChannelProfileLiveBroadcasting) {
230
238
  await engine.current.setChannelProfile(
231
- ChannelProfile.LiveBroadcasting,
239
+ ChannelProfileType.ChannelProfileLiveBroadcasting,
232
240
  );
233
241
  await engine.current.setClientRole(
234
- rtcProps.role === ClientRole.Audience
235
- ? ClientRole.Audience
236
- : ClientRole.Broadcaster,
242
+ rtcProps?.role === ClientRoleType.ClientRoleAudience
243
+ ? ClientRoleType.ClientRoleAudience
244
+ : ClientRoleType.ClientRoleBroadcaster,
237
245
  );
238
246
  } else {
239
- await engine.current.setChannelProfile(ChannelProfile.Communication);
247
+ await engine.current.setChannelProfile(
248
+ ChannelProfileType.ChannelProfileCommunication,
249
+ );
240
250
  }
241
251
  if (activeSpeaker) {
242
- await engine.current.enableAudioVolumeIndication(500, 3, true);
252
+ await engine.current.enableAudioVolumeIndication(100, 3, true);
243
253
  }
244
254
  if (!audioRoom) {
245
- if (rtcProps.profile) {
255
+ if (rtcProps && rtcProps.profile) {
246
256
  if (Platform.OS === 'web') {
247
- //hardcoding custom profile for testing
248
257
  // move this to bridge?
249
258
  // @ts-ignore
250
- //await engine.current.setVideoProfile({});
251
- await engine.current.setVideoProfile({
252
- width: 1280,
253
- height: 720,
254
- frameRate: 24,
255
- bitrateMin: 1000,
256
- bitrateMax: 1500,
257
- });
259
+ await engine.current.setVideoProfile(rtcProps.profile);
258
260
  } else {
259
- const config: VideoEncoderConfiguration =
260
- quality[rtcProps.profile];
261
- await engine.current.setVideoEncoderConfiguration({
262
- ...config,
263
- bitrate: 0,
264
- });
261
+ if (rtcProps && rtcProps?.profile) {
262
+ const config: VideoEncoderConfiguration =
263
+ quality[rtcProps.profile];
264
+ //@ts-ignore
265
+ await engine.current.setVideoEncoderConfiguration({
266
+ ...config,
267
+ bitrate: 0,
268
+ });
269
+ }
265
270
  }
266
271
  }
267
272
  } else {
268
273
  //web will work even without audio profile
269
274
  //but native need to set audio profile otherwise user will experience low audio issue
270
275
  if (Platform.OS === 'android' || Platform.OS === 'ios') {
276
+ //@ts-ignore
271
277
  await engine.current.setAudioProfile(
272
- AudioProfile.Default,
273
- AudioScenario.Default,
278
+ AudioProfileType.AudioProfileDefault,
279
+ AudioScenarioType.AudioScenarioDefault,
274
280
  );
275
281
  //also audio route for voice-chat will work through earpiece not phonespeaker
276
282
  //for audiolivecast it will work through phone speaker
277
283
  //ref - https://docs.agora.io/en/help/integration-issues/profile_difference/#audio-route
278
284
  //so setting into phone speaker manually as requested
279
- if (mode == ChannelProfile.Communication) {
285
+ if (mode === ChannelProfileType.ChannelProfileCommunication) {
286
+ //@ts-ignore
280
287
  await engine.current.setEnableSpeakerphone(true);
281
288
  }
282
289
  }
@@ -292,102 +299,84 @@ const Create = ({
292
299
  */
293
300
  if (
294
301
  !(
295
- mode === ChannelProfile.LiveBroadcasting &&
296
- rtcProps.role == ClientRole.Audience &&
297
- Platform.OS === 'web'
302
+ mode === ChannelProfileType.ChannelProfileLiveBroadcasting &&
303
+ rtcProps?.role === ClientRoleType.ClientRoleAudience &&
304
+ Platform.OS === 'web' &&
305
+ rtcProps?.recordingBot
298
306
  )
299
307
  ) {
300
- enableVideoAndAudioWithInitialStates().then(() => {
301
- setTracksReady(true);
302
- isVideoEnabledRef.current = true;
303
- });
308
+ if (rtcProps?.recordingBot) {
309
+ console.log(
310
+ 'recording-bot, hence not asking audio/video permission',
311
+ );
312
+ } else {
313
+ enableVideoAndAudioWithInitialStates().then(() => {
314
+ setTracksReady(true);
315
+ isVideoEnabledRef.current = true;
316
+ });
317
+ }
304
318
  }
305
319
 
306
320
  engine.current.addListener(
307
- 'JoinChannelSuccess',
308
- async (channel, uid, elapsed) => {
321
+ 'onJoinChannelSuccess',
322
+ async (connection, elapsed) => {
309
323
  //Invoke the callback
310
- console.log('UIkit enabling dual stream', rtcProps.dual);
311
- if (rtcProps.dual) {
324
+ console.log('UIkit enabling dual stream', rtcProps?.dual);
325
+ if (rtcProps?.dual) {
312
326
  console.log('UIkit enabled dual stream');
313
327
  await engine.current!.enableDualStreamMode(rtcProps.dual);
314
328
  // await engine.current.setRemoteSubscribeFallbackOption(1);
315
329
  }
316
330
  callbacks?.JoinChannelSuccess &&
317
- callbacks.JoinChannelSuccess(channel, uid, elapsed);
331
+ callbacks.JoinChannelSuccess(connection, elapsed);
318
332
  },
319
333
  );
320
334
 
321
- engine.current.addListener('UserJoined', async (...args) => {
322
- // preventing STT pusher bot in renderlist
323
- if (args[0] === 111111) {
335
+ engine.current.addListener('onUserJoined', async (...args) => {
336
+ // exluding the connection obj being passed by native sdk
337
+ const [, ...remainingArgs] = args;
338
+ //@ts-ignore
339
+ // preventing bots(ex: STT, recording) in renderlist
340
+ if (isBotUser(remainingArgs)) {
324
341
  return;
325
342
  }
326
343
  //Get current peer IDs
327
344
  dispatch({
328
345
  type: 'UserJoined',
329
- value: args,
346
+ //@ts-ignore
347
+ value: remainingArgs,
330
348
  });
331
349
  });
332
350
 
333
- engine.current.addListener('UserOffline', (...args) => {
351
+ engine.current.addListener('onUserOffline', (...args) => {
352
+ const [, ...remainingArgs] = args;
334
353
  //If user leaves
335
354
  dispatch({
336
355
  type: 'UserOffline',
337
- value: args,
356
+ //@ts-ignore
357
+ value: remainingArgs,
338
358
  });
339
359
  });
340
360
 
341
- engine.current.addListener('RemoteAudioStateChanged', (...args) => {
361
+ engine.current.addListener('onRemoteAudioStateChanged', (...args) => {
362
+ const [, ...remainingArgs] = args;
342
363
  dispatch({
343
364
  type: 'RemoteAudioStateChanged',
344
- value: args,
365
+ //@ts-ignore
366
+ value: remainingArgs,
345
367
  });
346
368
  });
347
369
 
348
- engine.current.addListener('Error', (e) => {
370
+ engine.current.addListener('onError', (e) => {
349
371
  console.log('Error: ', e);
350
372
  });
351
373
 
352
- engine.current.addListener('RemoteVideoStateChanged', (...args) => {
374
+ engine.current.addListener('onRemoteVideoStateChanged', (...args) => {
375
+ const [, ...remainingArgs] = args;
353
376
  dispatch({
354
377
  type: 'RemoteVideoStateChanged',
355
- value: args,
356
- });
357
- });
358
-
359
- engine.current.addListener('AudioVolumeIndication', (...args) => {
360
- // console.log('-- AudioVolumeCallback', args);
361
- const [speakers, totalVolume] = args;
362
- if (speakers[0]?.uid === 0) {
363
- //callback for local user
364
- const isLocalUserSpeaking = speakers[0].vad; //1-speaking , 0-not speaking
365
- const localUserVolumeLevel = speakers[0].volume;
366
- // vad value is not consistent while speaking so using volume level
367
- if (localUserVolumeLevel > 0) {
368
- dispatch({
369
- type: 'ActiveSpeakerDetected',
370
- value: [rtcProps.uid],
371
- });
372
- } else {
373
- dispatch({
374
- type: 'ActiveSpeakerDetected',
375
- value: [undefined],
376
- });
377
- }
378
- } else {
379
- // remote users callback, this will be handeled in ActiveSpeaker callback(367)
380
- // const highestvolumeObj = speakers.reduce(function (prev, current) {
381
- // return prev.volume > current.volume ? prev : current;
382
- // }, null);
383
- }
384
- });
385
-
386
- engine.current.addListener('ActiveSpeaker', (...args) => {
387
- // used as a callback from the web bridge as well remote users
388
- dispatch({
389
- type: 'ActiveSpeakerDetected',
390
- value: args,
378
+ //@ts-ignore
379
+ value: remainingArgs,
391
380
  });
392
381
  });
393
382
 
@@ -401,25 +390,39 @@ const Create = ({
401
390
  init();
402
391
  }
403
392
  return () => {
393
+ if (Platform.OS !== 'web') {
394
+ // for web, events are cleared in release method
395
+ engine.current.removeAllListeners('onJoinChannelSuccess');
396
+ engine.current.removeAllListeners('onLeaveChannel');
397
+ engine.current.removeAllListeners('onUserJoined');
398
+ engine.current.removeAllListeners('onUserOffline');
399
+ engine.current.removeAllListeners('onRemoteVideoStateChanged');
400
+ engine.current.removeAllListeners('onRemoteAudioStateChanged');
401
+ engine.current.removeAllListeners('onError');
402
+ }
403
+
404
404
  /**
405
405
  * if condition add for websdk issue
406
406
  * For some reason even if engine.current is defined somehow destroy gets undefined and
407
407
  * causes a crash so thats why this check is needed before we call the method
408
408
  */
409
- if (engine.current.destroy) {
410
- engine.current!.destroy();
409
+ if (tracksReady || Platform.OS === 'web') {
410
+ engine.current.release();
411
411
  }
412
412
  };
413
- }, [rtcProps.appId, rtcProps.uid]);
413
+ // eslint-disable-next-line react-hooks/exhaustive-deps
414
+ }, [rtcProps?.appId, rtcProps?.uid]);
414
415
 
415
416
  useEffect(() => {
416
417
  const toggleRole = async () => {
417
418
  if (
418
- mode == ChannelProfile.LiveBroadcasting &&
419
+ mode === ChannelProfileType.ChannelProfileLiveBroadcasting &&
419
420
  engine.current.setClientRole // Check if engine initialized
420
421
  ) {
421
- if (rtcProps.role == ClientRole.Broadcaster) {
422
- await engine.current?.setClientRole(ClientRole.Broadcaster);
422
+ if (rtcProps?.role === ClientRoleType.ClientRoleBroadcaster) {
423
+ await engine.current?.setClientRole(
424
+ ClientRoleType.ClientRoleBroadcaster,
425
+ );
423
426
  // isVideoEnabledRef checks if the permission is already taken once
424
427
  if (!isVideoEnabledRef.current) {
425
428
  await enableVideoAndAudioWithDisabledState();
@@ -444,7 +447,7 @@ const Create = ({
444
447
  }
445
448
  }
446
449
  }
447
- if (rtcProps.role == ClientRole.Audience) {
450
+ if (rtcProps?.role === ClientRoleType.ClientRoleAudience) {
448
451
  /**
449
452
  * To switch the user role back to "audience", call unpublish first
450
453
  * Otherwise the setClientRole method call fails and throws an exception.
@@ -463,7 +466,9 @@ const Create = ({
463
466
  value: [ToggleState.disabled],
464
467
  });
465
468
  }
466
- await engine.current?.setClientRole(ClientRole.Audience);
469
+ await engine.current?.setClientRole(
470
+ ClientRoleType.ClientRoleAudience,
471
+ );
467
472
  }
468
473
  }
469
474
  };
@@ -473,7 +478,8 @@ const Create = ({
473
478
  return;
474
479
  }
475
480
  toggleRole();
476
- }, [rtcProps.role]);
481
+ // eslint-disable-next-line react-hooks/exhaustive-deps
482
+ }, [rtcProps?.role]);
477
483
 
478
484
  return (
479
485
  <>
@@ -1,20 +1,23 @@
1
1
  import React, {useEffect, useContext, useRef} from 'react';
2
- import RtcEngine from 'react-native-agora';
3
- import {RenderStateInterface, DispatchType} from '../Contexts/RtcContext';
2
+ import {IRtcEngine} from 'react-native-agora';
3
+ import {ContentStateInterface} from '../Contexts/RtcContext';
4
+ import {DispatchType} from '../Contexts/DispatchContext';
4
5
  import PropsContext, {ToggleState} from '../Contexts/PropsContext';
5
6
  import {Platform} from 'react-native';
6
7
 
7
8
  const Join: React.FC<{
8
9
  children: React.ReactNode;
9
10
  precall: boolean;
10
- engineRef: React.MutableRefObject<RtcEngine>;
11
- uidState: RenderStateInterface;
11
+ engineRef: React.MutableRefObject<IRtcEngine>;
12
+ uidState: ContentStateInterface;
12
13
  dispatch: DispatchType;
13
14
  tracksReady: boolean;
15
+ preventJoin?: boolean;
14
16
  }> = ({children, precall, engineRef, uidState, dispatch, tracksReady}) => {
15
17
  let joinState = useRef(false);
16
18
  const {rtcProps} = useContext(PropsContext);
17
- const {audioRoom = false} = rtcProps;
19
+
20
+ const audioRoom = rtcProps?.audioRoom || false;
18
21
  //commented for v1 release
19
22
  // const beforeJoin = rtcProps?.lifecycle?.useBeforeJoin
20
23
  // ? rtcProps.lifecycle.useBeforeJoin()
@@ -25,9 +28,14 @@ const Join: React.FC<{
25
28
  //@ts-ignore
26
29
  engineRef.current.publish();
27
30
  }
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
28
32
  }, [tracksReady]);
29
33
 
30
34
  useEffect(() => {
35
+ if (rtcProps?.preventJoin) {
36
+ return;
37
+ }
38
+
31
39
  const engine = engineRef.current;
32
40
  async function leave() {
33
41
  try {
@@ -38,20 +46,26 @@ const Join: React.FC<{
38
46
  console.error('Cannot leave the channel:', err);
39
47
  }
40
48
  }
41
- const {renderList, activeUids} = uidState;
49
+ const {defaultContent, activeUids} = uidState;
42
50
  const [maxUid] = activeUids;
43
- const videoState = renderList[maxUid].video;
51
+ const videoState = defaultContent[maxUid]?.video;
44
52
  async function join() {
45
53
  if (
46
- rtcProps.encryption &&
47
- rtcProps.encryption.key &&
48
- rtcProps.encryption.mode
54
+ rtcProps?.encryption &&
55
+ rtcProps?.encryption.key &&
56
+ rtcProps.encryption.mode &&
57
+ rtcProps.encryption.salt
49
58
  ) {
50
- console.log('using channel encryption', rtcProps.encryption);
51
- await engine.enableEncryption(true, {
52
- encryptionKey: rtcProps.encryption.key,
53
- encryptionMode: rtcProps.encryption.mode,
54
- });
59
+ try {
60
+ await engine.enableEncryption(true, {
61
+ encryptionKey: rtcProps?.encryption.key,
62
+ encryptionMode: rtcProps?.encryption.mode,
63
+ encryptionKdfSalt: rtcProps?.encryption.salt,
64
+ datastreamEncryptionEnabled: true,
65
+ });
66
+ } catch (error) {
67
+ console.warn('encryption error', error);
68
+ }
55
69
  }
56
70
  if (
57
71
  !audioRoom &&
@@ -76,13 +90,16 @@ const Join: React.FC<{
76
90
  // } catch (error) {
77
91
  // console.error('FPE:Error on executing useBeforeJoin', error);
78
92
  // }
79
-
80
- await engine.joinChannel(
81
- rtcProps.token || null,
82
- rtcProps.channel,
83
- null,
84
- rtcProps.uid || 0,
85
- );
93
+ try {
94
+ await engine.joinChannel(
95
+ rtcProps?.token || '',
96
+ rtcProps?.channel || '',
97
+ rtcProps?.uid || 0,
98
+ {},
99
+ );
100
+ } catch (error) {
101
+ console.error('RTC joinChannel error', error);
102
+ }
86
103
  if (
87
104
  !audioRoom &&
88
105
  videoState === ToggleState.enabled &&
@@ -108,7 +125,7 @@ const Join: React.FC<{
108
125
  await leave();
109
126
  await join();
110
127
  }
111
- console.log('Attempted join: ', rtcProps.channel);
128
+ console.log('Attempted join: ', rtcProps?.channel);
112
129
  } else {
113
130
  console.log('In precall - waiting to join');
114
131
  }
@@ -119,12 +136,14 @@ const Join: React.FC<{
119
136
  leave();
120
137
  }
121
138
  };
139
+ // eslint-disable-next-line react-hooks/exhaustive-deps
122
140
  }, [
123
- rtcProps.channel,
124
- rtcProps.uid,
125
- rtcProps.token,
141
+ rtcProps?.channel,
142
+ rtcProps?.uid,
143
+ rtcProps?.token,
126
144
  precall,
127
- rtcProps.encryption,
145
+ rtcProps?.encryption,
146
+ rtcProps?.preventJoin,
128
147
  ]);
129
148
 
130
149
  return <>{children}</>;