agora-appbuilder-core 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/package.json +3 -3
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +29 -29
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +28491 -23647
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/.eslintrc.js +5 -0
  10. package/template/agora-rn-uikit/package.json +14 -14
  11. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  12. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  13. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  14. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +6 -6
  15. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +79 -38
  16. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +26 -17
  17. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
  19. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  20. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  21. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +5 -2
  22. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
  23. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  24. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
  25. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  26. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
  27. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  28. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
  29. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  30. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  31. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -7
  32. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -7
  33. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +6 -7
  34. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -8
  35. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -9
  36. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -8
  37. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +14 -13
  38. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -7
  39. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -7
  40. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -6
  41. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +20 -3
  42. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  43. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -1
  44. package/template/agora-rn-uikit/src/Rtc/Create.tsx +138 -100
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +55 -28
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +177 -77
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +8 -0
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +56 -12
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +47 -17
  51. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
  52. package/template/agora-rn-uikit/src/index.ts +15 -9
  53. package/template/android/app/build.gradle +59 -156
  54. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  55. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  56. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  57. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  58. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  59. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +22 -36
  60. package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
  61. package/template/android/app/src/main/res/values/strings.xml +3 -0
  62. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  63. package/template/android/build.gradle +19 -33
  64. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  65. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  66. package/template/android/gradle.properties +18 -4
  67. package/template/android/gradlew +165 -104
  68. package/template/android/gradlew.bat +12 -23
  69. package/template/android/settings.gradle +1 -0
  70. package/template/bridge/rtc/webNg/RtcEngine.ts +200 -70
  71. package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -26
  72. package/template/bridge/rtc/webNg/Types.ts +20 -5
  73. package/template/bridge/rtc/webNg/index.ts +81 -14
  74. package/template/bridge/rtm/web/index.ts +5 -3
  75. package/template/configTransform.js +16 -1
  76. package/template/customization-api/action-library.ts +4 -16
  77. package/template/customization-api/app-state.ts +15 -8
  78. package/template/customization-api/customEvents.ts +7 -2
  79. package/template/customization-api/customize.ts +1 -1
  80. package/template/customization-api/index.ts +4 -0
  81. package/template/customization-api/sub-components.ts +17 -16
  82. package/template/customization-api/temp.ts +52 -0
  83. package/template/customization-api/typeDefinition.ts +34 -46
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/createHook.ts +24 -6
  87. package/template/customization-implementation/index.ts +1 -2
  88. package/template/customization-implementation/useCustomization.tsx +5 -7
  89. package/template/defaultConfig.js +72 -0
  90. package/template/global.d.ts +14 -1
  91. package/template/index.js +1 -4
  92. package/template/index.web.js +0 -5
  93. package/template/index.wsdk.tsx +1 -12
  94. package/template/ios/.xcode.env +11 -0
  95. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  96. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  97. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  98. package/template/ios/HelloWorld/Info.plist +8 -2
  99. package/template/ios/HelloWorld/main.m +2 -1
  100. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +533 -17
  101. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  102. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  103. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  104. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  105. package/template/ios/HelloWorldTests/Info.plist +2 -2
  106. package/template/ios/Podfile +54 -20
  107. package/template/ios/Podfile.lock +809 -0
  108. package/template/ios/ScreenSharing/Info.plist +15 -0
  109. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  110. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  111. package/template/jest.config.js +4 -0
  112. package/template/metro.config.js +7 -32
  113. package/template/package.json +53 -39
  114. package/template/react-native-toast-message/index.d.ts +3 -1
  115. package/template/react-native-toast-message/index.js +1 -0
  116. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  117. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  118. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  119. package/template/react-native-toast-message/src/index.js +3 -1
  120. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  121. package/template/src/App.tsx +53 -69
  122. package/template/src/AppRoutes.tsx +90 -0
  123. package/template/src/AppWrapper.tsx +42 -25
  124. package/template/src/SDKAppWrapper.tsx +89 -57
  125. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  126. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  127. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  128. package/template/src/app-state/useVideoQuality.tsx +39 -0
  129. package/template/src/assets/font-styles.css +175 -3
  130. package/template/src/assets/fonts/icomoon.ttf +0 -0
  131. package/template/src/assets/selection.json +1 -1
  132. package/template/src/atoms/ActionMenu.tsx +50 -11
  133. package/template/src/atoms/Avatar.tsx +51 -0
  134. package/template/src/atoms/Card.tsx +21 -8
  135. package/template/src/atoms/Carousel.native.tsx +105 -0
  136. package/template/src/atoms/Carousel.tsx +103 -0
  137. package/template/src/atoms/Checkbox.tsx +98 -0
  138. package/template/src/atoms/CircularProgress.tsx +0 -1
  139. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  140. package/template/src/atoms/CustomIcon.tsx +46 -0
  141. package/template/src/atoms/DropDownMulti.tsx +349 -0
  142. package/template/src/atoms/Dropdown.tsx +3 -3
  143. package/template/src/atoms/IconButton.tsx +52 -9
  144. package/template/src/atoms/ImageIcon.tsx +18 -5
  145. package/template/src/atoms/InlineNotification.tsx +81 -0
  146. package/template/src/atoms/InviteInfo.tsx +4 -4
  147. package/template/src/atoms/MeetingLink.tsx +160 -0
  148. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  149. package/template/src/atoms/Popup.tsx +49 -27
  150. package/template/src/atoms/PrimaryButton.tsx +19 -5
  151. package/template/src/atoms/RecordingInfo.tsx +8 -5
  152. package/template/src/atoms/SecondaryButton.tsx +2 -0
  153. package/template/src/atoms/Spacer.tsx +1 -0
  154. package/template/src/atoms/TertiaryButton.tsx +35 -5
  155. package/template/src/atoms/TextInput.tsx +2 -1
  156. package/template/src/atoms/Toolbar.tsx +102 -0
  157. package/template/src/atoms/ToolbarItem.tsx +85 -0
  158. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  159. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  160. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  161. package/template/src/atoms/Tooltip.tsx +30 -13
  162. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  163. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  164. package/template/src/auth/AuthProvider.tsx +500 -0
  165. package/template/src/auth/AuthRoute.tsx +94 -0
  166. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  167. package/template/src/auth/IDPAuth.tsx +67 -0
  168. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  169. package/template/src/auth/UserCancelPopup.tsx +115 -0
  170. package/template/src/auth/config.ts +52 -0
  171. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  172. package/template/src/auth/openIDPURL.native.tsx +51 -0
  173. package/template/src/auth/openIDPURL.tsx +20 -0
  174. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  175. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  176. package/template/src/auth/useIDPAuth.tsx +63 -0
  177. package/template/src/auth/useTokenAuth.tsx +194 -0
  178. package/template/src/components/Chat.tsx +92 -72
  179. package/template/src/components/ChatContext.ts +2 -0
  180. package/template/src/components/ColorConfigure.tsx +0 -1
  181. package/template/src/components/CommonStyles.ts +9 -2
  182. package/template/src/components/Controls.tsx +914 -182
  183. package/template/src/components/Controls1.native.tsx +9 -5
  184. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  185. package/template/src/components/DeviceConfigure.tsx +400 -149
  186. package/template/src/components/DeviceContext.tsx +2 -0
  187. package/template/src/components/EventsConfigure.tsx +722 -82
  188. package/template/src/components/GraphQLProvider.tsx +82 -39
  189. package/template/src/components/GridVideo.tsx +30 -16
  190. package/template/src/components/HostControlView.tsx +11 -14
  191. package/template/src/components/JoinPhrase.tsx +0 -1
  192. package/template/src/components/Leftbar.tsx +110 -0
  193. package/template/src/components/Navbar.tsx +305 -147
  194. package/template/src/components/NavbarMobile.tsx +119 -0
  195. package/template/src/components/Navigation.native.tsx +1 -15
  196. package/template/src/components/{Settings.native.tsx → Navigation.sdk.tsx} +17 -6
  197. package/template/src/components/NetworkQualityContext.tsx +12 -6
  198. package/template/src/components/ParticipantsView.tsx +63 -56
  199. package/template/src/components/PinnedVideo.tsx +191 -119
  200. package/template/src/components/Precall.native.tsx +177 -72
  201. package/template/src/components/Precall.tsx +247 -78
  202. package/template/src/components/RTMConfigure.tsx +205 -67
  203. package/template/src/components/Rightbar.tsx +112 -0
  204. package/template/src/components/Router.electron.ts +1 -0
  205. package/template/src/components/Router.native.ts +1 -0
  206. package/template/src/components/Router.sdk.ts +1 -0
  207. package/template/src/components/Router.ts +1 -0
  208. package/template/src/components/SdkApiContext.tsx +313 -0
  209. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  210. package/template/src/components/SessionContext.tsx +0 -1
  211. package/template/src/components/Settings.tsx +33 -4
  212. package/template/src/components/SettingsView.tsx +44 -9
  213. package/template/src/components/Share.tsx +152 -74
  214. package/template/src/components/StorageContext.tsx +23 -6
  215. package/template/src/components/ToastComponent.tsx +10 -1
  216. package/template/src/components/WhiteboardLayout.tsx +291 -0
  217. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  218. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  219. package/template/src/components/common/Error.tsx +2 -0
  220. package/template/src/components/common/Logo.tsx +2 -2
  221. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  222. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  223. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  224. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  225. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  226. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  227. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  228. package/template/src/components/livestream/Types.ts +36 -20
  229. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  230. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  231. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  232. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  233. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  234. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  235. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  236. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  237. package/template/src/components/participants/Participant.tsx +45 -16
  238. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  239. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  240. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  241. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  242. package/template/src/components/popups/InvitePopup.tsx +110 -45
  243. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  244. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  245. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  246. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  247. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  248. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  249. package/template/src/components/precall/LocalMute.tsx +69 -45
  250. package/template/src/components/precall/PermissionHelper.tsx +56 -28
  251. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  252. package/template/src/components/precall/VideoFallback.tsx +173 -0
  253. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  254. package/template/src/components/precall/VideoPreview.tsx +29 -164
  255. package/template/src/components/precall/index.tsx +2 -0
  256. package/template/src/components/precall/joinCallBtn.native.tsx +12 -5
  257. package/template/src/components/precall/joinCallBtn.tsx +13 -4
  258. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  259. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  260. package/template/src/components/precall/meetingTitle.tsx +37 -11
  261. package/template/src/components/precall/selectDevice.tsx +5 -5
  262. package/template/src/components/precall/textInput.tsx +17 -19
  263. package/template/src/components/precall/usePreCall.tsx +33 -1
  264. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  265. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  266. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  267. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  268. package/template/src/components/recordings/recording-table.tsx +154 -0
  269. package/template/src/components/recordings/style.ts +183 -0
  270. package/template/src/components/recordings/utils.ts +80 -0
  271. package/template/src/components/room-info/useRoomInfo.tsx +128 -0
  272. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  273. package/template/src/components/useShareLink.tsx +28 -63
  274. package/template/src/components/useUserPreference.tsx +82 -16
  275. package/template/src/components/useVideoCall.tsx +93 -1
  276. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  277. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  278. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  279. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  280. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  281. package/template/src/components/virtual-background/VButils.ts +104 -0
  282. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  283. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  284. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  285. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  286. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  287. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  288. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  289. package/template/src/components/virtual-background/images/index.ts +37 -0
  290. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  291. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  292. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  293. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  294. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  295. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  296. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  297. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  298. package/template/src/components/virtual-background/useVB.tsx +267 -0
  299. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  300. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  301. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  302. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  303. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  304. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  305. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  306. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  307. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  308. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  309. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  310. package/template/src/language/default-labels/commonLabels.ts +51 -14
  311. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  312. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  313. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  314. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  315. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  316. package/template/src/pages/Create.tsx +136 -106
  317. package/template/src/pages/Endcall.tsx +2 -2
  318. package/template/src/pages/Join.tsx +82 -40
  319. package/template/src/pages/Login.tsx +26 -0
  320. package/template/src/pages/VideoCall.tsx +329 -127
  321. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -6
  322. package/template/src/pages/video-call/ActionSheet.tsx +55 -15
  323. package/template/src/pages/video-call/ActionSheetContent.tsx +498 -308
  324. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  325. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  326. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  327. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  328. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  329. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  330. package/template/src/pages/video-call/VideoCallMobileView.tsx +231 -89
  331. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  332. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -84
  333. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  334. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  335. package/template/src/pages/video-call/VideoRenderer.tsx +343 -57
  336. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  337. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  338. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  339. package/template/src/pages/video-call/index.ts +42 -8
  340. package/template/src/rtm/RTMEngine.ts +17 -4
  341. package/template/src/rtm-events/constants.ts +21 -3
  342. package/template/src/rtm-events-api/Events.ts +7 -4
  343. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  344. package/template/src/rtm-events-api/types.ts +5 -5
  345. package/template/src/selection.json +1 -0
  346. package/template/src/subComponents/ChatBubble.tsx +87 -67
  347. package/template/src/subComponents/ChatContainer.tsx +70 -49
  348. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  349. package/template/src/subComponents/ChatInput.tsx +31 -80
  350. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  351. package/template/src/subComponents/Checkbox.tsx +7 -6
  352. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  353. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  354. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  355. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  356. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  357. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  358. package/template/src/subComponents/Loading.tsx +60 -0
  359. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  360. package/template/src/subComponents/LocalEndCall.tsx +61 -24
  361. package/template/src/subComponents/LocalSwitchCamera.tsx +57 -13
  362. package/template/src/subComponents/LocalVideoMute.tsx +105 -36
  363. package/template/src/subComponents/LogoutButton.tsx +1 -1
  364. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  365. package/template/src/subComponents/Recording.tsx +29 -9
  366. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  367. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  368. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  369. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  370. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  371. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  372. package/template/src/subComponents/SelectDevice.tsx +103 -34
  373. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  374. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  375. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  376. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  377. package/template/src/subComponents/ToastConfig.tsx +70 -61
  378. package/template/src/subComponents/caption/Caption.tsx +132 -0
  379. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  380. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  381. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  382. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  383. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  384. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  385. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  386. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  387. package/template/src/subComponents/caption/index.ts +3 -0
  388. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  389. package/template/src/subComponents/caption/proto/test.proto +23 -0
  390. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  391. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  392. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  393. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  394. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  395. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  396. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  397. package/template/src/subComponents/caption/utils.ts +126 -0
  398. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  399. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  400. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  401. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  402. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  403. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  404. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  405. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  406. package/template/src/subComponents/recording/useRecording.tsx +251 -138
  407. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  408. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +39 -15
  409. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +275 -69
  410. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +193 -124
  411. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  412. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  413. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  414. package/template/src/theme/index.ts +13 -0
  415. package/template/src/utils/SdkEvents.ts +37 -14
  416. package/template/src/utils/SdkMethodEvents.ts +101 -0
  417. package/template/src/utils/axiomLogger.ts +117 -0
  418. package/template/src/utils/book.jpg +0 -0
  419. package/template/src/utils/common.tsx +118 -6
  420. package/template/src/utils/constants.ts +4 -0
  421. package/template/src/utils/getCustomRoute.ts +7 -0
  422. package/template/src/utils/index.tsx +34 -0
  423. package/template/src/utils/useActionSheet.tsx +50 -0
  424. package/template/src/utils/useActiveSpeaker.ts +38 -0
  425. package/template/src/utils/useAppState.ts +17 -0
  426. package/template/src/utils/useAsyncEffect.ts +138 -0
  427. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +27 -26
  428. package/template/src/utils/useEndCall.ts +65 -0
  429. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  430. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  431. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  432. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  433. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  434. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  435. package/template/src/utils/useIsPSTN.ts +3 -3
  436. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  437. package/template/src/utils/useJoinRoom.ts +199 -0
  438. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  439. package/template/src/{components/OAuth.tsx → utils/useMenu.tsx} +16 -15
  440. package/template/src/utils/useModal.tsx +8 -0
  441. package/template/src/utils/useMutePSTN.ts +2 -2
  442. package/template/src/utils/useMuteToggleLocal.ts +121 -96
  443. package/template/src/utils/useRemoteEndCall.ts +4 -4
  444. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  445. package/template/src/utils/useRemoteMute.ts +7 -7
  446. package/template/src/utils/useRemoteRequest.ts +7 -7
  447. package/template/src/utils/useSearchParams.tsx +18 -0
  448. package/template/src/utils/useString.ts +13 -3
  449. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  450. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → utils/useSwitchCamera.tsx} +12 -11
  451. package/template/src/utils/useToolbar.tsx +59 -0
  452. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  453. package/template/static.d.ts +42 -0
  454. package/template/tsconfig_rsdk_index.json +3 -3
  455. package/template/tsconfig_wsdk_index.json +1 -1
  456. package/template/web/index.html +20 -0
  457. package/template/webpack.commons.js +21 -10
  458. package/template/webpack.rsdk.config.js +1 -2
  459. package/template/webpack.web.config.js +7 -3
  460. package/template/_buckconfig +0 -6
  461. package/template/_gitattributes +0 -1
  462. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  463. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  464. package/template/android/app/_BUCK +0 -55
  465. package/template/android/app/build_defs.bzl +0 -19
  466. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  467. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  468. package/template/src/components/OAuth.electron.tsx +0 -41
  469. package/template/src/components/OAuth.native.tsx +0 -55
  470. package/template/src/components/OAuthConfig.ts +0 -77
  471. package/template/src/components/StoreToken.tsx +0 -39
  472. package/template/src/components/meeting-info/useMeetingInfo.tsx +0 -70
  473. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  474. package/template/src/utils/useButtonTemplate.tsx +0 -44
  475. package/template/src/utils/useJoinMeeting.ts +0 -132
@@ -1,16 +1,16 @@
1
1
  /*
2
2
  ********************************************
3
3
  Copyright © 2022 Agora Lab, Inc., all rights reserved.
4
- AppBuilder and all associated components, source code, APIs, services, and documentation
5
- (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
- accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
- Use without a license or in violation of any license terms and conditions (including use for
8
- any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
- information visit https://appbuilder.agora.io.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
12
  import React, {useContext, useEffect, useRef, useState} from 'react';
13
- import {PropsContext, UidType} from '../../../agora-rn-uikit';
13
+ import {DispatchContext, PropsContext, UidType} from '../../../agora-rn-uikit';
14
14
  import {ScreenshareContext} from './useScreenshare';
15
15
  import {
16
16
  getGridLayoutName,
@@ -18,38 +18,37 @@ import {
18
18
  useChangeDefaultLayout,
19
19
  useSetPinnedLayout,
20
20
  } from '../../pages/video-call/DefaultLayouts';
21
- import {useRecording} from '../recording/useRecording';
22
21
  import {useScreenContext} from '../../components/contexts/ScreenShareContext';
23
- import events, {EventPersistLevel} from '../../rtm-events-api';
22
+ import events, {PersistanceLevel} from '../../rtm-events-api';
24
23
  import {EventActions, EventNames} from '../../rtm-events';
25
24
  import {IAgoraRTC} from 'agora-rtc-sdk-ng';
26
- import useRecordingLayoutQuery from '../recording/useRecordingLayoutQuery';
27
- import {useString} from '../../utils/useString';
28
25
  import {timeNow} from '../../rtm/utils';
29
26
  import {
30
27
  controlMessageEnum,
31
28
  useLayout,
32
- useRender,
29
+ useContent,
33
30
  useRtc,
34
31
  } from 'customization-api';
35
32
  import {filterObject} from '../../utils';
33
+ import Toast from '../../../react-native-toast-message';
34
+ import {useString} from '../../utils/useString';
35
+ import {
36
+ videoRoomScreenShareErrorToastHeading,
37
+ videoRoomScreenShareErrorToastSubHeading,
38
+ } from '../../language/default-labels/videoCallScreenLabels';
36
39
 
37
40
  export const ScreenshareContextConsumer = ScreenshareContext.Consumer;
38
41
 
39
42
  export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
43
+ const toastHeading = useString(videoRoomScreenShareErrorToastHeading)();
44
+ const toastSubHeading = useString(videoRoomScreenShareErrorToastSubHeading)();
40
45
  const [isScreenshareActive, setScreenshareActive] = useState(false);
46
+ const {dispatch} = useContext(DispatchContext);
41
47
  const rtc = useRtc();
42
- const {dispatch} = rtc;
43
- const {renderList, activeUids, lastJoinedUid, pinnedUid} = useRender();
48
+ const {defaultContent, activeUids, pinnedUid, secondaryPinnedUid} =
49
+ useContent();
44
50
  const isPinned = useRef(0);
45
- const {isRecordingActive} = useRecording();
46
- const {executeNormalQuery, executePresenterQuery} = useRecordingLayoutQuery();
47
51
  const {setScreenShareData, screenShareData} = useScreenContext();
48
- // commented for v1 release
49
- // const getScreenShareName = useString('screenshareUserName');
50
- // const userText = useString('remoteUserDefaultLabel')();
51
- const getScreenShareName = (name: string) => `${name}'s screenshare`;
52
- const userText = 'User';
53
52
  const setPinnedLayout = useSetPinnedLayout();
54
53
  const changeLayout = useChangeDefaultLayout();
55
54
  const {currentLayout} = useLayout();
@@ -58,16 +57,23 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
58
57
  const {channel, appId, screenShareUid, screenShareToken, encryption} =
59
58
  useContext(PropsContext).rtcProps;
60
59
 
61
- const renderListRef = useRef({renderList: renderList});
60
+ const defaultContentRef = useRef({defaultContent: defaultContent});
62
61
  const pinnedUidRef = useRef({pinnedUid: pinnedUid});
62
+ const secondaryPinnedUidRef = useRef({
63
+ secondaryPinnedUid: secondaryPinnedUid,
64
+ });
63
65
 
64
66
  useEffect(() => {
65
67
  pinnedUidRef.current.pinnedUid = pinnedUid;
66
68
  }, [pinnedUid]);
67
69
 
68
70
  useEffect(() => {
69
- renderListRef.current.renderList = renderList;
70
- }, [renderList]);
71
+ secondaryPinnedUidRef.current.secondaryPinnedUid = secondaryPinnedUid;
72
+ }, [secondaryPinnedUid]);
73
+
74
+ useEffect(() => {
75
+ defaultContentRef.current.defaultContent = defaultContent;
76
+ }, [defaultContent]);
71
77
 
72
78
  useEffect(() => {
73
79
  currentLayoutRef.current.currentLayout = currentLayout;
@@ -85,7 +91,7 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
85
91
  const data = filterObject(screenShareData, ([k, v]) => v?.isActive);
86
92
  if (data) {
87
93
  const recentScreenshare = Object.keys(data)
88
- .map((i) => parseInt(i))
94
+ .map(i => parseInt(i))
89
95
  .sort((a, b) => {
90
96
  return data[a].ts - data[b].ts;
91
97
  });
@@ -95,21 +101,44 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
95
101
  isPinned.current !== recentScreenshare[0] &&
96
102
  activeUids.indexOf(recentScreenshare[0]) !== -1
97
103
  ) {
98
- triggerChangeLayout(true, recentScreenshare[0]);
104
+ triggerChangeLayout(
105
+ true,
106
+ recentScreenshare[0],
107
+ defaultContentRef.current.defaultContent[recentScreenshare[0]]
108
+ ?.parentUid,
109
+ );
99
110
  }
100
111
  }
101
112
  }
102
113
  }, [activeUids, screenShareData]);
103
114
 
104
- const triggerChangeLayout = (pinned: boolean, screenShareUid?: UidType) => {
115
+ const triggerChangeLayout = (
116
+ pinned: boolean,
117
+ screenShareUid?: UidType,
118
+ parentUid?: UidType,
119
+ ) => {
105
120
  let layout = currentLayoutRef.current.currentLayout;
106
121
  //screenshare is started set the layout to Pinned View
107
122
  if (pinned && screenShareUid) {
108
123
  isPinned.current = screenShareUid;
109
124
  dispatch({
110
- type: 'SwapVideo',
125
+ type: 'UserPin',
111
126
  value: [screenShareUid],
112
127
  });
128
+ if (parentUid && !secondaryPinnedUidRef.current.secondaryPinnedUid) {
129
+ dispatch({
130
+ type: 'UserSecondaryPin',
131
+ value: [parentUid],
132
+ });
133
+ } else if (
134
+ parentUid &&
135
+ secondaryPinnedUidRef.current.secondaryPinnedUid
136
+ ) {
137
+ dispatch({
138
+ type: 'ActiveSpeaker',
139
+ value: [parentUid],
140
+ });
141
+ }
113
142
  layout !== getPinnedLayoutName() && setPinnedLayout();
114
143
  } else {
115
144
  isPinned.current = 0;
@@ -119,132 +148,161 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
119
148
  };
120
149
 
121
150
  useEffect(() => {
122
- events.on(controlMessageEnum.kickScreenshare, () => {
123
- //if screenscreen already active. then below method will stop the screen share
124
- // @ts-ignore
125
- rtc.RtcEngine.startScreenshare();
126
- });
127
-
128
- events.on(EventNames.SCREENSHARE_ATTRIBUTE, (data) => {
129
- const payload = JSON.parse(data.payload);
130
- const action = payload.action;
131
- const value = payload.value;
151
+ const unsubKickScreenshare = events.on(
152
+ controlMessageEnum.kickScreenshare,
153
+ () => {
154
+ //if screenscreen already active. then below method will stop the screen share
155
+ // @ts-ignore
156
+ rtc.RtcEngineUnsafe.startScreenshare();
157
+ },
158
+ );
159
+ const unsubScreenshareAttribute = events.on(
160
+ EventNames.SCREENSHARE_ATTRIBUTE,
161
+ data => {
162
+ const payload = JSON.parse(data.payload);
163
+ const action = payload.action;
164
+ const value = payload.value;
132
165
 
133
- const screenUidOfUser =
134
- renderListRef.current.renderList[data.sender].screenUid;
135
- switch (action) {
136
- case EventActions.SCREENSHARE_STARTED:
137
- setScreenShareData((prevState) => {
138
- return {
139
- ...prevState,
140
- [screenUidOfUser]: {
141
- name: renderListRef.current.renderList[screenUidOfUser]?.name,
142
- isActive: true,
143
- ts: value || 0,
144
- },
145
- };
146
- });
147
- break;
148
- case EventActions.SCREENSHARE_STOPPED:
149
- setScreenShareData((prevState) => {
150
- return {
151
- ...prevState,
152
- [screenUidOfUser]: {
153
- name: renderListRef.current.renderList[screenUidOfUser]?.name,
154
- isActive: false,
155
- ts: value || 0,
156
- },
157
- };
158
- });
159
- //if remote user started/stopped the screenshare then change the layout to pinned/grid
160
- //if user pinned somebody then don't triggerlayout change
161
- if (!pinnedUidRef.current.pinnedUid) {
162
- triggerChangeLayout(false);
166
+ if (data?.sender) {
167
+ let screenUidOfUser =
168
+ defaultContentRef.current.defaultContent[data?.sender]?.screenUid;
169
+ if (!screenUidOfUser) {
170
+ screenUidOfUser = payload?.screenUidOfUser;
163
171
  }
164
- break;
165
- default:
166
- break;
167
- }
168
- });
169
- }, []);
172
+ if (screenUidOfUser) {
173
+ switch (action) {
174
+ case EventActions.SCREENSHARE_STARTED:
175
+ setScreenShareData(prevState => {
176
+ return {
177
+ ...prevState,
178
+ [screenUidOfUser]: {
179
+ name: defaultContentRef.current.defaultContent[
180
+ screenUidOfUser
181
+ ]?.name,
182
+ isActive: true,
183
+ ts: value || 0,
184
+ },
185
+ };
186
+ });
187
+ break;
188
+ case EventActions.SCREENSHARE_STOPPED:
189
+ setScreenShareData(prevState => {
190
+ return {
191
+ ...prevState,
192
+ [screenUidOfUser]: {
193
+ name: defaultContentRef.current.defaultContent[
194
+ screenUidOfUser
195
+ ]?.name,
196
+ isActive: false,
197
+ ts: value || 0,
198
+ },
199
+ };
200
+ });
201
+ //if remote user started/stopped the screenshare then change the layout to pinned/grid
202
+ //if user pinned somebody then don't triggerlayout change
203
+ if (!pinnedUidRef.current.pinnedUid) {
204
+ triggerChangeLayout(false);
205
+ }
206
+ if (screenUidOfUser === pinnedUidRef.current.pinnedUid) {
207
+ triggerChangeLayout(false);
208
+ dispatch({
209
+ type: 'UserPin',
210
+ value: [0],
211
+ });
212
+ }
213
+ break;
214
+ default:
215
+ break;
216
+ }
217
+ }
218
+ }
219
+ },
220
+ );
170
221
 
171
- useEffect(() => {
172
- // @ts-ignore
173
- rtc.RtcEngine.addListener('ScreenshareStopped', () => {
174
- setScreenshareActive(false);
175
- console.log('STOPPED SHARING');
176
- executeNormalQuery();
177
- events.send(
178
- EventNames.SCREENSHARE_ATTRIBUTE,
179
- JSON.stringify({
180
- action: EventActions.SCREENSHARE_STOPPED,
181
- value: 0,
182
- }),
183
- EventPersistLevel.LEVEL2,
184
- );
185
- setScreenShareData((prevState) => {
186
- return {
187
- ...prevState,
188
- [screenShareUid]: {
189
- ...prevState[screenShareUid],
190
- isActive: false,
191
- ts: 0,
192
- },
193
- };
194
- });
195
- //if local user stopped the screenshare then change layout to grid
196
- //if user pinned somebody then don't triggerlayout change
197
- if (!pinnedUidRef.current.pinnedUid) {
198
- triggerChangeLayout(false);
199
- }
200
- });
222
+ return () => {
223
+ unsubKickScreenshare();
224
+ unsubScreenshareAttribute();
225
+ };
201
226
  }, []);
202
227
 
203
- const executeRecordingQuery = (isScreenActive: boolean) => {
204
- if (isScreenActive) {
205
- console.log('screenshare: Executing presenter query');
206
- // If screen share is not going on, start the screen share by executing the graphql query
207
- executePresenterQuery(screenShareUid);
208
- } else {
209
- // If recording is already going on, stop the recording by executing the graphql query.
210
- executeNormalQuery();
228
+ const ScreenshareStoppedCallback = () => {
229
+ setScreenshareActive(false);
230
+ console.log('STOPPED SHARING');
231
+ events.send(
232
+ EventNames.SCREENSHARE_ATTRIBUTE,
233
+ JSON.stringify({
234
+ action: EventActions.SCREENSHARE_STOPPED,
235
+ value: 0,
236
+ }),
237
+ PersistanceLevel.Sender,
238
+ );
239
+ setScreenShareData(prevState => {
240
+ return {
241
+ ...prevState,
242
+ [screenShareUid]: {
243
+ ...prevState[screenShareUid],
244
+ isActive: false,
245
+ ts: 0,
246
+ },
247
+ };
248
+ });
249
+ //if local user stopped the screenshare then change layout to grid
250
+ //if user pinned somebody then don't triggerlayout change
251
+ if (!pinnedUidRef.current.pinnedUid) {
252
+ triggerChangeLayout(false);
253
+ }
254
+ if (screenShareUid === pinnedUidRef.current.pinnedUid) {
255
+ triggerChangeLayout(false);
256
+ dispatch({
257
+ type: 'UserPin',
258
+ value: [0],
259
+ });
211
260
  }
212
261
  };
213
262
 
263
+ useEffect(() => {
264
+ // @ts-ignore
265
+ rtc.RtcEngineUnsafe.addListener(
266
+ 'onScreenshareStopped',
267
+ ScreenshareStoppedCallback,
268
+ );
269
+ }, []);
270
+
214
271
  const stopUserScreenShare = () => {
215
- if (!isScreenshareActive) return;
272
+ if (!isScreenshareActive) {
273
+ return;
274
+ }
216
275
  userScreenshare(false);
217
276
  };
218
277
  const startUserScreenshare = () => {
219
- if (isScreenshareActive) return;
278
+ if (isScreenshareActive) {
279
+ return;
280
+ }
220
281
  userScreenshare(true);
221
282
  };
222
283
 
223
284
  const userScreenshare = async (isActive: boolean) => {
224
- if (isRecordingActive) {
225
- executeRecordingQuery(isActive);
226
- }
227
- console.log('screenshare query executed');
228
285
  try {
229
286
  // @ts-ignore
230
- await rtc.RtcEngine.startScreenshare(
287
+ await rtc.RtcEngineUnsafe.startScreenshare(
231
288
  screenShareToken,
232
289
  channel,
233
290
  null,
234
291
  screenShareUid,
235
292
  appId,
236
- rtc.RtcEngine as unknown as IAgoraRTC,
293
+ rtc.RtcEngineUnsafe as unknown as IAgoraRTC,
237
294
  encryption as unknown as any,
238
295
  );
239
296
  isActive && setScreenshareActive(true);
240
297
 
241
298
  if (isActive) {
242
299
  // 1. Set local state
243
- setScreenShareData((prevState) => {
300
+ setScreenShareData(prevState => {
244
301
  return {
245
302
  ...prevState,
246
303
  [screenShareUid]: {
247
- name: renderListRef.current.renderList[screenShareUid]?.name,
304
+ name: defaultContentRef.current.defaultContent[screenShareUid]
305
+ ?.name,
248
306
  isActive: true,
249
307
  ts: timeNow(),
250
308
  },
@@ -256,13 +314,22 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
256
314
  JSON.stringify({
257
315
  action: EventActions.SCREENSHARE_STARTED,
258
316
  value: timeNow(),
317
+ screenUidOfUser: screenShareUid,
259
318
  }),
260
- EventPersistLevel.LEVEL2,
319
+ PersistanceLevel.Sender,
261
320
  );
262
321
  }
263
322
  } catch (e) {
264
323
  console.error("can't start the screen share", e);
265
- executeNormalQuery();
324
+ Toast.show({
325
+ leadingIconName: 'alert',
326
+ type: 'error',
327
+ text1: toastHeading,
328
+ text2: toastSubHeading,
329
+ visibilityTime: 1000 * 10,
330
+ primaryBtn: null,
331
+ secondaryBtn: null,
332
+ });
266
333
  }
267
334
  };
268
335
 
@@ -272,6 +339,8 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
272
339
  isScreenshareActive,
273
340
  startUserScreenshare,
274
341
  stopUserScreenShare,
342
+ //@ts-ignore
343
+ ScreenshareStoppedCallback,
275
344
  }}>
276
345
  {props.children}
277
346
  </ScreenshareContext.Provider>
@@ -22,6 +22,8 @@ export const ScreenshareContext = createContext<ScreenshareContextInterface>({
22
22
  isScreenshareActive: false,
23
23
  startUserScreenshare: () => {},
24
24
  stopUserScreenShare: () => {},
25
+ //@ts-ignore
26
+ ScreenshareStoppedCallback: () => {},
25
27
  });
26
28
 
27
29
  const useScreenshare = createHook(ScreenshareContext);
@@ -0,0 +1,85 @@
1
+ import {StyleSheet, Text, View, ViewStyle} from 'react-native';
2
+ import React, {useContext} from 'react';
3
+ import TertiaryButton from '../../atoms/TertiaryButton';
4
+ import PrimaryButton from '../../atoms/PrimaryButton';
5
+ import ThemeConfig from '../../theme';
6
+ import useWaitingRoomAPI from './useWaitingRoomAPI';
7
+ import {DispatchContext, useLocalUid} from '../../../agora-rn-uikit';
8
+ import events, {PersistanceLevel} from '../../rtm-events-api';
9
+ import {EventNames} from '../../rtm-events';
10
+ import Toast from '../../../react-native-toast-message';
11
+ import {useWaitingRoomContext} from '../../../src/components/contexts/WaitingRoomContext';
12
+ import {useString} from '../../../src/utils/useString';
13
+ import {
14
+ peoplePanelWaitingRoomRequestApprovalBtnTxt,
15
+ peoplePanelWaitingRoomRequestDenyBtnTxt,
16
+ } from '../../../src/language/default-labels/videoCallScreenLabels';
17
+
18
+ const WaitingRoomButton = props => {
19
+ const {uid, screenUid, isAccept} = props;
20
+ const {approval} = useWaitingRoomAPI();
21
+ const localUid = useLocalUid();
22
+ const {dispatch} = useContext(DispatchContext);
23
+ const {waitingRoomRef} = useWaitingRoomContext();
24
+ const admintext = useString(peoplePanelWaitingRoomRequestApprovalBtnTxt)();
25
+ const denytext = useString(peoplePanelWaitingRoomRequestDenyBtnTxt)();
26
+ const buttonText = isAccept ? admintext : denytext;
27
+
28
+ const handleButtonClick = () => {
29
+ const approved = isAccept ? true : false;
30
+
31
+ const res = approval({
32
+ host_uid: localUid,
33
+ attendee_uid: uid,
34
+ attendee_screenshare_uid: screenUid,
35
+ approved: approved,
36
+ });
37
+
38
+ // hide Toast if approve/reject from panel
39
+ if (Toast.getToastId() === uid) {
40
+ Toast.hide();
41
+ }
42
+
43
+ dispatch({
44
+ type: 'UpdateRenderList',
45
+ value: [uid, {isInWaitingRoom: false}],
46
+ });
47
+
48
+ if (waitingRoomRef.current) {
49
+ waitingRoomRef.current[uid] = approved ? 'APPROVED' : 'REJECTED';
50
+ }
51
+
52
+ events.send(
53
+ EventNames.WAITING_ROOM_STATUS_UPDATE,
54
+ JSON.stringify({attendee_uid: uid, approved: isAccept}),
55
+ PersistanceLevel.None,
56
+ );
57
+ };
58
+
59
+ const ButtonComponent = isAccept ? PrimaryButton : TertiaryButton;
60
+ const buttonStyles = {
61
+ minWidth: 'auto',
62
+ borderRadius: ThemeConfig.BorderRadius.small,
63
+ paddingHorizontal: 13,
64
+ paddingVertical: isAccept ? 8 : 7,
65
+ };
66
+
67
+ return (
68
+ <View style={{flex: 1}}>
69
+ <ButtonComponent
70
+ containerStyle={buttonStyles as ViewStyle}
71
+ textStyle={{
72
+ fontWeight: '600',
73
+ fontSize: 12,
74
+ lineHeight: 12,
75
+ fontFamily: ThemeConfig.FontFamily.sansPro,
76
+ textTransform: 'capitalize',
77
+ }}
78
+ text={buttonText}
79
+ onPress={handleButtonClick}
80
+ />
81
+ </View>
82
+ );
83
+ };
84
+
85
+ export default WaitingRoomButton;
@@ -0,0 +1,75 @@
1
+ import React from 'react';
2
+ import StorageContext from '../../components/StorageContext';
3
+ import {useRoomInfo} from '../../components/room-info/useRoomInfo';
4
+
5
+ import events, {PersistanceLevel} from '../../rtm-events-api';
6
+ import {EventNames} from '../../rtm-events';
7
+ import useGetName from '../../utils/useGetName';
8
+ import {useLocalUid} from '../../../agora-rn-uikit';
9
+ import {useParams} from '../../components/Router';
10
+
11
+ interface IuseWaitingRoomAPI {
12
+ request: (params: {
13
+ meetingPhrase?: string;
14
+ send_event: boolean;
15
+ }) => Promise<void>;
16
+ approval: (params: {
17
+ host_uid: number;
18
+ attendee_uid: number;
19
+ attendee_screenshare_uid?: number;
20
+ approved: boolean;
21
+ }) => Promise<void>;
22
+ }
23
+
24
+ const WAITING_ROOM_URL = `${$config.BACKEND_ENDPOINT}/v1/channel/join`;
25
+
26
+ const useWaitingRoomAPI = (): IuseWaitingRoomAPI => {
27
+ const {store} = React.useContext(StorageContext);
28
+ const {phrase} = useParams<{phrase: string}>();
29
+ const {
30
+ data: {roomId, isHost},
31
+ } = useRoomInfo();
32
+
33
+ const apiCall = async (method: 'request' | 'approval', payload: string) => {
34
+ const response = await fetch(`${WAITING_ROOM_URL}/${method}`, {
35
+ method: 'POST',
36
+ headers: {
37
+ 'Content-Type': 'application/json',
38
+ authorization: store.token ? `Bearer ${store.token}` : '',
39
+ },
40
+ body: payload,
41
+ });
42
+ const res = await response.json();
43
+ return res;
44
+ };
45
+
46
+ const request = async ({meetingPhrase, send_event}) => {
47
+ const payload = JSON.stringify({
48
+ passphrase: meetingPhrase || phrase,
49
+ send_event: send_event,
50
+ });
51
+ const res = await apiCall('request', payload);
52
+ return res;
53
+ };
54
+
55
+ const approval = async ({
56
+ host_uid,
57
+ attendee_uid,
58
+ approved,
59
+ attendee_screenshare_uid,
60
+ }) => {
61
+ const payload = JSON.stringify({
62
+ passphrase: phrase,
63
+ host_uid: host_uid, //host id of approver,
64
+ attendee_uid: attendee_uid, //uid of whose request was approved,
65
+ attendee_screenshare_uid: attendee_screenshare_uid, // screenshare uid of attendee
66
+ approved: approved, //approval status,
67
+ });
68
+ const res = await apiCall('approval', payload);
69
+ return res;
70
+ };
71
+
72
+ return {request, approval};
73
+ };
74
+
75
+ export default useWaitingRoomAPI;
@@ -3,15 +3,26 @@ import hexadecimalTransparency from '../utils/hexadecimalTransparency';
3
3
  const EmphasisOpacity = {
4
4
  high: 1,
5
5
  medium: 0.85,
6
+ low: 0.4,
6
7
  disabled: 0.4,
7
8
  };
8
9
  const EmphasisPlus = {
9
10
  high: '',
10
11
  medium: hexadecimalTransparency['85%'],
12
+ low: hexadecimalTransparency['40%'],
11
13
  disabled: hexadecimalTransparency['40%'],
12
14
  };
15
+ export interface FontSizes {
16
+ extraLarge: number;
17
+ large: number;
18
+ medium: number;
19
+ normal: number;
20
+ small: number;
21
+ tiny: number;
22
+ }
13
23
  const FontSize: {
14
24
  extraLarge: 32;
25
+ xLarge: 24;
15
26
  large: 20;
16
27
  medium: 18;
17
28
  normal: 16;
@@ -19,12 +30,14 @@ const FontSize: {
19
30
  tiny: 12;
20
31
  } = {
21
32
  extraLarge: 32,
33
+ xLarge: 24,
22
34
  large: 20,
23
35
  medium: 18,
24
36
  normal: 16,
25
37
  small: 14,
26
38
  tiny: 12,
27
39
  };
40
+
28
41
  const FontFamily = {
29
42
  sansPro: 'Source Sans Pro',
30
43
  };