agora-appbuilder-core 4.0.0-api.5 → 4.0.0-api.6

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 (406) hide show
  1. package/package.json +2 -2
  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 +26471 -22749
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +30 -10
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +19 -0
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  12. package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  14. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +1 -0
  16. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +1 -0
  17. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +1 -0
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +1 -0
  21. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +3 -1
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +3 -1
  24. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +1 -1
  25. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +3 -3
  26. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +5 -4
  27. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -1
  28. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +8 -5
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -1
  30. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -1
  31. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -1
  32. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +18 -1
  33. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  34. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  35. package/template/agora-rn-uikit/src/Rtc/Create.tsx +47 -21
  36. package/template/agora-rn-uikit/src/Rtc/Join.tsx +37 -15
  37. package/template/agora-rn-uikit/src/RtcConfigure.tsx +122 -12
  38. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +32 -4
  39. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +21 -2
  40. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -0
  41. package/template/android/app/build.gradle +59 -156
  42. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  43. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  44. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  45. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  46. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  47. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +19 -36
  48. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  49. package/template/android/build.gradle +19 -33
  50. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  51. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  52. package/template/android/gradle.properties +18 -4
  53. package/template/android/gradlew +165 -104
  54. package/template/android/gradlew.bat +12 -23
  55. package/template/android/settings.gradle +1 -0
  56. package/template/bridge/rtc/webNg/RtcEngine.ts +131 -16
  57. package/template/bridge/rtc/webNg/index.ts +72 -1
  58. package/template/bridge/rtm/web/index.ts +5 -3
  59. package/template/configTransform.js +16 -1
  60. package/template/customization-api/action-library.ts +0 -8
  61. package/template/customization-api/app-state.ts +11 -2
  62. package/template/customization-api/customEvents.ts +6 -1
  63. package/template/customization-api/index.ts +4 -0
  64. package/template/customization-api/sub-components.ts +6 -3
  65. package/template/customization-api/temp.ts +50 -0
  66. package/template/customization-api/typeDefinition.ts +26 -14
  67. package/template/customization-api/types.ts +26 -0
  68. package/template/customization-api/utils.ts +2 -0
  69. package/template/customization-implementation/index.ts +0 -1
  70. package/template/defaultConfig.js +72 -0
  71. package/template/global.d.ts +13 -1
  72. package/template/index.js +0 -4
  73. package/template/index.web.js +0 -5
  74. package/template/index.wsdk.tsx +1 -19
  75. package/template/ios/.xcode.env +11 -0
  76. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  77. package/template/ios/HelloWorld/AppDelegate.mm +42 -0
  78. package/template/ios/HelloWorld/Info.plist +1 -1
  79. package/template/ios/HelloWorld/main.m +2 -1
  80. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +529 -17
  81. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  82. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  83. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  85. package/template/ios/HelloWorldTests/Info.plist +2 -2
  86. package/template/ios/Podfile +53 -20
  87. package/template/ios/Podfile.lock +873 -0
  88. package/template/ios/ScreenSharing/Info.plist +15 -0
  89. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  90. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  91. package/template/jest.config.js +4 -0
  92. package/template/metro.config.js +7 -32
  93. package/template/package.json +52 -39
  94. package/template/react-native-toast-message/index.d.ts +3 -1
  95. package/template/react-native-toast-message/index.js +1 -0
  96. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  97. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  98. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  99. package/template/react-native-toast-message/src/index.js +3 -1
  100. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  101. package/template/src/App.tsx +13 -85
  102. package/template/src/AppRoutes.tsx +77 -0
  103. package/template/src/AppWrapper.tsx +38 -33
  104. package/template/src/SDKAppWrapper.tsx +79 -43
  105. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  106. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  107. package/template/src/app-state/useVideoQuality.tsx +39 -0
  108. package/template/src/assets/font-styles.css +171 -3
  109. package/template/src/assets/fonts/icomoon.ttf +0 -0
  110. package/template/src/assets/selection.json +1 -1
  111. package/template/src/atoms/ActionMenu.tsx +50 -11
  112. package/template/src/atoms/Avatar.tsx +51 -0
  113. package/template/src/atoms/Card.tsx +21 -8
  114. package/template/src/atoms/Carousel.native.tsx +105 -0
  115. package/template/src/atoms/Carousel.tsx +103 -0
  116. package/template/src/atoms/Checkbox.tsx +98 -0
  117. package/template/src/atoms/CircularProgress.tsx +0 -1
  118. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  119. package/template/src/atoms/CustomIcon.tsx +45 -0
  120. package/template/src/atoms/DropDownMulti.tsx +349 -0
  121. package/template/src/atoms/Dropdown.tsx +3 -3
  122. package/template/src/atoms/IconButton.tsx +52 -9
  123. package/template/src/atoms/ImageIcon.tsx +6 -3
  124. package/template/src/atoms/InlineNotification.tsx +81 -0
  125. package/template/src/atoms/MeetingLink.tsx +160 -0
  126. package/template/src/atoms/ParticipantsCount.tsx +18 -7
  127. package/template/src/atoms/Popup.tsx +49 -27
  128. package/template/src/atoms/PrimaryButton.tsx +19 -5
  129. package/template/src/atoms/RecordingInfo.tsx +2 -2
  130. package/template/src/atoms/SecondaryButton.tsx +2 -0
  131. package/template/src/atoms/Spacer.tsx +1 -0
  132. package/template/src/atoms/TertiaryButton.tsx +35 -5
  133. package/template/src/atoms/TextInput.tsx +2 -1
  134. package/template/src/atoms/Toolbar.tsx +64 -30
  135. package/template/src/atoms/ToolbarItem.tsx +11 -5
  136. package/template/src/atoms/ToolbarPreset.tsx +13 -2
  137. package/template/src/atoms/Tooltip.tsx +26 -4
  138. package/template/src/auth/AuthProvider.tsx +500 -0
  139. package/template/src/auth/AuthRoute.tsx +94 -0
  140. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  141. package/template/src/auth/IDPAuth.tsx +67 -0
  142. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  143. package/template/src/auth/UserCancelPopup.tsx +115 -0
  144. package/template/src/auth/config.ts +52 -0
  145. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  146. package/template/src/auth/openIDPURL.native.tsx +51 -0
  147. package/template/src/auth/openIDPURL.tsx +20 -0
  148. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  149. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  150. package/template/src/auth/useIDPAuth.tsx +63 -0
  151. package/template/src/auth/useTokenAuth.tsx +194 -0
  152. package/template/src/components/Chat.tsx +5 -8
  153. package/template/src/components/ChatContext.ts +4 -0
  154. package/template/src/components/ColorConfigure.tsx +0 -1
  155. package/template/src/components/CommonStyles.ts +9 -2
  156. package/template/src/components/Controls.tsx +659 -52
  157. package/template/src/components/DeviceConfigure.tsx +362 -156
  158. package/template/src/components/DeviceContext.tsx +2 -0
  159. package/template/src/components/EventsConfigure.tsx +713 -109
  160. package/template/src/components/GraphQLProvider.tsx +62 -36
  161. package/template/src/components/GridVideo.tsx +23 -13
  162. package/template/src/components/HostControlView.tsx +11 -14
  163. package/template/src/components/JoinPhrase.tsx +0 -1
  164. package/template/src/components/Leftbar.tsx +4 -3
  165. package/template/src/components/Navbar.tsx +110 -42
  166. package/template/src/components/NavbarMobile.tsx +47 -36
  167. package/template/src/components/Navigation.native.tsx +1 -15
  168. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → components/Navigation.sdk.tsx} +17 -3
  169. package/template/src/components/Navigation.tsx +1 -15
  170. package/template/src/components/ParticipantsView.tsx +56 -48
  171. package/template/src/components/PinnedVideo.tsx +188 -114
  172. package/template/src/components/Precall.native.tsx +169 -67
  173. package/template/src/components/Precall.tsx +237 -71
  174. package/template/src/components/RTMConfigure.tsx +167 -55
  175. package/template/src/components/Rightbar.tsx +4 -3
  176. package/template/src/components/Router.electron.ts +1 -0
  177. package/template/src/components/Router.native.ts +1 -0
  178. package/template/src/components/Router.sdk.ts +1 -0
  179. package/template/src/components/Router.ts +1 -0
  180. package/template/src/components/SdkApiContext.tsx +179 -27
  181. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  182. package/template/src/components/SessionContext.tsx +0 -1
  183. package/template/src/components/Settings.tsx +25 -3
  184. package/template/src/components/SettingsView.tsx +44 -9
  185. package/template/src/components/Share.tsx +149 -71
  186. package/template/src/components/StorageContext.tsx +19 -5
  187. package/template/src/components/ToastComponent.tsx +3 -0
  188. package/template/src/components/WhiteboardLayout.tsx +291 -0
  189. package/template/src/components/chat-messages/useChatMessages.tsx +420 -207
  190. package/template/src/components/common/Error.tsx +2 -0
  191. package/template/src/components/common/Logo.tsx +2 -2
  192. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -4
  193. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  194. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  195. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  196. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  197. package/template/src/components/livestream/LiveStreamContext.tsx +262 -177
  198. package/template/src/components/livestream/Types.ts +34 -18
  199. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  200. package/template/src/components/livestream/views/LiveStreamControls.tsx +2 -4
  201. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  202. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  203. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  204. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  205. package/template/src/components/participants/AllAudienceParticipants.tsx +4 -5
  206. package/template/src/components/participants/AllHostParticipants.tsx +5 -6
  207. package/template/src/components/participants/Participant.tsx +40 -9
  208. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  209. package/template/src/components/participants/ScreenshareParticipants.tsx +15 -17
  210. package/template/src/components/participants/UserActionMenuOptions.tsx +157 -49
  211. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  212. package/template/src/components/popups/InvitePopup.tsx +110 -45
  213. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  214. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  215. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  216. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  217. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  218. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  219. package/template/src/components/precall/LocalMute.tsx +69 -45
  220. package/template/src/components/precall/PermissionHelper.tsx +52 -24
  221. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  222. package/template/src/components/precall/VideoFallback.tsx +173 -0
  223. package/template/src/components/precall/VideoPreview.native.tsx +16 -50
  224. package/template/src/components/precall/VideoPreview.tsx +27 -162
  225. package/template/src/components/precall/index.tsx +2 -0
  226. package/template/src/components/precall/joinCallBtn.native.tsx +10 -3
  227. package/template/src/components/precall/joinCallBtn.tsx +11 -2
  228. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  229. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  230. package/template/src/components/precall/meetingTitle.tsx +35 -9
  231. package/template/src/components/precall/selectDevice.tsx +5 -5
  232. package/template/src/components/precall/textInput.tsx +16 -18
  233. package/template/src/components/precall/usePreCall.tsx +14 -4
  234. package/template/src/components/room-info/useRoomInfo.tsx +34 -0
  235. package/template/src/components/useShareLink.tsx +24 -59
  236. package/template/src/components/useUserPreference.tsx +73 -10
  237. package/template/src/components/useVideoCall.tsx +76 -3
  238. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  239. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  240. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  241. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  242. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  243. package/template/src/components/virtual-background/VButils.ts +104 -0
  244. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  245. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  246. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  247. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  248. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  249. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  250. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  251. package/template/src/components/virtual-background/images/index.ts +37 -0
  252. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  253. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  254. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  255. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  256. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  257. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  258. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  259. package/template/src/components/virtual-background/useVB.native.tsx +188 -0
  260. package/template/src/components/virtual-background/useVB.tsx +267 -0
  261. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  262. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  263. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  264. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +137 -0
  265. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +441 -0
  266. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  267. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  268. package/template/src/components/whiteboard/WhiteboardView.native.tsx +109 -0
  269. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  270. package/template/src/components/whiteboard/WhiteboardWidget.tsx +674 -0
  271. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  272. package/template/src/language/default-labels/commonLabels.ts +51 -14
  273. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  274. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  275. package/template/src/language/default-labels/precallScreenLabels.ts +145 -23
  276. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  277. package/template/src/language/default-labels/videoCallScreenLabels.ts +1137 -158
  278. package/template/src/pages/Create.tsx +125 -80
  279. package/template/src/pages/Join.tsx +76 -34
  280. package/template/src/pages/Login.tsx +26 -0
  281. package/template/src/pages/VideoCall.tsx +229 -114
  282. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -7
  283. package/template/src/pages/video-call/ActionSheet.tsx +55 -16
  284. package/template/src/pages/video-call/ActionSheetContent.tsx +366 -291
  285. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  286. package/template/src/pages/video-call/DefaultLayouts.ts +11 -5
  287. package/template/src/pages/video-call/NameWithMicIcon.tsx +17 -9
  288. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  289. package/template/src/pages/video-call/RenderComponent.tsx +12 -3
  290. package/template/src/pages/video-call/SidePanelHeader.tsx +208 -6
  291. package/template/src/pages/video-call/VideoCallMobileView.tsx +140 -106
  292. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  293. package/template/src/pages/video-call/VideoCallScreen.tsx +113 -66
  294. package/template/src/pages/video-call/VideoComponent.tsx +53 -5
  295. package/template/src/pages/video-call/VideoRenderer.tsx +309 -52
  296. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  297. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  298. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  299. package/template/src/pages/video-call/index.ts +2 -0
  300. package/template/src/rtm/RTMEngine.ts +9 -4
  301. package/template/src/rtm-events/constants.ts +20 -0
  302. package/template/src/rtm-events-api/Events.ts +2 -0
  303. package/template/src/rtm-events-api/LocalEvents.ts +8 -0
  304. package/template/src/selection.json +1 -0
  305. package/template/src/subComponents/ChatBubble.tsx +81 -64
  306. package/template/src/subComponents/ChatContainer.tsx +20 -13
  307. package/template/src/subComponents/ChatInput.ios.tsx +11 -2
  308. package/template/src/subComponents/ChatInput.tsx +12 -3
  309. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  310. package/template/src/subComponents/Checkbox.tsx +7 -6
  311. package/template/src/subComponents/CopyJoinInfo.tsx +26 -11
  312. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  313. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  314. package/template/src/subComponents/LayoutIconButton.tsx +30 -8
  315. package/template/src/subComponents/LayoutIconDropdown.tsx +19 -3
  316. package/template/src/subComponents/Loading.tsx +60 -0
  317. package/template/src/subComponents/LocalAudioMute.tsx +106 -30
  318. package/template/src/subComponents/LocalEndCall.tsx +91 -15
  319. package/template/src/subComponents/LocalSwitchCamera.tsx +50 -11
  320. package/template/src/subComponents/LocalVideoMute.tsx +126 -32
  321. package/template/src/subComponents/LogoutButton.tsx +1 -1
  322. package/template/src/subComponents/NetworkQualityPill.tsx +14 -31
  323. package/template/src/subComponents/Recording.tsx +23 -6
  324. package/template/src/subComponents/RemoteAudioMute.tsx +3 -3
  325. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  326. package/template/src/subComponents/RemoteVideoMute.tsx +3 -3
  327. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  328. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  329. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  330. package/template/src/subComponents/SelectDevice.tsx +98 -32
  331. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  332. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  333. package/template/src/subComponents/ToastConfig.tsx +70 -61
  334. package/template/src/subComponents/caption/Caption.tsx +130 -0
  335. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  336. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  337. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  338. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  339. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  340. package/template/src/subComponents/caption/Transcript.tsx +449 -0
  341. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  342. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  343. package/template/src/subComponents/caption/index.ts +3 -0
  344. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  345. package/template/src/subComponents/caption/proto/test.proto +23 -0
  346. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  347. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  348. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  349. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  350. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  351. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +68 -0
  352. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  353. package/template/src/subComponents/caption/utils.ts +125 -0
  354. package/template/src/subComponents/chat/ChatParticipants.tsx +53 -17
  355. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +11 -13
  356. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -9
  357. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +1 -0
  358. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  359. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  360. package/template/src/subComponents/recording/useRecording.tsx +49 -20
  361. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  362. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +29 -10
  363. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +270 -66
  364. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +182 -95
  365. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  366. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  367. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  368. package/template/src/theme/index.ts +9 -0
  369. package/template/src/utils/SdkEvents.ts +14 -0
  370. package/template/src/utils/SdkMethodEvents.ts +23 -3
  371. package/template/src/utils/axiomLogger.ts +117 -0
  372. package/template/src/utils/book.jpg +0 -0
  373. package/template/src/utils/common.tsx +118 -6
  374. package/template/src/utils/endCallEveryOne.ts +7 -0
  375. package/template/src/utils/getCustomRoute.ts +7 -0
  376. package/template/src/utils/index.tsx +23 -0
  377. package/template/src/utils/useActionSheet.tsx +50 -0
  378. package/template/src/utils/useActiveSpeaker.ts +3 -7
  379. package/template/src/utils/useAppState.ts +17 -0
  380. package/template/src/utils/useAsyncEffect.ts +138 -0
  381. package/template/src/utils/useCreateRoom.ts +8 -12
  382. package/template/src/utils/useDisableButton.tsx +37 -0
  383. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  384. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  385. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  386. package/template/src/utils/useIsLocalUserSpeaking.ts +98 -0
  387. package/template/src/utils/useJoinRoom.ts +97 -36
  388. package/template/src/utils/useMuteToggleLocal.ts +114 -96
  389. package/template/src/utils/useString.ts +13 -3
  390. package/template/static.d.ts +42 -0
  391. package/template/tsconfig_rsdk_index.json +3 -3
  392. package/template/tsconfig_wsdk_index.json +1 -1
  393. package/template/web/index.html +20 -0
  394. package/template/webpack.commons.js +21 -10
  395. package/template/webpack.web.config.js +7 -3
  396. package/template/_buckconfig +0 -6
  397. package/template/_gitattributes +0 -1
  398. package/template/android/app/_BUCK +0 -55
  399. package/template/android/app/build_defs.bzl +0 -19
  400. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  401. package/template/src/components/OAuth.electron.tsx +0 -41
  402. package/template/src/components/OAuth.native.tsx +0 -55
  403. package/template/src/components/OAuth.tsx +0 -30
  404. package/template/src/components/OAuthConfig.ts +0 -77
  405. package/template/src/components/Settings.native.tsx +0 -21
  406. package/template/src/components/StoreToken.tsx +0 -39
@@ -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';
@@ -21,14 +28,65 @@ 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;
@@ -76,6 +134,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
76
134
  const data = Object.keys(
77
135
  filterObject(
78
136
  defaultContent,
137
+ //@ts-ignore
79
138
  ([k, v]) => v?.type === 'rtc' && v.offline === true,
80
139
  ),
81
140
  );
@@ -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,
@@ -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,
@@ -218,9 +280,9 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
218
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
@@ -249,7 +311,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
249
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
@@ -299,8 +361,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
299
361
 
300
362
  /** ******* SETTING UP ROLES BEGINS ******* */
301
363
  React.useEffect(() => {
302
- events.on(EventNames.ROLE_ATTRIBUTE, (data) => {
303
- setRaiseHandList((prevState) => {
364
+ const unsubRoleAttribute = events.on(EventNames.ROLE_ATTRIBUTE, data => {
365
+ setRaiseHandList(prevState => {
304
366
  return {
305
367
  ...prevState,
306
368
  [data.sender]: {
@@ -313,6 +375,10 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
313
375
  };
314
376
  });
315
377
  });
378
+
379
+ return () => {
380
+ unsubRoleAttribute();
381
+ };
316
382
  }, []);
317
383
 
318
384
  React.useEffect(() => {
@@ -324,7 +390,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
324
390
  ),
325
391
  PersistanceLevel.Sender,
326
392
  );
327
- setRaiseHandList((prevState) => {
393
+ setRaiseHandList(prevState => {
328
394
  return {
329
395
  ...prevState,
330
396
  [localUid]: {
@@ -342,178 +408,200 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
342
408
 
343
409
  React.useEffect(() => {
344
410
  /** ********************** 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
- });
411
+ const unsubRaisedAttribute = events.on(
412
+ EventNames.RAISED_ATTRIBUTE,
413
+ data => {
414
+ if (!isHost) return;
415
+ const payload = JSON.parse(data.payload);
416
+ const action = payload.action;
417
+ const value = payload.value;
418
+ const isProcessed = payload?.isProcessed || false;
419
+
420
+ switch (action) {
421
+ // 1. Host can receive raise hand request with true or false value
422
+ case LiveStreamControlMessageEnum.raiseHandRequest:
423
+ switch (value) {
424
+ case RaiseHandValue.TRUE:
425
+ // Step 1: Show notifications
426
+ if (
427
+ payload.ts > rtmInitTimstamp &&
428
+ sidePanelRef.current !== SidePanelType.Participants
429
+ ) {
430
+ showToast(
431
+ raiseHandRequestReceivedToastHeading?.current(
432
+ trimText(getAttendeeName(data.sender)),
433
+ ),
434
+ raiseHandRequestReceivedToastSubHeading?.current(),
435
+ data.sender,
436
+ data.ts,
437
+ );
438
+ }
439
+ // 2. All Hosts in channel update their raised state to "true" when attendee raise their hand
440
+ addOrUpdateLiveStreamRequest(data.sender, {
441
+ ts: data.ts,
442
+ raised: RaiseHandValue.TRUE,
443
+ role: ClientRole.Audience,
444
+ isProcessed: isProcessed,
445
+ });
446
+ break;
447
+ case RaiseHandValue.FALSE:
448
+ // Step 1: Show notifications
449
+ if (
450
+ payload.ts > rtmInitTimstamp &&
451
+ sidePanelRef.current !== SidePanelType.Participants
452
+ ) {
453
+ showToast(
454
+ raiseHandRequestRecallToastHeading?.current(
455
+ trimText(getAttendeeName(data.sender)),
456
+ ),
457
+ null,
458
+ );
459
+ }
460
+ // 2. All Hosts in channel update raised state to "false" when attendee recalls their request
461
+ addOrUpdateLiveStreamRequest(data.sender, {
462
+ ts: data.ts,
463
+ raised: RaiseHandValue.FALSE,
464
+ role: ClientRole.Audience,
465
+ isProcessed: isProcessed,
466
+ });
467
+ default:
468
+ break;
469
+ }
470
+ break;
471
+ // 2. All Hosts in channel gets notified when an attendee's request gets approved or rejected
472
+ case LiveStreamControlMessageEnum.notifyHostsInChannel:
473
+ if (!isHost) return;
474
+ switch (value) {
475
+ case RaiseHandValue.TRUE:
476
+ addOrUpdateLiveStreamRequest(data.sender, {
477
+ ts: data.ts,
478
+ raised: RaiseHandValue.TRUE,
479
+ role: ClientRole.Broadcaster,
480
+ isProcessed: isProcessed,
481
+ });
482
+ break;
483
+ case RaiseHandValue.FALSE:
484
+ addOrUpdateLiveStreamRequest(data.sender, {
485
+ ts: data.ts,
486
+ raised: RaiseHandValue.FALSE,
487
+ role: ClientRole.Audience,
488
+ isProcessed: isProcessed,
489
+ });
490
+ break;
491
+ default:
492
+ break;
493
+ }
494
+ break;
495
+ default:
496
+ break;
497
+ }
498
+ },
499
+ );
431
500
  /** ********************** HOST EVENTS SECTION ENDS ********************** */
432
501
 
433
502
  /** ********************** AUDIENCE EVENTS SECTION BEGINS ********************** */
434
503
  // 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
- });
504
+ const unsubRaiseHandReqAcpt = events.on(
505
+ LiveStreamControlMessageEnum.raiseHandRequestAccepted,
506
+ data => {
507
+ if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.FALSE)
508
+ return;
509
+ showToast(
510
+ raiseHandRequestAcceptedToastHeading?.current(),
511
+ raiseHandRequestAcceptedToastSubHeading?.current(),
512
+ );
513
+ // Promote user's privileges to host
514
+ changeClientRoleTo(ClientRole.Broadcaster);
515
+ // Audience updates its local attributes and notfies all host when request is approved
516
+ UpdtLocStateAndBCastAttr(ClientRole.Broadcaster, data.ts);
517
+ },
518
+ );
447
519
  /** 2. Audience receives this when the request is rejected by host
448
520
  * 2.a Audience receives this when the request is rejected by host which is not yet approved
449
521
  * 2.b Audience receives this when the request when is demoted by the host
450
522
  */
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
- });
523
+ const unsubRaiseHandReqRej = events.on(
524
+ LiveStreamControlMessageEnum.raiseHandRequestRejected,
525
+ data => {
526
+ /** 2.a */
527
+ if (
528
+ raiseHandListRef.current[localUidRef.current].role ==
529
+ ClientRole.Audience
530
+ ) {
531
+ showToast(raiseHandRequestRejectedToastHeading?.current(), null);
532
+ } else if (
533
+ raiseHandListRef.current[localUidRef.current].role ==
534
+ ClientRole.Broadcaster
535
+ ) {
536
+ /** 2.b */
537
+ showToast(
538
+ raiseHandApprovedRequestRecallToastHeading?.current(),
539
+ null,
540
+ );
541
+ screenshareContextInstanceRef?.current?.stopUserScreenShare(); // This will not exist on ios
542
+
543
+ // Demote user's privileges to audience
544
+ changeClientRoleTo(ClientRole.Audience);
545
+ }
546
+ // Audience updates its local attributes and notfies all host when demoted/request rejected
547
+ UpdtLocStateAndBCastAttr(ClientRole.Audience, data.ts);
548
+ },
549
+ );
478
550
  // 3. Audience when receives kickUser notifies all host when is kicked out
479
- events.on(controlMessageEnum.kickUser, (data) => {
551
+ const unsubKickUser = events.on(controlMessageEnum.kickUser, data => {
480
552
  // Audience updates its local attributes and notfies all host when they(audience) are kicked out
481
553
  UpdtLocStateAndBCastAttr(ClientRole.Audience, data.ts);
482
554
  });
483
555
  // 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
- });
556
+ const unsubPromoteAsCoHost = events.on(
557
+ LiveStreamControlMessageEnum.promoteAsCoHost,
558
+ data => {
559
+ showToast(promoteAsCoHostToastHeading.current(), null);
560
+ // Promote user's privileges to host
561
+ changeClientRoleTo(ClientRole.Broadcaster);
562
+ // Audience updates its local attributes and notfies all host when request is approved
563
+ UpdtLocStateAndBCastAttr(ClientRole.Broadcaster, data.ts);
564
+ },
565
+ );
494
566
  // 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
- });
567
+ const unsubCoHostJoined = events.on(
568
+ LiveStreamControlMessageEnum.coHostJoined,
569
+ ({payload}) => {
570
+ try {
571
+ const data = JSON.parse(payload);
572
+ if (data?.uid) {
573
+ setCoHostUids(prevState => {
574
+ return [...prevState, parseInt(data.uid)];
575
+ });
576
+ }
577
+ } catch (error) {}
578
+ },
579
+ );
505
580
  // 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
- });
581
+ const unsubCoHostRemoved = events.on(
582
+ LiveStreamControlMessageEnum.coHostRemoved,
583
+ ({payload}) => {
584
+ try {
585
+ const data = JSON.parse(payload);
586
+ if (data?.uid) {
587
+ setCoHostUids(prevState => {
588
+ return [...prevState.filter(i => i !== parseInt(data.uid))];
589
+ });
590
+ }
591
+ } catch (error) {}
592
+ },
593
+ );
516
594
  /** ********************** AUDIENCE EVENTS SECTION ENDS ********************** */
595
+
596
+ return () => {
597
+ unsubRaisedAttribute();
598
+ unsubRaiseHandReqAcpt();
599
+ unsubRaiseHandReqRej();
600
+ unsubKickUser();
601
+ unsubPromoteAsCoHost();
602
+ unsubCoHostJoined();
603
+ unsubCoHostRemoved();
604
+ };
517
605
  }, []);
518
606
 
519
607
  /** ******* EVENT LISTENERS SECTION ENDS ******* */
@@ -540,7 +628,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
540
628
  } else {
541
629
  Toast.hide();
542
630
  setTimeout(() => {
543
- showToast('Request already processed.', null);
631
+ showToast(requestAlreadyProcessed?.current(), null);
544
632
  });
545
633
  }
546
634
  };
@@ -561,7 +649,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
561
649
  } else {
562
650
  Toast.hide();
563
651
  setTimeout(() => {
564
- showToast('Request already processed.', null);
652
+ showToast(requestAlreadyProcessed?.current(), null);
565
653
  });
566
654
  }
567
655
  };
@@ -590,8 +678,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
590
678
  if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.TRUE)
591
679
  return;
592
680
  showToast(
593
- LSNotificationObject.RAISE_HAND_REQUEST.text1,
594
- LSNotificationObject.RAISE_HAND_REQUEST.text2,
681
+ raiseHandRequestToastHeading?.current(),
682
+ raiseHandRequestToastSubHeading?.current(),
595
683
  );
596
684
  events.send(
597
685
  EventNames.RAISED_ATTRIBUTE,
@@ -638,10 +726,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
638
726
  PersistanceLevel.Sender,
639
727
  );
640
728
  UpdtLocStateAndBCastAttr(ClientRole.Audience, new Date().getTime());
641
- showToast(
642
- LSNotificationObject.RAISE_HAND_REQUEST_RECALL_LOCAL.text1,
643
- LSNotificationObject.RAISE_HAND_REQUEST_RECALL_LOCAL.text2,
644
- );
729
+ showToast(raiseHandRequestRecallLocalToastHeading?.current(), null);
645
730
  };
646
731
 
647
732
  /** ******* AUDIENCE CONTROLS SECTION ENDS ******* */
@@ -1,4 +1,5 @@
1
1
  // DECLARE ENUMS & CONTANTS
2
+ import {TextDataInterface} from '../../language/default-labels';
2
3
  import {ClientRole} from '../../../agora-rn-uikit';
3
4
 
4
5
  export enum RaiseHandValue {
@@ -20,6 +21,19 @@ export interface raiseHandItemInterface {
20
21
  }
21
22
 
22
23
  import {UidType} from '../../../agora-rn-uikit';
24
+ import {
25
+ livestreamPromoteAsCoHostToastHeading,
26
+ livestreamRaiseHandApprovedRequestRecallToastHeading,
27
+ livestreamRaiseHandRequestAcceptedToastHeading,
28
+ livestreamRaiseHandRequestAcceptedToastSubHeading,
29
+ livestreamRaiseHandRequestRecallLocalToastHeading,
30
+ livestreamRaiseHandRequestRecallToastHeading,
31
+ livestreamRaiseHandRequestReceivedToastHeading,
32
+ livestreamRaiseHandRequestReceivedToastSubHeading,
33
+ livestreamRaiseHandRequestRejectedToastHeading,
34
+ livestreamRaiseHandRequestToastHeading,
35
+ livestreamRaiseHandRequestToastSubHeading,
36
+ } from '../../language/default-labels/videoCallScreenLabels';
23
37
 
24
38
  export enum requestStatus {
25
39
  AwaitingAction = 'AWAITING_ACTION',
@@ -47,40 +61,42 @@ export enum LiveStreamControlMessageEnum {
47
61
  coHostJoined = 'CO_HOST_JOINED',
48
62
  coHostRemoved = 'CO_HOST_REMOVED',
49
63
  }
64
+ interface LSNotificationObjectInterface {
65
+ [key: string]: {
66
+ //text1: string;
67
+ //text2: string | null;
50
68
 
51
- export const LSNotificationObject = {
69
+ text1TranslationKey: keyof TextDataInterface;
70
+ text2TranslationKey?: keyof TextDataInterface;
71
+ };
72
+ }
73
+ export const LSNotificationObject: LSNotificationObjectInterface = {
52
74
  [LiveStreamControlMessageEnum.raiseHandRequest]: {
53
- text1: 'You’ve raised your hand.',
54
- text2: 'Waiting for host to approve the request',
75
+ text1TranslationKey: livestreamRaiseHandRequestToastHeading,
76
+ text2TranslationKey: livestreamRaiseHandRequestToastSubHeading,
55
77
  },
56
78
  [LiveStreamControlMessageEnum.raiseHandRequestReceived]: {
57
- text1: 'has raised their hand to be a Presenter',
58
- text2:
59
- 'Once approved they will be able to speak, share their video and present during this call.',
79
+ text1TranslationKey: livestreamRaiseHandRequestReceivedToastHeading,
80
+ text2TranslationKey: livestreamRaiseHandRequestReceivedToastSubHeading,
60
81
  },
61
82
  [LiveStreamControlMessageEnum.raiseHandRequestAccepted]: {
62
- text1: 'Host has approved your request.',
63
- text2: 'You are now a Presenter',
83
+ text1TranslationKey: livestreamRaiseHandRequestAcceptedToastHeading,
84
+ text2TranslationKey: livestreamRaiseHandRequestAcceptedToastSubHeading,
64
85
  },
65
86
  [LiveStreamControlMessageEnum.raiseHandRequestRejected]: {
66
- text1: 'Your request was rejected by the host',
67
- text2: null,
87
+ text1TranslationKey: livestreamRaiseHandRequestRejectedToastHeading,
68
88
  },
69
89
  [LiveStreamControlMessageEnum.raiseHandRequestRecall]: {
70
- text1: 'has lowered their hand',
71
- text2: null,
90
+ text1TranslationKey: livestreamRaiseHandRequestRecallToastHeading,
72
91
  },
73
92
  [LiveStreamControlMessageEnum.raiseHandRequestRecallLocal]: {
74
- text1: 'You’ve lowered your hand.',
75
- text2: null,
93
+ text1TranslationKey: livestreamRaiseHandRequestRecallLocalToastHeading,
76
94
  },
77
95
  [LiveStreamControlMessageEnum.raiseHandApprovedRequestRecall]: {
78
- text1: 'Host has revoked streaming permissions.',
79
- text2: null,
96
+ text1TranslationKey: livestreamRaiseHandApprovedRequestRecallToastHeading,
80
97
  },
81
98
  [LiveStreamControlMessageEnum.promoteAsCoHost]: {
82
- text1: 'Host promoted you as a Presenter',
83
- text2: null,
99
+ text1TranslationKey: livestreamPromoteAsCoHostToastHeading,
84
100
  },
85
101
  };
86
102