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,4 +1,11 @@
1
- import React, {createContext, useContext, useState, useRef} from 'react';
1
+ import React, {
2
+ createContext,
3
+ useContext,
4
+ useState,
5
+ useRef,
6
+ useCallback,
7
+ useEffect,
8
+ } from 'react';
2
9
  import {StyleSheet} from 'react-native';
3
10
  import ChatContext, {controlMessageEnum} from '../ChatContext';
4
11
  import Toast from '../../../react-native-toast-message';
@@ -11,31 +18,82 @@ import {
11
18
  RaiseHandValue,
12
19
  raiseHandListInterface,
13
20
  } from './Types';
14
- import {ClientRole, useLocalUid, UidType} from '../../../agora-rn-uikit';
21
+ import {ClientRoleType, useLocalUid, UidType} from '../../../agora-rn-uikit';
15
22
  import {filterObject, isEmptyObject} from '../../utils';
16
- import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
23
+ import {useRoomInfo} from '../room-info/useRoomInfo';
17
24
  import {useScreenshare} from '../../subComponents/screenshare/useScreenshare';
18
- import events, {EventPersistLevel} from '../../rtm-events-api';
25
+ import events, {PersistanceLevel} from '../../rtm-events-api';
19
26
  import {EventNames} from '../../rtm-events';
20
- import {SidePanelType, useRender, useSidePanel} from 'customization-api';
27
+ import {SidePanelType, useContent, useSidePanel} from 'customization-api';
21
28
  import TertiaryButton from '../../atoms/TertiaryButton';
22
29
  import PrimaryButton from '../../atoms/PrimaryButton';
23
30
  import {trimText} from '../../utils/common';
31
+ import {useStringRef} from '../../utils/useString';
32
+ import {
33
+ livestreamRequestAlreadyProcessed,
34
+ livestreamToastApprovalBtnText,
35
+ livestreamToastDenyBtnText,
36
+ } from '../../language/default-labels/videoCallScreenLabels';
24
37
 
25
38
  const LiveStreamContext = createContext(null as unknown as liveStreamContext);
26
39
 
27
40
  export const LiveStreamContextConsumer = LiveStreamContext.Consumer;
28
41
 
29
- export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
30
- props,
31
- ) => {
42
+ export const LiveStreamContextProvider: React.FC<
43
+ liveStreamPropsInterface
44
+ > = props => {
45
+ const requestAlreadyProcessed = useStringRef(
46
+ livestreamRequestAlreadyProcessed,
47
+ );
48
+
49
+ const raiseHandRequestReceivedToastHeading = useStringRef(
50
+ LSNotificationObject.RAISE_HAND_RECEIVED.text1TranslationKey,
51
+ );
52
+ const raiseHandRequestReceivedToastSubHeading = useStringRef(
53
+ LSNotificationObject.RAISE_HAND_RECEIVED.text2TranslationKey,
54
+ );
55
+
56
+ const raiseHandRequestRecallToastHeading = useStringRef(
57
+ LSNotificationObject.RAISE_HAND_REQUEST_RECALL.text1TranslationKey,
58
+ );
59
+
60
+ const raiseHandRequestAcceptedToastHeading = useStringRef(
61
+ LSNotificationObject.RAISE_HAND_ACCEPTED.text1TranslationKey,
62
+ );
63
+ const raiseHandRequestAcceptedToastSubHeading = useStringRef(
64
+ LSNotificationObject.RAISE_HAND_ACCEPTED.text2TranslationKey,
65
+ );
66
+
67
+ const raiseHandRequestRejectedToastHeading = useStringRef(
68
+ LSNotificationObject.RAISE_HAND_REJECTED.text1TranslationKey,
69
+ );
70
+
71
+ const raiseHandApprovedRequestRecallToastHeading = useStringRef(
72
+ LSNotificationObject.RAISE_HAND_APPROVED_REQUEST_RECALL.text1TranslationKey,
73
+ );
74
+
75
+ const promoteAsCoHostToastHeading = useStringRef(
76
+ LSNotificationObject.PROMOTE_AS_CO_HOST.text1TranslationKey,
77
+ );
78
+
79
+ const raiseHandRequestToastHeading = useStringRef(
80
+ LSNotificationObject.RAISE_HAND_REQUEST.text1TranslationKey,
81
+ );
82
+ const raiseHandRequestToastSubHeading = useStringRef(
83
+ LSNotificationObject.RAISE_HAND_REQUEST.text2TranslationKey,
84
+ );
85
+
86
+ const raiseHandRequestRecallLocalToastHeading = useStringRef(
87
+ LSNotificationObject.RAISE_HAND_REQUEST_RECALL_LOCAL.text1TranslationKey,
88
+ );
89
+
32
90
  const screenshareContextInstance = useScreenshare();
33
91
  const screenshareContextInstanceRef = useRef<any>();
34
92
  screenshareContextInstanceRef.current = screenshareContextInstance;
35
93
 
36
- const {renderList} = useRender();
37
- const renderListRef = useRef<any>();
38
- renderListRef.current = renderList;
94
+ const {defaultContent} = useContent();
95
+ const defaultContentRef = useRef<any>();
96
+ defaultContentRef.current = defaultContent;
39
97
 
40
98
  const [raiseHandList, setRaiseHandList] = useState<raiseHandListInterface>(
41
99
  {},
@@ -56,8 +114,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
56
114
  }, [sidePanel]);
57
115
 
58
116
  React.useEffect(() => {
59
- renderListRef.current = renderList;
60
- }, [renderList]);
117
+ defaultContentRef.current = defaultContent;
118
+ }, [defaultContent]);
61
119
 
62
120
  React.useEffect(() => {
63
121
  raiseHandListRef.current = raiseHandList;
@@ -75,7 +133,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
75
133
  let newRaiseHandList = raiseHandList;
76
134
  const data = Object.keys(
77
135
  filterObject(
78
- renderList,
136
+ defaultContent,
137
+ //@ts-ignore
79
138
  ([k, v]) => v?.type === 'rtc' && v.offline === true,
80
139
  ),
81
140
  );
@@ -91,7 +150,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
91
150
  setRaiseHandList(newRaiseHandList);
92
151
  }
93
152
  });
94
- }, [renderList]);
153
+ }, [defaultContent]);
95
154
 
96
155
  const localUid = useLocalUid();
97
156
  const localUidRef = useRef<any>();
@@ -102,7 +161,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
102
161
  const {setRtcProps, rtcProps, callActive} = props?.value;
103
162
  const {
104
163
  data: {isHost},
105
- } = useMeetingInfo();
164
+ } = useRoomInfo();
106
165
 
107
166
  const [lastCheckedRequestTimestamp, setLastCheckedRequestTimestamp] =
108
167
  useState(0);
@@ -112,6 +171,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
112
171
 
113
172
  const [isPendingRequestToReview, setPendingRequestToReview] = useState(false);
114
173
 
174
+ const allowToBePresenter = useStringRef(livestreamToastApprovalBtnText);
175
+ const deny = useStringRef(livestreamToastDenyBtnText);
115
176
  const showToast = (
116
177
  text: string,
117
178
  text2: string,
@@ -126,7 +187,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
126
187
  <PrimaryButton
127
188
  containerStyle={style.primaryBtn}
128
189
  textStyle={style.primaryBtnText}
129
- text="ALLOW TO BE A PRESENTER"
190
+ text={allowToBePresenter?.current()}
130
191
  onPress={() => {
131
192
  hostApprovesRequestOfUID(uid);
132
193
  Toast.hide();
@@ -136,7 +197,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
136
197
  btns.secondaryBtn = (
137
198
  <TertiaryButton
138
199
  containerStyle={style.secondaryBtn}
139
- text="DENY"
200
+ text={deny?.current()}
140
201
  onPress={() => {
141
202
  hostRejectsRequestOfUID(uid);
142
203
  Toast.hide();
@@ -149,6 +210,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
149
210
  }
150
211
 
151
212
  Toast.show({
213
+ leadingIconName: 'info',
152
214
  type: 'info',
153
215
  text1: text,
154
216
  text2: text2 ? text2 : null,
@@ -157,19 +219,19 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
157
219
  });
158
220
  };
159
221
 
160
- const updateRtcProps = (newClientRole: ClientRole) => {
222
+ const updateRtcProps = (newClientRole: ClientRoleType) => {
161
223
  setRtcProps((prevState: any) => ({
162
224
  ...prevState,
163
225
  role:
164
- newClientRole === ClientRole.Audience
165
- ? ClientRole.Audience
166
- : ClientRole.Broadcaster,
226
+ newClientRole === ClientRoleType.ClientRoleAudience
227
+ ? ClientRoleType.ClientRoleAudience
228
+ : ClientRoleType.ClientRoleBroadcaster,
167
229
  }));
168
230
  };
169
231
 
170
232
  const getAttendeeName = (uid: number | string) => {
171
- return renderListRef.current?.[uid]?.name
172
- ? renderListRef.current[uid].name
233
+ return defaultContentRef.current?.[uid]?.name
234
+ ? defaultContentRef.current[uid].name
173
235
  : 'user';
174
236
  };
175
237
 
@@ -179,7 +241,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
179
241
  ) => {
180
242
  if (userUID && !isEmptyObject(payload)) {
181
243
  const userId = `${userUID}`;
182
- setRaiseHandList((oldRaisedHandList) => ({
244
+ setRaiseHandList(oldRaisedHandList => ({
183
245
  ...oldRaisedHandList,
184
246
  [userId]: {
185
247
  raised: payload?.raised || RaiseHandValue.FALSE,
@@ -188,23 +250,23 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
188
250
  role:
189
251
  payload?.role ||
190
252
  oldRaisedHandList[userId]?.role ||
191
- ClientRole.Audience,
253
+ ClientRoleType.ClientRoleAudience,
192
254
  },
193
255
  }));
194
256
  }
195
257
  };
196
258
 
197
- const changeClientRoleTo = (newRole: ClientRole) => {
259
+ const changeClientRoleTo = (newRole: ClientRoleType) => {
198
260
  updateRtcProps(newRole);
199
261
  };
200
262
 
201
- const UpdtLocStateAndBCastAttr = (newRole: ClientRole, ts: number) => {
263
+ const UpdtLocStateAndBCastAttr = (newRole: ClientRoleType, ts: number) => {
202
264
  switch (newRole) {
203
- case ClientRole.Audience:
265
+ case ClientRoleType.ClientRoleAudience:
204
266
  addOrUpdateLiveStreamRequest(localUidRef.current, {
205
267
  raised: RaiseHandValue.FALSE,
206
268
  ts: ts,
207
- role: ClientRole.Audience,
269
+ role: ClientRoleType.ClientRoleAudience,
208
270
  });
209
271
  // Audience notfies all host when request is rejected
210
272
  events.send(
@@ -215,27 +277,27 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
215
277
  ts: new Date().getTime(),
216
278
  isProcessed: true,
217
279
  }),
218
- EventPersistLevel.LEVEL2,
280
+ PersistanceLevel.Sender,
219
281
  );
220
282
  //update local cohost state
221
- setCoHostUids((prevState) => {
283
+ setCoHostUids(prevState => {
222
284
  return [
223
- ...prevState.filter((i) => i !== parseInt(localUidRef.current)),
285
+ ...prevState.filter(i => i !== parseInt(localUidRef.current)),
224
286
  ];
225
287
  });
226
288
  // Audience notfies all users that co-host permission removed
227
289
  events.send(
228
290
  LiveStreamControlMessageEnum.coHostRemoved,
229
291
  JSON.stringify({uid: localUidRef.current}),
230
- EventPersistLevel.LEVEL2,
292
+ PersistanceLevel.Sender,
231
293
  );
232
294
  break;
233
- case ClientRole.Broadcaster:
295
+ case ClientRoleType.ClientRoleBroadcaster:
234
296
  // Update local state
235
297
  addOrUpdateLiveStreamRequest(localUidRef.current, {
236
298
  raised: RaiseHandValue.TRUE,
237
299
  ts: ts,
238
- role: ClientRole.Broadcaster,
300
+ role: ClientRoleType.ClientRoleBroadcaster,
239
301
  });
240
302
  // Audience notfies all host when request is approved
241
303
  events.send(
@@ -246,17 +308,17 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
246
308
  ts: new Date().getTime(),
247
309
  isProcessed: true,
248
310
  }),
249
- EventPersistLevel.LEVEL2,
311
+ PersistanceLevel.Sender,
250
312
  );
251
313
  //update local cohost state
252
- setCoHostUids((prevState) => {
314
+ setCoHostUids(prevState => {
253
315
  return [...prevState, localUidRef.current];
254
316
  });
255
317
  // Audience notfies all users that co-host has joined
256
318
  events.send(
257
319
  LiveStreamControlMessageEnum.coHostJoined,
258
320
  JSON.stringify({uid: localUidRef.current}),
259
- EventPersistLevel.LEVEL2,
321
+ PersistanceLevel.Sender,
260
322
  );
261
323
  default:
262
324
  break;
@@ -267,7 +329,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
267
329
  const pendingRequests = filterObject(
268
330
  raiseHandList,
269
331
  ([k, v]) =>
270
- v?.raised === RaiseHandValue.TRUE && v?.role == ClientRole.Audience,
332
+ v?.raised === RaiseHandValue.TRUE &&
333
+ v?.role == ClientRoleType.ClientRoleAudience,
271
334
  );
272
335
 
273
336
  React.useEffect(() => {
@@ -299,20 +362,24 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
299
362
 
300
363
  /** ******* SETTING UP ROLES BEGINS ******* */
301
364
  React.useEffect(() => {
302
- events.on(EventNames.ROLE_ATTRIBUTE, (data) => {
303
- setRaiseHandList((prevState) => {
365
+ const unsubRoleAttribute = events.on(EventNames.ROLE_ATTRIBUTE, data => {
366
+ setRaiseHandList(prevState => {
304
367
  return {
305
368
  ...prevState,
306
369
  [data.sender]: {
307
370
  ...prevState[data.sender],
308
371
  role:
309
- data.payload in ClientRole
372
+ data.payload in ClientRoleType
310
373
  ? parseInt(data.payload)
311
- : ClientRole.Audience,
374
+ : ClientRoleType.ClientRoleAudience,
312
375
  },
313
376
  };
314
377
  });
315
378
  });
379
+
380
+ return () => {
381
+ unsubRoleAttribute();
382
+ };
316
383
  }, []);
317
384
 
318
385
  React.useEffect(() => {
@@ -320,17 +387,21 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
320
387
  events.send(
321
388
  EventNames.ROLE_ATTRIBUTE,
322
389
  JSON.stringify(
323
- rtcProps.role in ClientRole ? rtcProps.role : ClientRole.Audience,
390
+ rtcProps.role in ClientRoleType
391
+ ? rtcProps.role
392
+ : ClientRoleType.ClientRoleAudience,
324
393
  ),
325
- EventPersistLevel.LEVEL2,
394
+ PersistanceLevel.Sender,
326
395
  );
327
- setRaiseHandList((prevState) => {
396
+ setRaiseHandList(prevState => {
328
397
  return {
329
398
  ...prevState,
330
399
  [localUid]: {
331
400
  ...prevState[localUid],
332
401
  role:
333
- rtcProps.role in ClientRole ? rtcProps.role : ClientRole.Audience,
402
+ rtcProps.role in ClientRoleType
403
+ ? rtcProps.role
404
+ : ClientRoleType.ClientRoleAudience,
334
405
  },
335
406
  };
336
407
  });
@@ -342,178 +413,200 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
342
413
 
343
414
  React.useEffect(() => {
344
415
  /** ********************** HOST EVENTS SECTION BEGINS ********************** */
345
- events.on(EventNames.RAISED_ATTRIBUTE, (data) => {
346
- if (!isHost) return;
347
- const payload = JSON.parse(data.payload);
348
- const action = payload.action;
349
- const value = payload.value;
350
- const isProcessed = payload?.isProcessed || false;
351
-
352
- switch (action) {
353
- // 1. Host can receive raise hand request with true or false value
354
- case LiveStreamControlMessageEnum.raiseHandRequest:
355
- switch (value) {
356
- case RaiseHandValue.TRUE:
357
- // Step 1: Show notifications
358
- if (
359
- payload.ts > rtmInitTimstamp &&
360
- sidePanelRef.current !== SidePanelType.Participants
361
- ) {
362
- showToast(
363
- `${trimText(getAttendeeName(data.sender))} ${
364
- LSNotificationObject.RAISE_HAND_RECEIVED.text1
365
- }`,
366
- LSNotificationObject.RAISE_HAND_RECEIVED.text2,
367
- data.sender,
368
- data.ts,
369
- );
370
- }
371
- // 2. All Hosts in channel update their raised state to "true" when attendee raise their hand
372
- addOrUpdateLiveStreamRequest(data.sender, {
373
- ts: data.ts,
374
- raised: RaiseHandValue.TRUE,
375
- role: ClientRole.Audience,
376
- isProcessed: isProcessed,
377
- });
378
- break;
379
- case RaiseHandValue.FALSE:
380
- // Step 1: Show notifications
381
- if (
382
- payload.ts > rtmInitTimstamp &&
383
- sidePanelRef.current !== SidePanelType.Participants
384
- ) {
385
- showToast(
386
- `${trimText(getAttendeeName(data.sender))} ${
387
- LSNotificationObject.RAISE_HAND_REQUEST_RECALL.text1
388
- }`,
389
- LSNotificationObject.RAISE_HAND_REQUEST_RECALL.text2,
390
- );
391
- }
392
- // 2. All Hosts in channel update raised state to "false" when attendee recalls their request
393
- addOrUpdateLiveStreamRequest(data.sender, {
394
- ts: data.ts,
395
- raised: RaiseHandValue.FALSE,
396
- role: ClientRole.Audience,
397
- isProcessed: isProcessed,
398
- });
399
- default:
400
- break;
401
- }
402
- break;
403
- // 2. All Hosts in channel gets notified when an attendee's request gets approved or rejected
404
- case LiveStreamControlMessageEnum.notifyHostsInChannel:
405
- if (!isHost) return;
406
- switch (value) {
407
- case RaiseHandValue.TRUE:
408
- addOrUpdateLiveStreamRequest(data.sender, {
409
- ts: data.ts,
410
- raised: RaiseHandValue.TRUE,
411
- role: ClientRole.Broadcaster,
412
- isProcessed: isProcessed,
413
- });
414
- break;
415
- case RaiseHandValue.FALSE:
416
- addOrUpdateLiveStreamRequest(data.sender, {
417
- ts: data.ts,
418
- raised: RaiseHandValue.FALSE,
419
- role: ClientRole.Audience,
420
- isProcessed: isProcessed,
421
- });
422
- break;
423
- default:
424
- break;
425
- }
426
- break;
427
- default:
428
- break;
429
- }
430
- });
416
+ const unsubRaisedAttribute = events.on(
417
+ EventNames.RAISED_ATTRIBUTE,
418
+ data => {
419
+ if (!isHost) return;
420
+ const payload = JSON.parse(data.payload);
421
+ const action = payload.action;
422
+ const value = payload.value;
423
+ const isProcessed = payload?.isProcessed || false;
424
+
425
+ switch (action) {
426
+ // 1. Host can receive raise hand request with true or false value
427
+ case LiveStreamControlMessageEnum.raiseHandRequest:
428
+ switch (value) {
429
+ case RaiseHandValue.TRUE:
430
+ // Step 1: Show notifications
431
+ if (
432
+ payload.ts > rtmInitTimstamp &&
433
+ sidePanelRef.current !== SidePanelType.Participants
434
+ ) {
435
+ showToast(
436
+ raiseHandRequestReceivedToastHeading?.current(
437
+ trimText(getAttendeeName(data.sender)),
438
+ ),
439
+ raiseHandRequestReceivedToastSubHeading?.current(),
440
+ data.sender,
441
+ data.ts,
442
+ );
443
+ }
444
+ // 2. All Hosts in channel update their raised state to "true" when attendee raise their hand
445
+ addOrUpdateLiveStreamRequest(data.sender, {
446
+ ts: data.ts,
447
+ raised: RaiseHandValue.TRUE,
448
+ role: ClientRoleType.ClientRoleAudience,
449
+ isProcessed: isProcessed,
450
+ });
451
+ break;
452
+ case RaiseHandValue.FALSE:
453
+ // Step 1: Show notifications
454
+ if (
455
+ payload.ts > rtmInitTimstamp &&
456
+ sidePanelRef.current !== SidePanelType.Participants
457
+ ) {
458
+ showToast(
459
+ raiseHandRequestRecallToastHeading?.current(
460
+ trimText(getAttendeeName(data.sender)),
461
+ ),
462
+ null,
463
+ );
464
+ }
465
+ // 2. All Hosts in channel update raised state to "false" when attendee recalls their request
466
+ addOrUpdateLiveStreamRequest(data.sender, {
467
+ ts: data.ts,
468
+ raised: RaiseHandValue.FALSE,
469
+ role: ClientRoleType.ClientRoleAudience,
470
+ isProcessed: isProcessed,
471
+ });
472
+ default:
473
+ break;
474
+ }
475
+ break;
476
+ // 2. All Hosts in channel gets notified when an attendee's request gets approved or rejected
477
+ case LiveStreamControlMessageEnum.notifyHostsInChannel:
478
+ if (!isHost) return;
479
+ switch (value) {
480
+ case RaiseHandValue.TRUE:
481
+ addOrUpdateLiveStreamRequest(data.sender, {
482
+ ts: data.ts,
483
+ raised: RaiseHandValue.TRUE,
484
+ role: ClientRoleType.ClientRoleBroadcaster,
485
+ isProcessed: isProcessed,
486
+ });
487
+ break;
488
+ case RaiseHandValue.FALSE:
489
+ addOrUpdateLiveStreamRequest(data.sender, {
490
+ ts: data.ts,
491
+ raised: RaiseHandValue.FALSE,
492
+ role: ClientRoleType.ClientRoleAudience,
493
+ isProcessed: isProcessed,
494
+ });
495
+ break;
496
+ default:
497
+ break;
498
+ }
499
+ break;
500
+ default:
501
+ break;
502
+ }
503
+ },
504
+ );
431
505
  /** ********************** HOST EVENTS SECTION ENDS ********************** */
432
506
 
433
507
  /** ********************** AUDIENCE EVENTS SECTION BEGINS ********************** */
434
508
  // 1. Audience receives this when the request is accepted by host
435
- events.on(LiveStreamControlMessageEnum.raiseHandRequestAccepted, (data) => {
436
- if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.FALSE)
437
- return;
438
- showToast(
439
- LSNotificationObject.RAISE_HAND_ACCEPTED.text1,
440
- LSNotificationObject.RAISE_HAND_ACCEPTED.text2,
441
- );
442
- // Promote user's privileges to host
443
- changeClientRoleTo(ClientRole.Broadcaster);
444
- // Audience updates its local attributes and notfies all host when request is approved
445
- UpdtLocStateAndBCastAttr(ClientRole.Broadcaster, data.ts);
446
- });
509
+ const unsubRaiseHandReqAcpt = events.on(
510
+ LiveStreamControlMessageEnum.raiseHandRequestAccepted,
511
+ data => {
512
+ if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.FALSE)
513
+ return;
514
+ showToast(
515
+ raiseHandRequestAcceptedToastHeading?.current(),
516
+ raiseHandRequestAcceptedToastSubHeading?.current(),
517
+ );
518
+ // Promote user's privileges to host
519
+ changeClientRoleTo(ClientRoleType.ClientRoleBroadcaster);
520
+ // Audience updates its local attributes and notfies all host when request is approved
521
+ UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleBroadcaster, data.ts);
522
+ },
523
+ );
447
524
  /** 2. Audience receives this when the request is rejected by host
448
525
  * 2.a Audience receives this when the request is rejected by host which is not yet approved
449
526
  * 2.b Audience receives this when the request when is demoted by the host
450
527
  */
451
- events.on(LiveStreamControlMessageEnum.raiseHandRequestRejected, (data) => {
452
- /** 2.a */
453
- if (
454
- raiseHandListRef.current[localUidRef.current].role ==
455
- ClientRole.Audience
456
- ) {
457
- showToast(
458
- LSNotificationObject.RAISE_HAND_REJECTED.text1,
459
- LSNotificationObject.RAISE_HAND_REJECTED.text2,
460
- );
461
- } else if (
462
- raiseHandListRef.current[localUidRef.current].role ==
463
- ClientRole.Broadcaster
464
- ) {
465
- /** 2.b */
466
- showToast(
467
- LSNotificationObject.RAISE_HAND_APPROVED_REQUEST_RECALL.text1,
468
- LSNotificationObject.RAISE_HAND_APPROVED_REQUEST_RECALL.text2,
469
- );
470
- screenshareContextInstanceRef?.current?.stopUserScreenShare(); // This will not exist on ios
471
-
472
- // Demote user's privileges to audience
473
- changeClientRoleTo(ClientRole.Audience);
474
- }
475
- // Audience updates its local attributes and notfies all host when demoted/request rejected
476
- UpdtLocStateAndBCastAttr(ClientRole.Audience, data.ts);
477
- });
528
+ const unsubRaiseHandReqRej = events.on(
529
+ LiveStreamControlMessageEnum.raiseHandRequestRejected,
530
+ data => {
531
+ /** 2.a */
532
+ if (
533
+ raiseHandListRef.current[localUidRef.current].role ==
534
+ ClientRoleType.ClientRoleAudience
535
+ ) {
536
+ showToast(raiseHandRequestRejectedToastHeading?.current(), null);
537
+ } else if (
538
+ raiseHandListRef.current[localUidRef.current].role ==
539
+ ClientRoleType.ClientRoleBroadcaster
540
+ ) {
541
+ /** 2.b */
542
+ showToast(
543
+ raiseHandApprovedRequestRecallToastHeading?.current(),
544
+ null,
545
+ );
546
+ screenshareContextInstanceRef?.current?.stopUserScreenShare(); // This will not exist on ios
547
+
548
+ // Demote user's privileges to audience
549
+ changeClientRoleTo(ClientRoleType.ClientRoleAudience);
550
+ }
551
+ // Audience updates its local attributes and notfies all host when demoted/request rejected
552
+ UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleAudience, data.ts);
553
+ },
554
+ );
478
555
  // 3. Audience when receives kickUser notifies all host when is kicked out
479
- events.on(controlMessageEnum.kickUser, (data) => {
556
+ const unsubKickUser = events.on(controlMessageEnum.kickUser, data => {
480
557
  // Audience updates its local attributes and notfies all host when they(audience) are kicked out
481
- UpdtLocStateAndBCastAttr(ClientRole.Audience, data.ts);
558
+ UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleAudience, data.ts);
482
559
  });
483
560
  // 4. Host promote audience as co-host
484
- events.on(LiveStreamControlMessageEnum.promoteAsCoHost, (data) => {
485
- showToast(
486
- LSNotificationObject.PROMOTE_AS_CO_HOST.text1,
487
- LSNotificationObject.PROMOTE_AS_CO_HOST.text2,
488
- );
489
- // Promote user's privileges to host
490
- changeClientRoleTo(ClientRole.Broadcaster);
491
- // Audience updates its local attributes and notfies all host when request is approved
492
- UpdtLocStateAndBCastAttr(ClientRole.Broadcaster, data.ts);
493
- });
561
+ const unsubPromoteAsCoHost = events.on(
562
+ LiveStreamControlMessageEnum.promoteAsCoHost,
563
+ data => {
564
+ showToast(promoteAsCoHostToastHeading.current(), null);
565
+ // Promote user's privileges to host
566
+ changeClientRoleTo(ClientRoleType.ClientRoleBroadcaster);
567
+ // Audience updates its local attributes and notfies all host when request is approved
568
+ UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleBroadcaster, data.ts);
569
+ },
570
+ );
494
571
  // 4. New co-host has joined
495
- events.on(LiveStreamControlMessageEnum.coHostJoined, ({payload}) => {
496
- try {
497
- const data = JSON.parse(payload);
498
- if (data?.uid) {
499
- setCoHostUids((prevState) => {
500
- return [...prevState, parseInt(data.uid)];
501
- });
502
- }
503
- } catch (error) {}
504
- });
572
+ const unsubCoHostJoined = events.on(
573
+ LiveStreamControlMessageEnum.coHostJoined,
574
+ ({payload}) => {
575
+ try {
576
+ const data = JSON.parse(payload);
577
+ if (data?.uid) {
578
+ setCoHostUids(prevState => {
579
+ return [...prevState, parseInt(data.uid)];
580
+ });
581
+ }
582
+ } catch (error) {}
583
+ },
584
+ );
505
585
  // 5. Co-host removed
506
- events.on(LiveStreamControlMessageEnum.coHostRemoved, ({payload}) => {
507
- try {
508
- const data = JSON.parse(payload);
509
- if (data?.uid) {
510
- setCoHostUids((prevState) => {
511
- return [...prevState.filter((i) => i !== parseInt(data.uid))];
512
- });
513
- }
514
- } catch (error) {}
515
- });
586
+ const unsubCoHostRemoved = events.on(
587
+ LiveStreamControlMessageEnum.coHostRemoved,
588
+ ({payload}) => {
589
+ try {
590
+ const data = JSON.parse(payload);
591
+ if (data?.uid) {
592
+ setCoHostUids(prevState => {
593
+ return [...prevState.filter(i => i !== parseInt(data.uid))];
594
+ });
595
+ }
596
+ } catch (error) {}
597
+ },
598
+ );
516
599
  /** ********************** AUDIENCE EVENTS SECTION ENDS ********************** */
600
+
601
+ return () => {
602
+ unsubRaisedAttribute();
603
+ unsubRaiseHandReqAcpt();
604
+ unsubRaiseHandReqRej();
605
+ unsubKickUser();
606
+ unsubPromoteAsCoHost();
607
+ unsubCoHostJoined();
608
+ unsubCoHostRemoved();
609
+ };
517
610
  }, []);
518
611
 
519
612
  /** ******* EVENT LISTENERS SECTION ENDS ******* */
@@ -534,13 +627,13 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
534
627
  events.send(
535
628
  LiveStreamControlMessageEnum.raiseHandRequestAccepted,
536
629
  '',
537
- EventPersistLevel.LEVEL1,
630
+ PersistanceLevel.None,
538
631
  uid,
539
632
  );
540
633
  } else {
541
634
  Toast.hide();
542
635
  setTimeout(() => {
543
- showToast('Request already processed.', null);
636
+ showToast(requestAlreadyProcessed?.current(), null);
544
637
  });
545
638
  }
546
639
  };
@@ -555,13 +648,13 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
555
648
  events.send(
556
649
  LiveStreamControlMessageEnum.raiseHandRequestRejected,
557
650
  '',
558
- EventPersistLevel.LEVEL1,
651
+ PersistanceLevel.None,
559
652
  uid,
560
653
  );
561
654
  } else {
562
655
  Toast.hide();
563
656
  setTimeout(() => {
564
- showToast('Request already processed.', null);
657
+ showToast(requestAlreadyProcessed?.current(), null);
565
658
  });
566
659
  }
567
660
  };
@@ -571,7 +664,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
571
664
  events.send(
572
665
  LiveStreamControlMessageEnum.promoteAsCoHost,
573
666
  '',
574
- EventPersistLevel.LEVEL1,
667
+ PersistanceLevel.None,
575
668
  uid,
576
669
  );
577
670
  };
@@ -590,8 +683,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
590
683
  if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.TRUE)
591
684
  return;
592
685
  showToast(
593
- LSNotificationObject.RAISE_HAND_REQUEST.text1,
594
- LSNotificationObject.RAISE_HAND_REQUEST.text2,
686
+ raiseHandRequestToastHeading?.current(),
687
+ raiseHandRequestToastSubHeading?.current(),
595
688
  );
596
689
  events.send(
597
690
  EventNames.RAISED_ATTRIBUTE,
@@ -601,7 +694,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
601
694
  ts: new Date().getTime(),
602
695
  isProcessed: false,
603
696
  }),
604
- EventPersistLevel.LEVEL2,
697
+ PersistanceLevel.Sender,
605
698
  );
606
699
  // Update local state
607
700
  addOrUpdateLiveStreamRequest(localUidRef.current, {
@@ -619,12 +712,13 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
619
712
  * else: Audience Request was not approved by host, and was pending
620
713
  */
621
714
  if (
622
- raiseHandList[localUidRef.current]?.role == ClientRole.Broadcaster &&
715
+ raiseHandList[localUidRef.current]?.role ==
716
+ ClientRoleType.ClientRoleBroadcaster &&
623
717
  raiseHandList[localUidRef.current]?.raised === RaiseHandValue.TRUE
624
718
  ) {
625
719
  screenshareContextInstanceRef?.current?.stopUserScreenShare(); // This will not exist on ios
626
720
  // Change role
627
- changeClientRoleTo(ClientRole.Audience);
721
+ changeClientRoleTo(ClientRoleType.ClientRoleAudience);
628
722
  }
629
723
  //notify host users
630
724
  events.send(
@@ -635,13 +729,13 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
635
729
  ts: new Date().getTime(),
636
730
  isProcessed: true,
637
731
  }),
638
- EventPersistLevel.LEVEL2,
732
+ PersistanceLevel.Sender,
639
733
  );
640
- UpdtLocStateAndBCastAttr(ClientRole.Audience, new Date().getTime());
641
- showToast(
642
- LSNotificationObject.RAISE_HAND_REQUEST_RECALL_LOCAL.text1,
643
- LSNotificationObject.RAISE_HAND_REQUEST_RECALL_LOCAL.text2,
734
+ UpdtLocStateAndBCastAttr(
735
+ ClientRoleType.ClientRoleAudience,
736
+ new Date().getTime(),
644
737
  );
738
+ showToast(raiseHandRequestRecallLocalToastHeading?.current(), null);
645
739
  };
646
740
 
647
741
  /** ******* AUDIENCE CONTROLS SECTION ENDS ******* */