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