agora-appbuilder-core 4.0.0-test.2 → 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 (442) 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 +22 -22
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +20328 -20229
  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 +78 -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 +39 -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 +117 -111
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +46 -27
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +174 -75
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +2 -2
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +41 -19
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +37 -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 +17 -31
  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 +191 -71
  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 +32 -45
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/index.ts +0 -1
  87. package/template/defaultConfig.js +72 -0
  88. package/template/global.d.ts +9 -1
  89. package/template/index.js +1 -4
  90. package/template/index.web.js +0 -5
  91. package/template/ios/.xcode.env +11 -0
  92. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  93. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  94. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  95. package/template/ios/HelloWorld/Info.plist +7 -1
  96. package/template/ios/HelloWorld/main.m +2 -1
  97. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +81 -119
  98. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  99. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  100. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  101. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  102. package/template/ios/HelloWorldTests/Info.plist +2 -2
  103. package/template/ios/Podfile +51 -21
  104. package/template/ios/Podfile.lock +553 -294
  105. package/template/jest.config.js +4 -0
  106. package/template/metro.config.js +7 -32
  107. package/template/package.json +48 -39
  108. package/template/react-native-toast-message/index.d.ts +3 -1
  109. package/template/react-native-toast-message/index.js +1 -0
  110. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  111. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  112. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  113. package/template/react-native-toast-message/src/index.js +3 -1
  114. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  115. package/template/src/App.tsx +79 -22
  116. package/template/src/AppRoutes.tsx +48 -3
  117. package/template/src/AppWrapper.tsx +25 -21
  118. package/template/src/SDKAppWrapper.tsx +11 -11
  119. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  120. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  121. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  122. package/template/src/app-state/useVideoQuality.tsx +39 -0
  123. package/template/src/assets/font-styles.css +174 -3
  124. package/template/src/assets/fonts/icomoon.ttf +0 -0
  125. package/template/src/assets/selection.json +1 -1
  126. package/template/src/atoms/ActionMenu.tsx +50 -11
  127. package/template/src/atoms/Avatar.tsx +51 -0
  128. package/template/src/atoms/Card.tsx +21 -8
  129. package/template/src/atoms/Carousel.native.tsx +105 -0
  130. package/template/src/atoms/Carousel.tsx +103 -0
  131. package/template/src/atoms/Checkbox.tsx +98 -0
  132. package/template/src/atoms/CircularProgress.tsx +0 -1
  133. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  134. package/template/src/atoms/CustomIcon.tsx +46 -0
  135. package/template/src/atoms/DropDownMulti.tsx +349 -0
  136. package/template/src/atoms/Dropdown.tsx +3 -3
  137. package/template/src/atoms/IconButton.tsx +52 -9
  138. package/template/src/atoms/ImageIcon.tsx +18 -5
  139. package/template/src/atoms/InlineNotification.tsx +81 -0
  140. package/template/src/atoms/InviteInfo.tsx +4 -4
  141. package/template/src/atoms/MeetingLink.tsx +160 -0
  142. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  143. package/template/src/atoms/Popup.tsx +46 -26
  144. package/template/src/atoms/PrimaryButton.tsx +19 -5
  145. package/template/src/atoms/RecordingInfo.tsx +8 -5
  146. package/template/src/atoms/SecondaryButton.tsx +2 -0
  147. package/template/src/atoms/Spacer.tsx +1 -0
  148. package/template/src/atoms/TertiaryButton.tsx +35 -5
  149. package/template/src/atoms/TextInput.tsx +2 -1
  150. package/template/src/atoms/Toolbar.tsx +102 -0
  151. package/template/src/atoms/ToolbarItem.tsx +85 -0
  152. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  153. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  154. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  155. package/template/src/atoms/Tooltip.tsx +30 -13
  156. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  157. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  158. package/template/src/auth/AuthProvider.tsx +30 -32
  159. package/template/src/auth/AuthRoute.tsx +11 -3
  160. package/template/src/auth/IDPAuth.electron.tsx +4 -3
  161. package/template/src/auth/IDPAuth.tsx +10 -2
  162. package/template/src/auth/IDPLogoutComponent.tsx +14 -5
  163. package/template/src/auth/UserCancelPopup.tsx +11 -4
  164. package/template/src/auth/openIDPURL.electron.tsx +5 -4
  165. package/template/src/auth/openIDPURL.tsx +1 -1
  166. package/template/src/auth/useIDPAuth.electron.tsx +6 -3
  167. package/template/src/auth/useIDPAuth.tsx +0 -4
  168. package/template/src/auth/useTokenAuth.tsx +10 -8
  169. package/template/src/components/Chat.tsx +97 -78
  170. package/template/src/components/ChatContext.ts +2 -0
  171. package/template/src/components/ColorConfigure.tsx +0 -1
  172. package/template/src/components/CommonStyles.ts +9 -2
  173. package/template/src/components/Controls.tsx +914 -182
  174. package/template/src/components/Controls1.native.tsx +9 -5
  175. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  176. package/template/src/components/DeviceConfigure.tsx +88 -43
  177. package/template/src/components/DeviceContext.tsx +2 -0
  178. package/template/src/components/EventsConfigure.tsx +685 -81
  179. package/template/src/components/GraphQLProvider.tsx +51 -33
  180. package/template/src/components/GridVideo.tsx +30 -16
  181. package/template/src/components/HostControlView.tsx +11 -14
  182. package/template/src/components/JoinPhrase.tsx +0 -1
  183. package/template/src/components/Leftbar.tsx +110 -0
  184. package/template/src/components/Navbar.tsx +296 -149
  185. package/template/src/components/NavbarMobile.tsx +119 -0
  186. package/template/src/components/NetworkQualityContext.tsx +12 -6
  187. package/template/src/components/ParticipantsView.tsx +62 -55
  188. package/template/src/components/PinnedVideo.tsx +191 -119
  189. package/template/src/components/Precall.native.tsx +155 -72
  190. package/template/src/components/Precall.tsx +225 -73
  191. package/template/src/components/RTMConfigure.tsx +180 -63
  192. package/template/src/components/Rightbar.tsx +112 -0
  193. package/template/src/components/SdkApiContext.tsx +26 -24
  194. package/template/src/components/SdkMuteToggleListener.tsx +8 -12
  195. package/template/src/components/SessionContext.tsx +0 -1
  196. package/template/src/components/Settings.tsx +33 -4
  197. package/template/src/components/SettingsView.tsx +42 -9
  198. package/template/src/components/Share.tsx +130 -72
  199. package/template/src/components/StorageContext.tsx +5 -4
  200. package/template/src/components/ToastComponent.tsx +7 -1
  201. package/template/src/components/WhiteboardLayout.tsx +291 -0
  202. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  203. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  204. package/template/src/components/common/Error.tsx +2 -0
  205. package/template/src/components/common/Logo.tsx +2 -2
  206. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  207. package/template/src/components/contexts/ScreenShareContext.tsx +1 -0
  208. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  209. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  210. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  211. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  212. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  213. package/template/src/components/livestream/Types.ts +36 -20
  214. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  215. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  216. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  217. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  218. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  219. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  220. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  221. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  222. package/template/src/components/participants/Participant.tsx +45 -16
  223. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  224. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  225. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  226. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  227. package/template/src/components/popups/InvitePopup.tsx +105 -44
  228. package/template/src/components/popups/StartScreenSharePopup.native.tsx +26 -23
  229. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  230. package/template/src/components/popups/StopScreenSharePopup.native.tsx +17 -5
  231. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  232. package/template/src/components/precall/LocalMute.tsx +69 -45
  233. package/template/src/components/precall/PermissionHelper.tsx +31 -28
  234. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  235. package/template/src/components/precall/VideoFallback.tsx +173 -0
  236. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  237. package/template/src/components/precall/VideoPreview.tsx +29 -164
  238. package/template/src/components/precall/index.tsx +2 -0
  239. package/template/src/components/precall/joinCallBtn.native.tsx +9 -4
  240. package/template/src/components/precall/joinCallBtn.tsx +9 -4
  241. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  242. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  243. package/template/src/components/precall/meetingTitle.tsx +37 -11
  244. package/template/src/components/precall/selectDevice.tsx +5 -5
  245. package/template/src/components/precall/textInput.tsx +17 -19
  246. package/template/src/components/precall/usePreCall.tsx +4 -4
  247. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  248. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  249. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  250. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  251. package/template/src/components/recordings/recording-table.tsx +154 -0
  252. package/template/src/components/recordings/style.ts +183 -0
  253. package/template/src/components/recordings/utils.ts +80 -0
  254. package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +46 -12
  255. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  256. package/template/src/components/useShareLink.tsx +23 -60
  257. package/template/src/components/useUserPreference.tsx +54 -17
  258. package/template/src/components/useVideoCall.tsx +52 -7
  259. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  260. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  261. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  262. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  263. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  264. package/template/src/components/virtual-background/VButils.ts +104 -0
  265. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  266. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  267. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  268. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  269. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  270. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  271. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  272. package/template/src/components/virtual-background/images/index.ts +37 -0
  273. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  274. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  275. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  276. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  277. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  278. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  279. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  280. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  281. package/template/src/components/virtual-background/useVB.tsx +267 -0
  282. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  283. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  284. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  285. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  286. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  287. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  288. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  289. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  290. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  291. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  292. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  293. package/template/src/language/default-labels/commonLabels.ts +51 -14
  294. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  295. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  296. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  297. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  298. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  299. package/template/src/pages/Create.tsx +118 -92
  300. package/template/src/pages/Endcall.tsx +2 -2
  301. package/template/src/pages/Join.tsx +67 -45
  302. package/template/src/pages/VideoCall.tsx +240 -132
  303. package/template/src/pages/video-call/ActionSheet.native.tsx +33 -3
  304. package/template/src/pages/video-call/ActionSheet.tsx +54 -15
  305. package/template/src/pages/video-call/ActionSheetContent.tsx +487 -313
  306. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  307. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  308. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  309. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  310. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  311. package/template/src/pages/video-call/VideoCallMobileView.tsx +199 -99
  312. package/template/src/pages/video-call/VideoCallScreen.native.tsx +2 -25
  313. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -57
  314. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  315. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  316. package/template/src/pages/video-call/VideoRenderer.tsx +237 -98
  317. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  318. package/template/src/pages/video-call/index.ts +42 -8
  319. package/template/src/rtm/RTMEngine.ts +9 -4
  320. package/template/src/rtm-events/constants.ts +21 -3
  321. package/template/src/rtm-events-api/Events.ts +6 -4
  322. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  323. package/template/src/rtm-events-api/types.ts +5 -5
  324. package/template/src/selection.json +1 -0
  325. package/template/src/subComponents/ChatBubble.tsx +87 -67
  326. package/template/src/subComponents/ChatContainer.tsx +70 -49
  327. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  328. package/template/src/subComponents/ChatInput.tsx +31 -80
  329. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  330. package/template/src/subComponents/Checkbox.tsx +7 -6
  331. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  332. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  333. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  334. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  335. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  336. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  337. package/template/src/subComponents/Loading.tsx +22 -9
  338. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  339. package/template/src/subComponents/LocalEndCall.tsx +48 -31
  340. package/template/src/subComponents/LocalSwitchCamera.tsx +49 -11
  341. package/template/src/subComponents/LocalVideoMute.tsx +87 -35
  342. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  343. package/template/src/subComponents/Recording.tsx +29 -9
  344. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  345. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  346. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  347. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  348. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  349. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  350. package/template/src/subComponents/SelectDevice.tsx +103 -34
  351. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  352. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  353. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  354. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  355. package/template/src/subComponents/ToastConfig.tsx +70 -61
  356. package/template/src/subComponents/caption/Caption.tsx +132 -0
  357. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  358. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  359. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  360. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  361. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  362. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  363. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  364. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  365. package/template/src/subComponents/caption/index.ts +3 -0
  366. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  367. package/template/src/subComponents/caption/proto/test.proto +23 -0
  368. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  369. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  370. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  371. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  372. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  373. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  374. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  375. package/template/src/subComponents/caption/utils.ts +126 -0
  376. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  377. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  378. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  379. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  380. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  381. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  382. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  383. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  384. package/template/src/subComponents/recording/useRecording.tsx +251 -150
  385. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  386. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +18 -13
  387. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +164 -93
  388. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +163 -108
  389. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  390. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  391. package/template/src/theme/index.ts +13 -0
  392. package/template/src/utils/SdkMethodEvents.ts +5 -5
  393. package/template/src/utils/axiomLogger.ts +117 -0
  394. package/template/src/utils/book.jpg +0 -0
  395. package/template/src/utils/common.tsx +96 -1
  396. package/template/src/utils/constants.ts +4 -0
  397. package/template/src/utils/getCustomRoute.ts +7 -0
  398. package/template/src/utils/index.tsx +34 -0
  399. package/template/src/utils/useActionSheet.tsx +50 -0
  400. package/template/src/utils/useActiveSpeaker.ts +38 -0
  401. package/template/src/utils/useAppState.ts +17 -0
  402. package/template/src/utils/useAsyncEffect.ts +138 -0
  403. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
  404. package/template/src/utils/useEndCall.ts +65 -0
  405. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  406. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  407. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  408. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  409. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  410. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  411. package/template/src/utils/useIsPSTN.ts +3 -3
  412. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  413. package/template/src/utils/useJoinRoom.ts +199 -0
  414. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  415. package/template/src/{components/Settings.native.tsx → utils/useMenu.tsx} +16 -6
  416. package/template/src/utils/useModal.tsx +8 -0
  417. package/template/src/utils/useMutePSTN.ts +2 -2
  418. package/template/src/utils/useMuteToggleLocal.ts +21 -9
  419. package/template/src/utils/useRemoteEndCall.ts +4 -4
  420. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  421. package/template/src/utils/useRemoteMute.ts +7 -7
  422. package/template/src/utils/useRemoteRequest.ts +7 -7
  423. package/template/src/utils/useSearchParams.tsx +18 -0
  424. package/template/src/utils/useString.ts +13 -3
  425. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  426. package/template/src/utils/useSwitchCamera.tsx +19 -0
  427. package/template/src/utils/useToolbar.tsx +59 -0
  428. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  429. package/template/static.d.ts +42 -0
  430. package/template/web/index.html +20 -0
  431. package/template/webpack.commons.js +21 -10
  432. package/template/_buckconfig +0 -6
  433. package/template/_gitattributes +0 -1
  434. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  435. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  436. package/template/android/app/_BUCK +0 -55
  437. package/template/android/app/build_defs.bzl +0 -19
  438. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  439. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  440. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  441. package/template/src/utils/useButtonTemplate.tsx +0 -44
  442. package/template/src/utils/useJoinMeeting.ts +0 -142
@@ -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,77 +148,95 @@ 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
- if (data?.sender) {
134
- let screenUidOfUser =
135
- renderListRef.current.renderList[data?.sender]?.screenUid;
136
- if (!screenUidOfUser) {
137
- screenUidOfUser = payload?.screenUidOfUser;
138
- }
139
- if (screenUidOfUser) {
140
- switch (action) {
141
- case EventActions.SCREENSHARE_STARTED:
142
- setScreenShareData((prevState) => {
143
- return {
144
- ...prevState,
145
- [screenUidOfUser]: {
146
- name: renderListRef.current.renderList[screenUidOfUser]
147
- ?.name,
148
- isActive: true,
149
- ts: value || 0,
150
- },
151
- };
152
- });
153
- break;
154
- case EventActions.SCREENSHARE_STOPPED:
155
- setScreenShareData((prevState) => {
156
- return {
157
- ...prevState,
158
- [screenUidOfUser]: {
159
- name: renderListRef.current.renderList[screenUidOfUser]
160
- ?.name,
161
- isActive: false,
162
- ts: value || 0,
163
- },
164
- };
165
- });
166
- //if remote user started/stopped the screenshare then change the layout to pinned/grid
167
- //if user pinned somebody then don't triggerlayout change
168
- if (!pinnedUidRef.current.pinnedUid) {
169
- triggerChangeLayout(false);
170
- }
171
- break;
172
- default:
173
- break;
166
+ if (data?.sender) {
167
+ let screenUidOfUser =
168
+ defaultContentRef.current.defaultContent[data?.sender]?.screenUid;
169
+ if (!screenUidOfUser) {
170
+ screenUidOfUser = payload?.screenUidOfUser;
171
+ }
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
+ }
174
217
  }
175
218
  }
176
- }
177
- });
219
+ },
220
+ );
221
+
222
+ return () => {
223
+ unsubKickScreenshare();
224
+ unsubScreenshareAttribute();
225
+ };
178
226
  }, []);
179
227
 
180
228
  const ScreenshareStoppedCallback = () => {
181
229
  setScreenshareActive(false);
182
230
  console.log('STOPPED SHARING');
183
- executeNormalQuery();
184
231
  events.send(
185
232
  EventNames.SCREENSHARE_ATTRIBUTE,
186
233
  JSON.stringify({
187
234
  action: EventActions.SCREENSHARE_STOPPED,
188
235
  value: 0,
189
236
  }),
190
- EventPersistLevel.LEVEL2,
237
+ PersistanceLevel.Sender,
191
238
  );
192
- setScreenShareData((prevState) => {
239
+ setScreenShareData(prevState => {
193
240
  return {
194
241
  ...prevState,
195
242
  [screenShareUid]: {
@@ -204,58 +251,58 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
204
251
  if (!pinnedUidRef.current.pinnedUid) {
205
252
  triggerChangeLayout(false);
206
253
  }
254
+ if (screenShareUid === pinnedUidRef.current.pinnedUid) {
255
+ triggerChangeLayout(false);
256
+ dispatch({
257
+ type: 'UserPin',
258
+ value: [0],
259
+ });
260
+ }
207
261
  };
208
262
 
209
263
  useEffect(() => {
210
264
  // @ts-ignore
211
- rtc.RtcEngine.addListener('ScreenshareStopped', ScreenshareStoppedCallback);
265
+ rtc.RtcEngineUnsafe.addListener(
266
+ 'onScreenshareStopped',
267
+ ScreenshareStoppedCallback,
268
+ );
212
269
  }, []);
213
270
 
214
- const executeRecordingQuery = (isScreenActive: boolean) => {
215
- if (isScreenActive) {
216
- console.log('screenshare: Executing presenter query');
217
- // If screen share is not going on, start the screen share by executing the graphql query
218
- executePresenterQuery(screenShareUid);
219
- } else {
220
- // If recording is already going on, stop the recording by executing the graphql query.
221
- executeNormalQuery();
222
- }
223
- };
224
-
225
271
  const stopUserScreenShare = () => {
226
- if (!isScreenshareActive) return;
272
+ if (!isScreenshareActive) {
273
+ return;
274
+ }
227
275
  userScreenshare(false);
228
276
  };
229
277
  const startUserScreenshare = () => {
230
- if (isScreenshareActive) return;
278
+ if (isScreenshareActive) {
279
+ return;
280
+ }
231
281
  userScreenshare(true);
232
282
  };
233
283
 
234
284
  const userScreenshare = async (isActive: boolean) => {
235
- if (isRecordingActive) {
236
- executeRecordingQuery(isActive);
237
- }
238
- console.log('screenshare query executed');
239
285
  try {
240
286
  // @ts-ignore
241
- await rtc.RtcEngine.startScreenshare(
287
+ await rtc.RtcEngineUnsafe.startScreenshare(
242
288
  screenShareToken,
243
289
  channel,
244
290
  null,
245
291
  screenShareUid,
246
292
  appId,
247
- rtc.RtcEngine as unknown as IAgoraRTC,
293
+ rtc.RtcEngineUnsafe as unknown as IAgoraRTC,
248
294
  encryption as unknown as any,
249
295
  );
250
296
  isActive && setScreenshareActive(true);
251
297
 
252
298
  if (isActive) {
253
299
  // 1. Set local state
254
- setScreenShareData((prevState) => {
300
+ setScreenShareData(prevState => {
255
301
  return {
256
302
  ...prevState,
257
303
  [screenShareUid]: {
258
- name: renderListRef.current.renderList[screenShareUid]?.name,
304
+ name: defaultContentRef.current.defaultContent[screenShareUid]
305
+ ?.name,
259
306
  isActive: true,
260
307
  ts: timeNow(),
261
308
  },
@@ -269,12 +316,20 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
269
316
  value: timeNow(),
270
317
  screenUidOfUser: screenShareUid,
271
318
  }),
272
- EventPersistLevel.LEVEL2,
319
+ PersistanceLevel.Sender,
273
320
  );
274
321
  }
275
322
  } catch (e) {
276
323
  console.error("can't start the screen share", e);
277
- 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
+ });
278
333
  }
279
334
  };
280
335
 
@@ -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
  };
@@ -1,17 +1,17 @@
1
1
  import {createNanoEvents, Emitter} from 'nanoevents';
2
2
  import {
3
3
  CustomizationApiInterface,
4
- MeetingInfoContextInterface,
4
+ RoomInfoContextInterface,
5
5
  } from 'customization-api';
6
6
  import {deviceId} from '../components/DeviceConfigure';
7
7
 
8
8
  export interface SdkMethodEvents {
9
9
  customize: (customization: CustomizationApiInterface) => void;
10
10
  join(
11
- roomid: string | Partial<MeetingInfoContextInterface['data']>,
11
+ roomid: string | Partial<RoomInfoContextInterface['data']>,
12
12
  skipPrecall?: boolean,
13
13
  username?: string,
14
- ): MeetingInfoContextInterface['data'];
14
+ ): RoomInfoContextInterface['data'];
15
15
  microphoneDevice: (deviceId: deviceId) => void;
16
16
  speakerDevice: (deviceId: deviceId) => void;
17
17
  cameraDevice: (deviceId: deviceId) => void;
@@ -71,11 +71,11 @@ class SDKMethodEvents {
71
71
  this.emitCache[event] = [res, rej, ...params] as any;
72
72
  this.emitter.emit(event, res, rej, ...params);
73
73
  })
74
- .then((res) => {
74
+ .then(res => {
75
75
  delete this.emitCache[event];
76
76
  return res;
77
77
  })
78
- .catch((e) => {
78
+ .catch(e => {
79
79
  delete this.emitCache[event];
80
80
  throw e;
81
81
  });