agora-appbuilder-core 3.0.13 → 3.0.28-beta-9

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 (572) hide show
  1. package/Readme.md +6 -0
  2. package/package.json +3 -3
  3. package/template/.bundle/config +2 -0
  4. package/template/Gemfile +4 -0
  5. package/template/Gulpfile.js +31 -30
  6. package/template/_eslintrc.js +3 -3
  7. package/template/_gitignore +12 -11
  8. package/template/_package-lock.json +34387 -27128
  9. package/template/_prettierrc.js +2 -2
  10. package/template/agora-rn-uikit/.eslintrc.js +5 -0
  11. package/template/agora-rn-uikit/package-lock.json +25024 -0
  12. package/template/agora-rn-uikit/package.json +14 -14
  13. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  14. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  15. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  16. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +10 -6
  17. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +98 -37
  18. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +27 -16
  19. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +31 -26
  20. package/template/agora-rn-uikit/src/Controls/Icons.ts +81 -83
  21. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  22. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  23. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  24. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +5 -2
  25. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
  26. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  27. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
  28. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  29. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
  30. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  31. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
  32. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  33. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  34. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -6
  35. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -6
  36. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +23 -0
  37. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -7
  38. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -8
  39. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -7
  40. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +24 -14
  41. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -6
  42. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -6
  43. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +14 -5
  44. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +28 -0
  45. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  46. package/template/agora-rn-uikit/src/Reducer/index.ts +4 -0
  47. package/template/agora-rn-uikit/src/Rtc/Create.tsx +197 -66
  48. package/template/agora-rn-uikit/src/Rtc/Join.tsx +60 -33
  49. package/template/agora-rn-uikit/src/RtcConfigure.tsx +194 -57
  50. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  51. package/template/agora-rn-uikit/src/Utils/quality.tsx +8 -0
  52. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +67 -13
  53. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +53 -17
  54. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
  55. package/template/agora-rn-uikit/src/index.ts +19 -10
  56. package/template/android/app/build.gradle +67 -155
  57. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  58. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  59. package/template/android/app/src/main/AndroidManifest.xml +21 -27
  60. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  61. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  62. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +67 -0
  63. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +22 -36
  64. package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
  65. package/template/android/app/src/main/res/values/colors.xml +7 -0
  66. package/template/android/app/src/main/res/values/strings.xml +3 -0
  67. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  68. package/template/android/build.gradle +20 -31
  69. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  70. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  71. package/template/android/gradle.properties +18 -4
  72. package/template/android/gradlew +165 -104
  73. package/template/android/gradlew.bat +12 -23
  74. package/template/android/link-assets-manifest.json +13 -0
  75. package/template/android/settings.gradle +1 -0
  76. package/template/babel.config.js +1 -0
  77. package/template/bridge/rtc/webNg/RtcEngine.ts +940 -98
  78. package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -27
  79. package/template/bridge/rtc/webNg/Types.ts +20 -5
  80. package/template/bridge/rtc/webNg/index.ts +81 -14
  81. package/template/bridge/rtm/web/index.ts +86 -35
  82. package/template/configTransform.js +16 -1
  83. package/template/customization-api/action-library.ts +4 -16
  84. package/template/customization-api/app-state.ts +18 -8
  85. package/template/customization-api/atoms.ts +8 -0
  86. package/template/customization-api/customEvents.ts +7 -2
  87. package/template/customization-api/customize.ts +30 -11
  88. package/template/customization-api/index.ts +5 -0
  89. package/template/customization-api/sub-components.ts +43 -18
  90. package/template/customization-api/temp.ts +51 -0
  91. package/template/customization-api/typeDefinition.ts +65 -49
  92. package/template/customization-api/types.ts +48 -0
  93. package/template/customization-api/utils.ts +19 -1
  94. package/template/customization-implementation/createHook.ts +24 -6
  95. package/template/customization-implementation/index.ts +1 -2
  96. package/template/customization-implementation/useCustomization.tsx +5 -7
  97. package/template/defaultConfig.js +84 -0
  98. package/template/electron/index.html +27 -27
  99. package/template/electron/renderer/index.js +1 -0
  100. package/template/global.d.ts +97 -6
  101. package/template/index.js +18 -1
  102. package/template/index.rsdk.tsx +1 -0
  103. package/template/index.web.js +1 -0
  104. package/template/index.wsdk.tsx +2 -13
  105. package/template/ios/.xcode.env +11 -0
  106. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  107. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  108. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  109. package/template/ios/HelloWorld/Info.plist +20 -1
  110. package/template/ios/HelloWorld/main.m +2 -1
  111. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +596 -11
  112. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  113. package/template/ios/HelloWorld.xcodeproj/xcshareddata/xcschemes/ScreenSharing.xcscheme +95 -0
  114. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  115. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  116. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  117. package/template/ios/HelloWorldTests/Info.plist +2 -2
  118. package/template/ios/Podfile +54 -20
  119. package/template/ios/Podfile.lock +975 -0
  120. package/template/ios/ScreenSharing/Info.plist +15 -0
  121. package/template/ios/ScreenSharing/SampleHandler.h +5 -0
  122. package/template/ios/ScreenSharing/SampleHandler.m +39 -0
  123. package/template/ios/link-assets-manifest.json +13 -0
  124. package/template/jest.config.js +4 -0
  125. package/template/metro.config.js +7 -32
  126. package/template/package-lock.json +57746 -0
  127. package/template/package.json +71 -35
  128. package/template/react-native-toast-message/index.d.ts +46 -44
  129. package/template/react-native-toast-message/index.js +1 -0
  130. package/template/react-native-toast-message/package-lock.json +10553 -0
  131. package/template/react-native-toast-message/src/colors/index.js +3 -2
  132. package/template/react-native-toast-message/src/components/base/index.js +38 -63
  133. package/template/react-native-toast-message/src/components/base/styles.js +20 -39
  134. package/template/react-native-toast-message/src/components/checkbox.js +183 -0
  135. package/template/react-native-toast-message/src/components/error.js +3 -2
  136. package/template/react-native-toast-message/src/components/info.js +3 -2
  137. package/template/react-native-toast-message/src/components/success.js +3 -2
  138. package/template/react-native-toast-message/src/index.js +125 -32
  139. package/template/react-native-toast-message/src/index.sdk.tsx +129 -36
  140. package/template/react-native-toast-message/src/styles.js +3 -4
  141. package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
  142. package/template/react-native.config.js +7 -0
  143. package/template/src/App.tsx +53 -63
  144. package/template/src/AppRoutes.tsx +101 -0
  145. package/template/src/AppWrapper.tsx +83 -29
  146. package/template/src/SDKAppWrapper.tsx +145 -58
  147. package/template/src/app-state/useBeautyEffects.ts +30 -0
  148. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  149. package/template/src/app-state/useMessages.ts +49 -9
  150. package/template/src/app-state/useNoiseSupression.native.tsx +73 -0
  151. package/template/src/app-state/useNoiseSupression.tsx +151 -0
  152. package/template/src/app-state/useVideoQuality.tsx +182 -0
  153. package/template/src/app-state/useVirtualBackground.ts +152 -0
  154. package/template/src/assets/font-styles.css +677 -0
  155. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  156. package/template/src/assets/fonts/icomoon.ttf +0 -0
  157. package/template/src/assets/permission.png +0 -0
  158. package/template/src/assets/selection.json +3491 -0
  159. package/template/src/atoms/ActionMenu.tsx +326 -0
  160. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
  161. package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
  162. package/template/src/atoms/AnimatedRings.native.tsx +68 -0
  163. package/template/src/atoms/AnimatedRings.tsx +70 -0
  164. package/template/src/atoms/Avatar.tsx +51 -0
  165. package/template/src/atoms/Card.tsx +74 -0
  166. package/template/src/atoms/Carousel.native.tsx +105 -0
  167. package/template/src/atoms/Carousel.tsx +109 -0
  168. package/template/src/atoms/Checkbox.tsx +98 -0
  169. package/template/src/atoms/CircularProgress.native.tsx +121 -0
  170. package/template/src/atoms/CircularProgress.tsx +101 -0
  171. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  172. package/template/src/atoms/CustomIcon.tsx +153 -0
  173. package/template/src/atoms/CustomSwitch.tsx +287 -0
  174. package/template/src/atoms/DropDownMulti.tsx +349 -0
  175. package/template/src/atoms/Dropdown.tsx +307 -0
  176. package/template/src/atoms/HorizontalRule.tsx +3 -1
  177. package/template/src/atoms/IconButton.tsx +205 -0
  178. package/template/src/atoms/ImageIcon.tsx +127 -0
  179. package/template/src/atoms/InfoBubble.tsx +291 -0
  180. package/template/src/atoms/InlineNotification.tsx +81 -0
  181. package/template/src/atoms/InlinePopup.tsx +185 -0
  182. package/template/src/atoms/Input.tsx +87 -0
  183. package/template/src/atoms/InviteInfo.tsx +166 -0
  184. package/template/src/atoms/LinkButton.tsx +29 -0
  185. package/template/src/atoms/MeetingLink.tsx +160 -0
  186. package/template/src/atoms/OutlineButton.tsx +61 -0
  187. package/template/src/atoms/ParticipantsCount.tsx +78 -0
  188. package/template/src/atoms/Popup.tsx +178 -0
  189. package/template/src/atoms/PrimaryButton.tsx +65 -26
  190. package/template/src/atoms/RecordingInfo.tsx +47 -0
  191. package/template/src/atoms/SecondaryButton.tsx +10 -5
  192. package/template/src/atoms/Spacer.tsx +23 -0
  193. package/template/src/atoms/TertiaryButton.tsx +108 -0
  194. package/template/src/atoms/TextInput.tsx +13 -14
  195. package/template/src/atoms/Toggle.tsx +47 -0
  196. package/template/src/atoms/Toolbar.tsx +94 -0
  197. package/template/src/atoms/ToolbarItem.tsx +99 -0
  198. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  199. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  200. package/template/src/atoms/ToolbarPreset.tsx +147 -0
  201. package/template/src/atoms/Tooltip.native.tsx +65 -0
  202. package/template/src/atoms/Tooltip.tsx +111 -0
  203. package/template/src/atoms/UserAvatar.tsx +60 -0
  204. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  205. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  206. package/template/src/auth/AuthProvider.tsx +710 -0
  207. package/template/src/auth/AuthRoute.tsx +94 -0
  208. package/template/src/auth/IDPAuth.electron.tsx +32 -0
  209. package/template/src/auth/IDPAuth.tsx +73 -0
  210. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  211. package/template/src/auth/UserCancelPopup.tsx +115 -0
  212. package/template/src/auth/config.ts +53 -0
  213. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  214. package/template/src/auth/openIDPURL.native.tsx +62 -0
  215. package/template/src/auth/openIDPURL.tsx +20 -0
  216. package/template/src/auth/useIDPAuth.electron.tsx +125 -0
  217. package/template/src/auth/useIDPAuth.native.tsx +130 -0
  218. package/template/src/auth/useIDPAuth.tsx +124 -0
  219. package/template/src/auth/useTokenAuth.tsx +267 -0
  220. package/template/src/components/Chat.tsx +177 -279
  221. package/template/src/components/ChatContext.ts +22 -1
  222. package/template/src/components/ColorConfigure.tsx +1 -2
  223. package/template/src/components/ColorContext.ts +1 -1
  224. package/template/src/components/CommonStyles.ts +51 -0
  225. package/template/src/components/Controls.tsx +1275 -108
  226. package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +15 -9
  227. package/template/src/components/CustomSidePanel.tsx +82 -0
  228. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  229. package/template/src/components/DeviceConfigure.tsx +789 -122
  230. package/template/src/components/DeviceContext.tsx +10 -4
  231. package/template/src/components/EventsConfigure.tsx +773 -12
  232. package/template/src/components/GraphQLProvider.tsx +83 -37
  233. package/template/src/components/GridVideo.tsx +86 -53
  234. package/template/src/components/HostControlView.tsx +118 -42
  235. package/template/src/components/JoinPhrase.tsx +0 -1
  236. package/template/src/components/Leftbar.tsx +129 -0
  237. package/template/src/components/Navbar.tsx +469 -488
  238. package/template/src/components/NavbarMobile.tsx +138 -0
  239. package/template/src/components/Navigation.native.tsx +1 -14
  240. package/template/src/components/{Settings.native.tsx → Navigation.sdk.tsx} +17 -6
  241. package/template/src/components/NetworkQualityContext.tsx +32 -26
  242. package/template/src/components/ParticipantsView.tsx +195 -165
  243. package/template/src/components/PinnedVideo.tsx +317 -122
  244. package/template/src/components/Precall.native.tsx +472 -116
  245. package/template/src/components/Precall.tsx +493 -154
  246. package/template/src/components/RTMConfigure.tsx +477 -83
  247. package/template/src/components/Rightbar.tsx +129 -0
  248. package/template/src/components/Router.electron.ts +2 -0
  249. package/template/src/components/Router.native.ts +2 -0
  250. package/template/src/components/Router.sdk.ts +2 -0
  251. package/template/src/components/Router.ts +2 -0
  252. package/template/src/components/SdkApiContext.tsx +319 -0
  253. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  254. package/template/src/components/SessionContext.tsx +0 -1
  255. package/template/src/components/Settings.tsx +51 -114
  256. package/template/src/components/SettingsView.tsx +293 -54
  257. package/template/src/components/Share.tsx +415 -297
  258. package/template/src/components/StorageContext.tsx +82 -7
  259. package/template/src/components/ToastComponent.tsx +17 -0
  260. package/template/src/components/WhiteboardLayout.tsx +291 -0
  261. package/template/src/components/beauty-effect/useBeautyEffects.native.tsx +119 -0
  262. package/template/src/components/beauty-effect/useBeautyEffects.tsx +152 -0
  263. package/template/src/components/chat/chatConfigure.native.tsx +511 -0
  264. package/template/src/components/chat/chatConfigure.tsx +529 -0
  265. package/template/src/components/chat-messages/useChatMessages.tsx +513 -386
  266. package/template/src/components/chat-ui/useChatUIControls.tsx +132 -0
  267. package/template/src/components/common/Error.tsx +36 -6
  268. package/template/src/components/common/Logo.tsx +16 -15
  269. package/template/src/components/contexts/LiveStreamDataContext.tsx +23 -17
  270. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  271. package/template/src/components/contexts/VideoMeetingDataContext.tsx +41 -11
  272. package/template/src/components/contexts/WaitingRoomContext.tsx +61 -0
  273. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  274. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  275. package/template/src/components/livestream/LiveStreamContext.tsx +493 -165
  276. package/template/src/components/livestream/Types.ts +58 -17
  277. package/template/src/components/livestream/index.ts +1 -0
  278. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  279. package/template/src/components/livestream/views/LiveStreamControls.tsx +8 -4
  280. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  281. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  282. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +221 -0
  283. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  284. package/template/src/components/participants/AllAudienceParticipants.tsx +105 -35
  285. package/template/src/components/participants/AllHostParticipants.tsx +108 -38
  286. package/template/src/components/participants/Participant.tsx +330 -0
  287. package/template/src/components/participants/ParticipantName.tsx +13 -7
  288. package/template/src/components/participants/ParticipantSectionTitle.tsx +38 -10
  289. package/template/src/components/participants/ScreenshareParticipants.tsx +142 -12
  290. package/template/src/components/participants/UserActionMenuOptions.tsx +510 -0
  291. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  292. package/template/src/components/popups/InvitePopup.tsx +196 -0
  293. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  294. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  295. package/template/src/components/popups/StopRecordingPopup.tsx +120 -0
  296. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  297. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  298. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  299. package/template/src/components/precall/LocalMute.tsx +109 -15
  300. package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
  301. package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
  302. package/template/src/components/precall/PermissionHelper.tsx +154 -0
  303. package/template/src/components/precall/PreCallSettings.tsx +53 -0
  304. package/template/src/components/precall/VideoFallback.tsx +173 -0
  305. package/template/src/components/precall/VideoPreview.native.tsx +19 -8
  306. package/template/src/components/precall/VideoPreview.tsx +28 -7
  307. package/template/src/components/precall/index.tsx +2 -0
  308. package/template/src/components/precall/joinCallBtn.native.tsx +12 -5
  309. package/template/src/components/precall/joinCallBtn.tsx +34 -6
  310. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +215 -0
  311. package/template/src/components/precall/joinWaitingRoomBtn.tsx +255 -0
  312. package/template/src/components/precall/meetingTitle.tsx +42 -13
  313. package/template/src/components/precall/selectDevice.tsx +5 -25
  314. package/template/src/components/precall/textInput.tsx +40 -14
  315. package/template/src/components/precall/usePreCall.tsx +66 -2
  316. package/template/src/components/recording-bot/RecordingBotRoute.tsx +48 -0
  317. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  318. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  319. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  320. package/template/src/components/recordings/recording-table.tsx +250 -0
  321. package/template/src/components/recordings/style.ts +238 -0
  322. package/template/src/components/recordings/utils.ts +122 -0
  323. package/template/src/components/room-info/useRoomInfo.tsx +142 -0
  324. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  325. package/template/src/components/styles.ts +42 -21
  326. package/template/src/components/useShareLink.tsx +33 -70
  327. package/template/src/{utils/useButtonTemplate.tsx → components/useToast.tsx} +18 -20
  328. package/template/src/components/useUserPreference.tsx +157 -16
  329. package/template/src/components/useVideoCall.tsx +157 -0
  330. package/template/src/components/useWakeLock.tsx +18 -4
  331. package/template/src/components/virtual-background/VBButton.tsx +62 -0
  332. package/template/src/components/virtual-background/VBCard.native.tsx +280 -0
  333. package/template/src/components/virtual-background/VBCard.tsx +308 -0
  334. package/template/src/components/virtual-background/VBPanel.tsx +282 -0
  335. package/template/src/components/virtual-background/VButils.native.ts +72 -0
  336. package/template/src/components/virtual-background/VButils.ts +144 -0
  337. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  338. package/template/src/components/virtual-background/VideoPreview.tsx +116 -0
  339. package/template/src/components/virtual-background/imagePaths.ts +82 -0
  340. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  341. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  342. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  343. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  344. package/template/src/components/virtual-background/images/index.ts +37 -0
  345. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  346. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  347. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  348. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  349. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  350. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  351. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  352. package/template/src/components/virtual-background/useVB.native.tsx +205 -0
  353. package/template/src/components/virtual-background/useVB.tsx +294 -0
  354. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  355. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  356. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  357. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  358. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +473 -0
  359. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  360. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1448 -0
  361. package/template/src/components/whiteboard/WhiteboardView.native.tsx +212 -0
  362. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  363. package/template/src/components/whiteboard/WhiteboardWidget.tsx +729 -0
  364. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  365. package/template/src/language/default-labels/commonLabels.ts +51 -14
  366. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  367. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  368. package/template/src/language/default-labels/precallScreenLabels.ts +158 -25
  369. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  370. package/template/src/language/default-labels/videoCallScreenLabels.ts +1290 -158
  371. package/template/src/language/i18nTypes.ts +1 -1
  372. package/template/src/language/useLanguage.tsx +10 -4
  373. package/template/src/logger/AppBuilderLogger.tsx +313 -0
  374. package/template/src/logger/constants.ts +18 -0
  375. package/template/src/logger/transports/agora-transport.native.ts +64 -0
  376. package/template/src/logger/transports/agora-transport.ts +36 -0
  377. package/template/src/logger/transports/customer-transport.ts +162 -0
  378. package/template/src/pages/Authenticate.tsx +5 -15
  379. package/template/src/pages/Create.tsx +394 -202
  380. package/template/src/pages/Endcall.tsx +153 -0
  381. package/template/src/pages/Join.tsx +188 -78
  382. package/template/src/pages/Login.tsx +26 -0
  383. package/template/src/pages/VideoCall.tsx +381 -130
  384. package/template/src/pages/video-call/ActionSheet.native.tsx +343 -0
  385. package/template/src/pages/video-call/ActionSheet.tsx +349 -0
  386. package/template/src/pages/video-call/ActionSheetContent.tsx +655 -0
  387. package/template/src/pages/video-call/ActionSheetHandle.tsx +54 -0
  388. package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
  389. package/template/src/pages/video-call/DefaultLayouts.ts +32 -12
  390. package/template/src/pages/video-call/NameWithMicIcon.tsx +104 -51
  391. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  392. package/template/src/pages/video-call/RenderComponent.tsx +16 -31
  393. package/template/src/pages/video-call/SidePanelHeader.tsx +424 -0
  394. package/template/src/pages/video-call/VideoCallMobileView.tsx +299 -0
  395. package/template/src/pages/video-call/VideoCallScreen.native.tsx +38 -0
  396. package/template/src/pages/video-call/VideoCallScreen.tsx +379 -74
  397. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +51 -0
  398. package/template/src/pages/video-call/VideoComponent.tsx +81 -6
  399. package/template/src/pages/video-call/VideoRenderer.tsx +525 -63
  400. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  401. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  402. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  403. package/template/src/pages/video-call/index.ts +51 -7
  404. package/template/src/rtm/RTMEngine.ts +22 -4
  405. package/template/src/rtm-events/constants.ts +26 -9
  406. package/template/src/rtm-events-api/Events.ts +114 -23
  407. package/template/src/rtm-events-api/LocalEvents.ts +15 -0
  408. package/template/src/rtm-events-api/types.ts +10 -5
  409. package/template/src/selection.json +1 -0
  410. package/template/src/subComponents/BlockUI.tsx +70 -0
  411. package/template/src/subComponents/ChatBubble.tsx +413 -96
  412. package/template/src/subComponents/ChatContainer.tsx +305 -101
  413. package/template/src/subComponents/ChatInput.native.tsx +269 -0
  414. package/template/src/subComponents/ChatInput.tsx +308 -156
  415. package/template/src/subComponents/Checkbox.native.tsx +46 -35
  416. package/template/src/subComponents/Checkbox.tsx +9 -8
  417. package/template/src/subComponents/CopyJoinInfo.tsx +52 -62
  418. package/template/src/subComponents/EndcallPopup.tsx +182 -0
  419. package/template/src/subComponents/FallbackLogo.tsx +122 -40
  420. package/template/src/subComponents/LanguageSelector.tsx +35 -31
  421. package/template/src/subComponents/LayoutIconButton.tsx +210 -0
  422. package/template/src/subComponents/LayoutIconDropdown.tsx +149 -133
  423. package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
  424. package/template/src/subComponents/Loading.tsx +60 -0
  425. package/template/src/subComponents/LocalAudioMute.tsx +181 -30
  426. package/template/src/subComponents/LocalEndCall.tsx +118 -36
  427. package/template/src/subComponents/LocalSwitchCamera.tsx +72 -40
  428. package/template/src/subComponents/LocalVideoMute.tsx +177 -30
  429. package/template/src/subComponents/Logo.tsx +3 -4
  430. package/template/src/subComponents/LogoutButton.tsx +2 -2
  431. package/template/src/subComponents/NetworkQualityPill.tsx +65 -84
  432. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  433. package/template/src/subComponents/Recording.tsx +44 -31
  434. package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
  435. package/template/src/subComponents/RemoteEndCall.tsx +8 -5
  436. package/template/src/subComponents/RemoteMutePopup.tsx +115 -0
  437. package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
  438. package/template/src/subComponents/RemoveMeetingPopup.tsx +122 -0
  439. package/template/src/subComponents/RemoveScreensharePopup.tsx +124 -0
  440. package/template/src/subComponents/ScreenShareNotice.tsx +95 -12
  441. package/template/src/subComponents/SelectDevice.tsx +548 -66
  442. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +210 -0
  443. package/template/src/subComponents/SelectOAuth.tsx +9 -8
  444. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  445. package/template/src/subComponents/SidePanelEnum.tsx +6 -4
  446. package/template/src/subComponents/SidePanelHeader.tsx +146 -0
  447. package/template/src/subComponents/ToastConfig.tsx +160 -11
  448. package/template/src/subComponents/caption/Caption.tsx +132 -0
  449. package/template/src/subComponents/caption/CaptionContainer.tsx +331 -0
  450. package/template/src/subComponents/caption/CaptionIcon.tsx +115 -0
  451. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  452. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  453. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  454. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  455. package/template/src/subComponents/caption/TranscriptIcon.tsx +126 -0
  456. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  457. package/template/src/subComponents/caption/index.ts +3 -0
  458. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  459. package/template/src/subComponents/caption/proto/test.proto +23 -0
  460. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  461. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  462. package/template/src/subComponents/caption/useSTTAPI.tsx +275 -0
  463. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  464. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  465. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +93 -0
  466. package/template/src/subComponents/caption/useTranscriptDownload.ts +62 -0
  467. package/template/src/subComponents/caption/utils.ts +126 -0
  468. package/template/src/subComponents/chat/ChatActionMenu.tsx +224 -0
  469. package/template/src/subComponents/chat/ChatAttachment.native.tsx +237 -0
  470. package/template/src/subComponents/chat/ChatAttachment.tsx +205 -0
  471. package/template/src/subComponents/chat/ChatEmoji.native.tsx +75 -0
  472. package/template/src/subComponents/chat/ChatEmoji.tsx +182 -0
  473. package/template/src/subComponents/chat/ChatParticipants.tsx +232 -81
  474. package/template/src/subComponents/chat/ChatSendButton.tsx +209 -0
  475. package/template/src/subComponents/chat/ChatUploadStatus.tsx +84 -0
  476. package/template/src/subComponents/chat/ImagePopup.tsx +400 -0
  477. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  478. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +109 -47
  479. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +61 -45
  480. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +9 -8
  481. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +29 -12
  482. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +33 -17
  483. package/template/src/subComponents/recording/useIsRecordingBot.tsx +76 -0
  484. package/template/src/subComponents/recording/useRecording.tsx +761 -108
  485. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +93 -9
  486. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +82 -75
  487. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +494 -78
  488. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +247 -110
  489. package/template/src/subComponents/screenshare/useScreenshare.tsx +6 -4
  490. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  491. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +126 -0
  492. package/template/src/theme/index.ts +59 -0
  493. package/template/src/utils/PlatformWrapper.tsx +21 -0
  494. package/template/src/utils/SdkEvents.ts +37 -14
  495. package/template/src/utils/SdkMethodEvents.ts +105 -0
  496. package/template/src/utils/axiomLogger.ts +122 -0
  497. package/template/src/utils/book.jpg +0 -0
  498. package/template/src/utils/common.tsx +350 -7
  499. package/template/src/utils/constants.ts +4 -0
  500. package/template/src/utils/fetch-retry.ts +23 -0
  501. package/template/src/utils/getCustomRoute.ts +7 -0
  502. package/template/src/utils/hexadecimalTransparency.ts +108 -0
  503. package/template/src/utils/index.tsx +83 -0
  504. package/template/src/utils/isMobileOrTablet.ts +7 -2
  505. package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
  506. package/template/src/utils/useActionSheet.tsx +50 -0
  507. package/template/src/utils/useActiveSpeaker.ts +38 -0
  508. package/template/src/utils/useAppState.ts +17 -0
  509. package/template/src/utils/useAsyncEffect.ts +138 -0
  510. package/template/src/utils/useCreateRoom.ts +152 -0
  511. package/template/src/utils/useEndCall.ts +74 -0
  512. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  513. package/template/src/utils/useFindActiveSpeaker.ts +373 -0
  514. package/template/src/utils/useFocus.tsx +51 -0
  515. package/template/src/utils/useFullScreen.native.ts +12 -0
  516. package/template/src/utils/useFullScreen.ts +161 -0
  517. package/template/src/utils/useGetMeetingPhrase.ts +61 -10
  518. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  519. package/template/src/utils/useIsHandRaised.ts +13 -0
  520. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  521. package/template/src/utils/useIsLocalUserSpeaking.ts +119 -0
  522. package/template/src/utils/useIsPSTN.ts +3 -3
  523. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  524. package/template/src/utils/useJoinRoom.ts +304 -0
  525. package/template/src/utils/useLayout.tsx +9 -3
  526. package/template/src/utils/useLocalAudio.ts +69 -0
  527. package/template/src/utils/useLocalVideo.ts +69 -0
  528. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → utils/useMenu.tsx} +16 -3
  529. package/template/src/utils/useModal.tsx +8 -0
  530. package/template/src/utils/useMutePSTN.ts +45 -2
  531. package/template/src/utils/useMuteToggleLocal.ts +125 -49
  532. package/template/src/utils/useOrientation.native.tsx +3 -0
  533. package/template/src/utils/useOrientation.tsx +59 -0
  534. package/template/src/utils/useRemoteEndCall.ts +4 -4
  535. package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
  536. package/template/src/utils/useRemoteMute.ts +7 -7
  537. package/template/src/utils/useRemoteRequest.ts +84 -0
  538. package/template/src/utils/useSearchParams.tsx +28 -0
  539. package/template/src/utils/useSidePanel.tsx +16 -5
  540. package/template/src/utils/useSpeechToText.ts +102 -0
  541. package/template/src/utils/useString.ts +19 -7
  542. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  543. package/template/src/utils/useSwitchCamera.tsx +19 -0
  544. package/template/src/utils/useToolbar.tsx +59 -0
  545. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  546. package/template/static.d.ts +42 -0
  547. package/template/tsconfig_rsdk_index.json +3 -3
  548. package/template/tsconfig_wsdk_index.json +3 -3
  549. package/template/web/index.html +45 -17
  550. package/template/webpack.commons.js +16 -0
  551. package/template/webpack.rsdk.config.js +1 -2
  552. package/template/webpack.web.config.js +8 -3
  553. package/template/_buckconfig +0 -6
  554. package/template/_gitattributes +0 -1
  555. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  556. package/template/android/app/_BUCK +0 -55
  557. package/template/android/app/build_defs.bzl +0 -19
  558. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  559. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  560. package/template/src/assets/icons.ts +0 -102
  561. package/template/src/components/OAuth.electron.tsx +0 -40
  562. package/template/src/components/OAuth.native.tsx +0 -53
  563. package/template/src/components/OAuth.tsx +0 -29
  564. package/template/src/components/OAuthConfig.ts +0 -77
  565. package/template/src/components/StoreToken.tsx +0 -38
  566. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
  567. package/template/src/components/meeting-info/useMeetingInfo.tsx +0 -70
  568. package/template/src/components/participants/MeParticipant.tsx +0 -38
  569. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
  570. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  571. package/template/src/utils/useCreateMeeting.ts +0 -88
  572. package/template/src/utils/useJoinMeeting.ts +0 -132
@@ -1,4 +1,12 @@
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';
9
+ import {StyleSheet} from 'react-native';
2
10
  import ChatContext, {controlMessageEnum} from '../ChatContext';
3
11
  import Toast from '../../../react-native-toast-message';
4
12
  import {
@@ -10,28 +18,82 @@ import {
10
18
  RaiseHandValue,
11
19
  raiseHandListInterface,
12
20
  } from './Types';
13
- import {ClientRole, useLocalUid, UidType} from '../../../agora-rn-uikit';
21
+ import {ClientRoleType, useLocalUid, UidType} from '../../../agora-rn-uikit';
14
22
  import {filterObject, isEmptyObject} from '../../utils';
15
- import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
23
+ import {useRoomInfo} from '../room-info/useRoomInfo';
16
24
  import {useScreenshare} from '../../subComponents/screenshare/useScreenshare';
17
- import events, {EventPersistLevel} from '../../rtm-events-api';
25
+ import events, {PersistanceLevel} from '../../rtm-events-api';
18
26
  import {EventNames} from '../../rtm-events';
19
- import {useRender} from 'customization-api';
27
+ import {SidePanelType, useContent, useSidePanel} from 'customization-api';
28
+ import TertiaryButton from '../../atoms/TertiaryButton';
29
+ import PrimaryButton from '../../atoms/PrimaryButton';
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';
20
37
 
21
38
  const LiveStreamContext = createContext(null as unknown as liveStreamContext);
22
39
 
23
40
  export const LiveStreamContextConsumer = LiveStreamContext.Consumer;
24
41
 
25
- export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
26
- props,
27
- ) => {
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
+
28
90
  const screenshareContextInstance = useScreenshare();
29
91
  const screenshareContextInstanceRef = useRef<any>();
30
92
  screenshareContextInstanceRef.current = screenshareContextInstance;
31
93
 
32
- const {renderList} = useRender();
33
- const renderListRef = useRef<any>();
34
- renderListRef.current = renderList;
94
+ const {defaultContent} = useContent();
95
+ const defaultContentRef = useRef<any>();
96
+ defaultContentRef.current = defaultContent;
35
97
 
36
98
  const [raiseHandList, setRaiseHandList] = useState<raiseHandListInterface>(
37
99
  {},
@@ -39,24 +101,67 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
39
101
  const raiseHandListRef = useRef<any>();
40
102
  raiseHandListRef.current = raiseHandList;
41
103
 
104
+ const [coHostUids, setCoHostUids] = useState<UidType[]>([]);
105
+ const coHostUidsRef = useRef<any>();
106
+ coHostUidsRef.current = coHostUids;
107
+
108
+ const {sidePanel} = useSidePanel();
109
+ const sidePanelRef = useRef<any>();
110
+ sidePanelRef.current = sidePanel;
111
+
42
112
  React.useEffect(() => {
43
- renderListRef.current = renderList;
44
- }, [renderList]);
113
+ sidePanelRef.current = sidePanel;
114
+ }, [sidePanel]);
115
+
116
+ React.useEffect(() => {
117
+ defaultContentRef.current = defaultContent;
118
+ }, [defaultContent]);
45
119
 
46
120
  React.useEffect(() => {
47
121
  raiseHandListRef.current = raiseHandList;
48
122
  }, [raiseHandList]);
49
123
 
124
+ React.useEffect(() => {
125
+ coHostUidsRef.current = coHostUids;
126
+ }, [coHostUids]);
127
+
128
+ React.useEffect(() => {
129
+ /**
130
+ * when user rejoin the meeting. its showing previosly raised livesteaming request.
131
+ * so deleting raise hand data once the user is offline
132
+ * */
133
+ let newRaiseHandList = raiseHandList;
134
+ const data = Object.keys(
135
+ filterObject(
136
+ defaultContent,
137
+ //@ts-ignore
138
+ ([k, v]) => v?.type === 'rtc' && v.offline === true,
139
+ ),
140
+ );
141
+ let isRaiseHandListChanged = false;
142
+ data &&
143
+ data.length &&
144
+ data.forEach((uid, index) => {
145
+ if (newRaiseHandList[uid]) {
146
+ isRaiseHandListChanged = true;
147
+ delete newRaiseHandList[uid];
148
+ }
149
+ if (data.length - 1 === index && isRaiseHandListChanged) {
150
+ setRaiseHandList(newRaiseHandList);
151
+ }
152
+ });
153
+ }, [defaultContent]);
154
+
50
155
  const localUid = useLocalUid();
51
156
  const localUidRef = useRef<any>();
52
157
  localUidRef.current = localUid;
53
158
 
54
- const {hasUserJoinedRTM} = useContext(ChatContext);
159
+ const {hasUserJoinedRTM, rtmInitTimstamp} = useContext(ChatContext);
55
160
 
56
161
  const {setRtcProps, rtcProps, callActive} = props?.value;
57
162
  const {
58
163
  data: {isHost},
59
- } = useMeetingInfo();
164
+ } = useRoomInfo();
60
165
 
61
166
  const [lastCheckedRequestTimestamp, setLastCheckedRequestTimestamp] =
62
167
  useState(0);
@@ -66,27 +171,67 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
66
171
 
67
172
  const [isPendingRequestToReview, setPendingRequestToReview] = useState(false);
68
173
 
69
- const showToast = (text: string) => {
174
+ const allowToBePresenter = useStringRef(livestreamToastApprovalBtnText);
175
+ const deny = useStringRef(livestreamToastDenyBtnText);
176
+ const showToast = (
177
+ text: string,
178
+ text2: string,
179
+ uid?: UidType,
180
+ toastId?: number,
181
+ ) => {
182
+ let btns: any = {};
183
+ if (uid) {
184
+ //toastId used to hide this particular notification
185
+ btns.toastId = toastId;
186
+ btns.primaryBtn = (
187
+ <PrimaryButton
188
+ containerStyle={style.primaryBtn}
189
+ textStyle={style.primaryBtnText}
190
+ text={allowToBePresenter?.current()}
191
+ onPress={() => {
192
+ hostApprovesRequestOfUID(uid);
193
+ Toast.hide();
194
+ }}
195
+ />
196
+ );
197
+ btns.secondaryBtn = (
198
+ <TertiaryButton
199
+ containerStyle={style.secondaryBtn}
200
+ text={deny?.current()}
201
+ onPress={() => {
202
+ hostRejectsRequestOfUID(uid);
203
+ Toast.hide();
204
+ }}
205
+ />
206
+ );
207
+ } else {
208
+ btns.primaryBtn = null;
209
+ btns.secondaryBtn = null;
210
+ }
211
+
70
212
  Toast.show({
71
- type: 'success',
213
+ leadingIconName: 'info',
214
+ type: 'info',
72
215
  text1: text,
73
- visibilityTime: 1000,
216
+ text2: text2 ? text2 : null,
217
+ visibilityTime: 3000,
218
+ ...btns,
74
219
  });
75
220
  };
76
221
 
77
- const updateRtcProps = (newClientRole: ClientRole) => {
222
+ const updateRtcProps = (newClientRole: ClientRoleType) => {
78
223
  setRtcProps((prevState: any) => ({
79
224
  ...prevState,
80
225
  role:
81
- newClientRole === ClientRole.Audience
82
- ? ClientRole.Audience
83
- : ClientRole.Broadcaster,
226
+ newClientRole === ClientRoleType.ClientRoleAudience
227
+ ? ClientRoleType.ClientRoleAudience
228
+ : ClientRoleType.ClientRoleBroadcaster,
84
229
  }));
85
230
  };
86
231
 
87
232
  const getAttendeeName = (uid: number | string) => {
88
- return renderListRef.current?.[uid]?.name
89
- ? renderListRef.current[uid].name
233
+ return defaultContentRef.current?.[uid]?.name
234
+ ? defaultContentRef.current[uid].name
90
235
  : 'user';
91
236
  };
92
237
 
@@ -96,31 +241,32 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
96
241
  ) => {
97
242
  if (userUID && !isEmptyObject(payload)) {
98
243
  const userId = `${userUID}`;
99
- setRaiseHandList((oldRaisedHandList) => ({
244
+ setRaiseHandList(oldRaisedHandList => ({
100
245
  ...oldRaisedHandList,
101
246
  [userId]: {
102
247
  raised: payload?.raised || RaiseHandValue.FALSE,
103
248
  ts: payload?.ts || Date.now(),
249
+ isProcessed: payload?.isProcessed || false,
104
250
  role:
105
251
  payload?.role ||
106
252
  oldRaisedHandList[userId]?.role ||
107
- ClientRole.Audience,
253
+ ClientRoleType.ClientRoleAudience,
108
254
  },
109
255
  }));
110
256
  }
111
257
  };
112
258
 
113
- const changeClientRoleTo = (newRole: ClientRole) => {
259
+ const changeClientRoleTo = (newRole: ClientRoleType) => {
114
260
  updateRtcProps(newRole);
115
261
  };
116
262
 
117
- const UpdtLocStateAndBCastAttr = (newRole: ClientRole, ts: number) => {
263
+ const UpdtLocStateAndBCastAttr = (newRole: ClientRoleType, ts: number) => {
118
264
  switch (newRole) {
119
- case ClientRole.Audience:
265
+ case ClientRoleType.ClientRoleAudience:
120
266
  addOrUpdateLiveStreamRequest(localUidRef.current, {
121
267
  raised: RaiseHandValue.FALSE,
122
268
  ts: ts,
123
- role: ClientRole.Audience,
269
+ role: ClientRoleType.ClientRoleAudience,
124
270
  });
125
271
  // Audience notfies all host when request is rejected
126
272
  events.send(
@@ -128,16 +274,30 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
128
274
  JSON.stringify({
129
275
  action: LiveStreamControlMessageEnum.notifyHostsInChannel,
130
276
  value: RaiseHandValue.FALSE,
277
+ ts: new Date().getTime(),
278
+ isProcessed: true,
131
279
  }),
132
- EventPersistLevel.LEVEL2,
280
+ PersistanceLevel.Sender,
281
+ );
282
+ //update local cohost state
283
+ setCoHostUids(prevState => {
284
+ return [
285
+ ...prevState.filter(i => i !== parseInt(localUidRef.current)),
286
+ ];
287
+ });
288
+ // Audience notfies all users that co-host permission removed
289
+ events.send(
290
+ LiveStreamControlMessageEnum.coHostRemoved,
291
+ JSON.stringify({uid: localUidRef.current}),
292
+ PersistanceLevel.Sender,
133
293
  );
134
294
  break;
135
- case ClientRole.Broadcaster:
295
+ case ClientRoleType.ClientRoleBroadcaster:
136
296
  // Update local state
137
297
  addOrUpdateLiveStreamRequest(localUidRef.current, {
138
298
  raised: RaiseHandValue.TRUE,
139
299
  ts: ts,
140
- role: ClientRole.Broadcaster,
300
+ role: ClientRoleType.ClientRoleBroadcaster,
141
301
  });
142
302
  // Audience notfies all host when request is approved
143
303
  events.send(
@@ -145,8 +305,20 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
145
305
  JSON.stringify({
146
306
  action: LiveStreamControlMessageEnum.notifyHostsInChannel,
147
307
  value: RaiseHandValue.TRUE,
308
+ ts: new Date().getTime(),
309
+ isProcessed: true,
148
310
  }),
149
- EventPersistLevel.LEVEL2,
311
+ PersistanceLevel.Sender,
312
+ );
313
+ //update local cohost state
314
+ setCoHostUids(prevState => {
315
+ return [...prevState, localUidRef.current];
316
+ });
317
+ // Audience notfies all users that co-host has joined
318
+ events.send(
319
+ LiveStreamControlMessageEnum.coHostJoined,
320
+ JSON.stringify({uid: localUidRef.current}),
321
+ PersistanceLevel.Sender,
150
322
  );
151
323
  default:
152
324
  break;
@@ -157,7 +329,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
157
329
  const pendingRequests = filterObject(
158
330
  raiseHandList,
159
331
  ([k, v]) =>
160
- v?.raised === RaiseHandValue.TRUE && v?.role == ClientRole.Audience,
332
+ v?.raised === RaiseHandValue.TRUE &&
333
+ v?.role == ClientRoleType.ClientRoleAudience,
161
334
  );
162
335
 
163
336
  React.useEffect(() => {
@@ -189,20 +362,24 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
189
362
 
190
363
  /** ******* SETTING UP ROLES BEGINS ******* */
191
364
  React.useEffect(() => {
192
- events.on(EventNames.ROLE_ATTRIBUTE, (data) => {
193
- setRaiseHandList((prevState) => {
365
+ const unsubRoleAttribute = events.on(EventNames.ROLE_ATTRIBUTE, data => {
366
+ setRaiseHandList(prevState => {
194
367
  return {
195
368
  ...prevState,
196
369
  [data.sender]: {
197
370
  ...prevState[data.sender],
198
371
  role:
199
- data.payload in ClientRole
372
+ data.payload in ClientRoleType
200
373
  ? parseInt(data.payload)
201
- : ClientRole.Audience,
374
+ : ClientRoleType.ClientRoleAudience,
202
375
  },
203
376
  };
204
377
  });
205
378
  });
379
+
380
+ return () => {
381
+ unsubRoleAttribute();
382
+ };
206
383
  }, []);
207
384
 
208
385
  React.useEffect(() => {
@@ -210,17 +387,21 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
210
387
  events.send(
211
388
  EventNames.ROLE_ATTRIBUTE,
212
389
  JSON.stringify(
213
- rtcProps.role in ClientRole ? rtcProps.role : ClientRole.Audience,
390
+ rtcProps.role in ClientRoleType
391
+ ? rtcProps.role
392
+ : ClientRoleType.ClientRoleAudience,
214
393
  ),
215
- EventPersistLevel.LEVEL2,
394
+ PersistanceLevel.Sender,
216
395
  );
217
- setRaiseHandList((prevState) => {
396
+ setRaiseHandList(prevState => {
218
397
  return {
219
398
  ...prevState,
220
399
  [localUid]: {
221
400
  ...prevState[localUid],
222
401
  role:
223
- rtcProps.role in ClientRole ? rtcProps.role : ClientRole.Audience,
402
+ rtcProps.role in ClientRoleType
403
+ ? rtcProps.role
404
+ : ClientRoleType.ClientRoleAudience,
224
405
  },
225
406
  };
226
407
  });
@@ -232,117 +413,200 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
232
413
 
233
414
  React.useEffect(() => {
234
415
  /** ********************** HOST EVENTS SECTION BEGINS ********************** */
235
- events.on(EventNames.RAISED_ATTRIBUTE, (data) => {
236
- if (!isHost) return;
237
- const payload = JSON.parse(data.payload);
238
- const action = payload.action;
239
- const value = payload.value;
240
-
241
- switch (action) {
242
- // 1. Host can receive raise hand request with true or false value
243
- case LiveStreamControlMessageEnum.raiseHandRequest:
244
- switch (value) {
245
- case RaiseHandValue.TRUE:
246
- // Step 1: Show notifications
247
- showToast(
248
- `${getAttendeeName(data.sender)} ${
249
- LSNotificationObject.RAISE_HAND_RECEIVED
250
- }`,
251
- );
252
- // 2. All Hosts in channel update their raised state to "true" when attendee raise their hand
253
- addOrUpdateLiveStreamRequest(data.sender, {
254
- ts: data.ts,
255
- raised: RaiseHandValue.TRUE,
256
- role: ClientRole.Audience,
257
- });
258
- break;
259
- case RaiseHandValue.FALSE:
260
- // Step 1: Show notifications
261
- showToast(
262
- `${getAttendeeName(data.sender)} ${
263
- LSNotificationObject.RAISE_HAND_REQUEST_RECALL
264
- }`,
265
- );
266
- // 2. All Hosts in channel update raised state to "false" when attendee recalls their request
267
- addOrUpdateLiveStreamRequest(data.sender, {
268
- ts: data.ts,
269
- raised: RaiseHandValue.FALSE,
270
- role: ClientRole.Audience,
271
- });
272
- default:
273
- break;
274
- }
275
- break;
276
- // 2. All Hosts in channel gets notified when an attendee's request gets approved or rejected
277
- case LiveStreamControlMessageEnum.notifyHostsInChannel:
278
- if (!isHost) return;
279
- switch (value) {
280
- case RaiseHandValue.TRUE:
281
- addOrUpdateLiveStreamRequest(data.sender, {
282
- ts: data.ts,
283
- raised: RaiseHandValue.TRUE,
284
- role: ClientRole.Broadcaster,
285
- });
286
- break;
287
- case RaiseHandValue.FALSE:
288
- addOrUpdateLiveStreamRequest(data.sender, {
289
- ts: data.ts,
290
- raised: RaiseHandValue.FALSE,
291
- role: ClientRole.Audience,
292
- });
293
- break;
294
- default:
295
- break;
296
- }
297
- break;
298
- default:
299
- break;
300
- }
301
- });
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
+ );
302
505
  /** ********************** HOST EVENTS SECTION ENDS ********************** */
303
506
 
304
507
  /** ********************** AUDIENCE EVENTS SECTION BEGINS ********************** */
305
508
  // 1. Audience receives this when the request is accepted by host
306
- events.on(LiveStreamControlMessageEnum.raiseHandRequestAccepted, (data) => {
307
- if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.FALSE)
308
- return;
309
- showToast(LSNotificationObject.RAISE_HAND_ACCEPTED);
310
- // Promote user's privileges to host
311
- changeClientRoleTo(ClientRole.Broadcaster);
312
- // Audience updates its local attributes and notfies all host when request is approved
313
- UpdtLocStateAndBCastAttr(ClientRole.Broadcaster, data.ts);
314
- });
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
+ );
315
524
  /** 2. Audience receives this when the request is rejected by host
316
525
  * 2.a Audience receives this when the request is rejected by host which is not yet approved
317
526
  * 2.b Audience receives this when the request when is demoted by the host
318
527
  */
319
- events.on(LiveStreamControlMessageEnum.raiseHandRequestRejected, (data) => {
320
- /** 2.a */
321
- if (
322
- raiseHandListRef.current[localUidRef.current].role ==
323
- ClientRole.Audience
324
- ) {
325
- showToast(LSNotificationObject.RAISE_HAND_REJECTED);
326
- } else if (
327
- raiseHandListRef.current[localUidRef.current].role ==
328
- ClientRole.Broadcaster
329
- ) {
330
- /** 2.b */
331
- showToast(LSNotificationObject.RAISE_HAND_APPROVED_REQUEST_RECALL);
332
- screenshareContextInstanceRef?.current?.stopUserScreenShare(); // This will not exist on ios
333
-
334
- // Demote user's privileges to audience
335
- changeClientRoleTo(ClientRole.Audience);
336
- }
337
- // Audience updates its local attributes and notfies all host when demoted/request rejected
338
- UpdtLocStateAndBCastAttr(ClientRole.Audience, data.ts);
339
- });
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?.stopScreenshare(); // 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
+ );
340
555
  // 3. Audience when receives kickUser notifies all host when is kicked out
341
- events.on(controlMessageEnum.kickUser, (data) => {
556
+ const unsubKickUser = events.on(controlMessageEnum.kickUser, data => {
342
557
  // Audience updates its local attributes and notfies all host when they(audience) are kicked out
343
- UpdtLocStateAndBCastAttr(ClientRole.Audience, data.ts);
558
+ UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleAudience, data.ts);
344
559
  });
560
+ // 4. Host promote audience as co-host
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
+ );
571
+ // 4. New co-host has joined
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
+ );
585
+ // 5. Co-host removed
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
+ );
345
599
  /** ********************** AUDIENCE EVENTS SECTION ENDS ********************** */
600
+
601
+ return () => {
602
+ unsubRaisedAttribute();
603
+ unsubRaiseHandReqAcpt();
604
+ unsubRaiseHandReqRej();
605
+ unsubKickUser();
606
+ unsubPromoteAsCoHost();
607
+ unsubCoHostJoined();
608
+ unsubCoHostRemoved();
609
+ };
346
610
  }, []);
347
611
 
348
612
  /** ******* EVENT LISTENERS SECTION ENDS ******* */
@@ -354,27 +618,53 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
354
618
  */
355
619
 
356
620
  const hostApprovesRequestOfUID = (uid: UidType) => {
357
- addOrUpdateLiveStreamRequest(uid, {
358
- raised: RaiseHandValue.TRUE,
359
- ts: new Date().getTime(),
360
- });
361
- events.send(
362
- LiveStreamControlMessageEnum.raiseHandRequestAccepted,
363
- '',
364
- EventPersistLevel.LEVEL1,
365
- uid,
366
- );
621
+ if (!raiseHandListRef.current[uid]?.isProcessed) {
622
+ addOrUpdateLiveStreamRequest(uid, {
623
+ raised: RaiseHandValue.TRUE,
624
+ ts: new Date().getTime(),
625
+ isProcessed: true,
626
+ });
627
+ events.send(
628
+ LiveStreamControlMessageEnum.raiseHandRequestAccepted,
629
+ '',
630
+ PersistanceLevel.None,
631
+ uid,
632
+ );
633
+ } else {
634
+ Toast.hide();
635
+ setTimeout(() => {
636
+ showToast(requestAlreadyProcessed?.current(), null);
637
+ });
638
+ }
367
639
  };
368
640
 
369
641
  const hostRejectsRequestOfUID = (uid: UidType) => {
370
- addOrUpdateLiveStreamRequest(uid, {
371
- raised: RaiseHandValue.FALSE,
372
- ts: new Date().getTime(),
373
- });
642
+ if (!raiseHandListRef.current[uid]?.isProcessed) {
643
+ addOrUpdateLiveStreamRequest(uid, {
644
+ raised: RaiseHandValue.FALSE,
645
+ ts: new Date().getTime(),
646
+ isProcessed: true,
647
+ });
648
+ events.send(
649
+ LiveStreamControlMessageEnum.raiseHandRequestRejected,
650
+ '',
651
+ PersistanceLevel.None,
652
+ uid,
653
+ );
654
+ } else {
655
+ Toast.hide();
656
+ setTimeout(() => {
657
+ showToast(requestAlreadyProcessed?.current(), null);
658
+ });
659
+ }
660
+ };
661
+
662
+ // promote audience as co-host
663
+ const promoteAudienceAsCoHost = async (uid: UidType): Promise<void> => {
374
664
  events.send(
375
- LiveStreamControlMessageEnum.raiseHandRequestRejected,
665
+ LiveStreamControlMessageEnum.promoteAsCoHost,
376
666
  '',
377
- EventPersistLevel.LEVEL1,
667
+ PersistanceLevel.None,
378
668
  uid,
379
669
  );
380
670
  };
@@ -392,14 +682,19 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
392
682
  // If hand is already raised, skip the call
393
683
  if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.TRUE)
394
684
  return;
395
- showToast(LSNotificationObject.RAISE_HAND_REQUEST);
685
+ showToast(
686
+ raiseHandRequestToastHeading?.current(),
687
+ raiseHandRequestToastSubHeading?.current(),
688
+ );
396
689
  events.send(
397
690
  EventNames.RAISED_ATTRIBUTE,
398
691
  JSON.stringify({
399
692
  action: LiveStreamControlMessageEnum.raiseHandRequest,
400
693
  value: RaiseHandValue.TRUE,
694
+ ts: new Date().getTime(),
695
+ isProcessed: false,
401
696
  }),
402
- EventPersistLevel.LEVEL1,
697
+ PersistanceLevel.Sender,
403
698
  );
404
699
  // Update local state
405
700
  addOrUpdateLiveStreamRequest(localUidRef.current, {
@@ -417,15 +712,30 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
417
712
  * else: Audience Request was not approved by host, and was pending
418
713
  */
419
714
  if (
420
- raiseHandList[localUidRef.current]?.role == ClientRole.Broadcaster &&
715
+ raiseHandList[localUidRef.current]?.role ==
716
+ ClientRoleType.ClientRoleBroadcaster &&
421
717
  raiseHandList[localUidRef.current]?.raised === RaiseHandValue.TRUE
422
718
  ) {
423
- screenshareContextInstanceRef?.current?.stopUserScreenShare(); // This will not exist on ios
719
+ screenshareContextInstanceRef?.current?.stopScreenshare(); // This will not exist on ios
424
720
  // Change role
425
- changeClientRoleTo(ClientRole.Audience);
721
+ changeClientRoleTo(ClientRoleType.ClientRoleAudience);
426
722
  }
427
- UpdtLocStateAndBCastAttr(ClientRole.Audience, new Date().getTime());
428
- showToast(LSNotificationObject.RAISE_HAND_REQUEST_RECALL_LOCAL);
723
+ //notify host users
724
+ events.send(
725
+ EventNames.RAISED_ATTRIBUTE,
726
+ JSON.stringify({
727
+ action: LiveStreamControlMessageEnum.raiseHandRequest,
728
+ value: RaiseHandValue.FALSE,
729
+ ts: new Date().getTime(),
730
+ isProcessed: true,
731
+ }),
732
+ PersistanceLevel.Sender,
733
+ );
734
+ UpdtLocStateAndBCastAttr(
735
+ ClientRoleType.ClientRoleAudience,
736
+ new Date().getTime(),
737
+ );
738
+ showToast(raiseHandRequestRecallLocalToastHeading?.current(), null);
429
739
  };
430
740
 
431
741
  /** ******* AUDIENCE CONTROLS SECTION ENDS ******* */
@@ -433,6 +743,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
433
743
  return (
434
744
  <LiveStreamContext.Provider
435
745
  value={{
746
+ coHostUids: coHostUids,
436
747
  setLastCheckedRequestTimestamp,
437
748
  isPendingRequestToReview,
438
749
  raiseHandList,
@@ -440,6 +751,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
440
751
  hostRejectsRequestOfUID,
441
752
  audienceSendsRequest,
442
753
  audienceRecallsRequest,
754
+ promoteAudienceAsCoHost,
443
755
  }}>
444
756
  {props.children}
445
757
  </LiveStreamContext.Provider>
@@ -447,3 +759,19 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
447
759
  };
448
760
 
449
761
  export default LiveStreamContext;
762
+
763
+ const style = StyleSheet.create({
764
+ secondaryBtn: {marginLeft: 16, height: 40, paddingVertical: 5},
765
+ primaryBtn: {
766
+ minWidth: 'auto',
767
+ paddingHorizontal: 12,
768
+ height: 40,
769
+ borderRadius: 4,
770
+ paddingVertical: 5,
771
+ },
772
+ primaryBtnText: {
773
+ fontWeight: '600',
774
+ fontSize: 16,
775
+ paddingLeft: 0,
776
+ },
777
+ });