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
@@ -0,0 +1,199 @@
1
+ import {useContext} from 'react';
2
+ import {gql} from '@apollo/client';
3
+ import StorageContext from '../components/StorageContext';
4
+ import {RoomInfoContextInterface} from '../components/room-info/useRoomInfo';
5
+ import {useSetRoomInfo} from '../components/room-info/useSetRoomInfo';
6
+ import {GraphQLContext} from '../components/GraphQLProvider';
7
+ import useGetName from './useGetName';
8
+ import useWaitingRoomAPI from '../subComponents/waiting-rooms/useWaitingRoomAPI';
9
+ import {base64ToUint8Array} from '../utils';
10
+
11
+ const JOIN_CHANNEL_PHRASE_AND_GET_USER = gql`
12
+ query JoinChannel($passphrase: String!) {
13
+ joinChannel(passphrase: $passphrase) {
14
+ channel
15
+ title
16
+ isHost
17
+ secret
18
+ secretSalt
19
+ mainUser {
20
+ rtc
21
+ rtm
22
+ uid
23
+ }
24
+ whiteboard {
25
+ room_uuid
26
+ room_token
27
+ }
28
+ screenShare {
29
+ rtc
30
+ rtm
31
+ uid
32
+ }
33
+ }
34
+ getUser {
35
+ name
36
+ email
37
+ }
38
+ }
39
+ `;
40
+
41
+ const JOIN_CHANNEL_PHRASE = gql`
42
+ query JoinChannel($passphrase: String!) {
43
+ joinChannel(passphrase: $passphrase) {
44
+ channel
45
+ title
46
+ isHost
47
+ secret
48
+ secretSalt
49
+ mainUser {
50
+ rtc
51
+ rtm
52
+ uid
53
+ }
54
+ whiteboard {
55
+ room_uuid
56
+ room_token
57
+ }
58
+ screenShare {
59
+ rtc
60
+ rtm
61
+ uid
62
+ }
63
+ }
64
+ }
65
+ `;
66
+ /**
67
+ * Returns an asynchronous function to join a meeting with the given phrase.
68
+ */
69
+ export default function useJoinRoom() {
70
+ const {store} = useContext(StorageContext);
71
+ const {setRoomInfo} = useSetRoomInfo();
72
+
73
+ const {client} = useContext(GraphQLContext);
74
+ const username = useGetName();
75
+ const {request: requestToJoin} = useWaitingRoomAPI();
76
+ const isWaitingRoomEnabled = $config.ENABLE_WAITING_ROOM;
77
+
78
+ return async (phrase: string) => {
79
+ setRoomInfo(prevState => {
80
+ return {
81
+ ...prevState,
82
+ isJoinDataFetched: false,
83
+ };
84
+ });
85
+ try {
86
+ let response = null;
87
+ if (isWaitingRoomEnabled) {
88
+ response = await requestToJoin({
89
+ meetingPhrase: phrase,
90
+ send_event: false,
91
+ });
92
+ } else {
93
+ response = await client.query({
94
+ query:
95
+ store.token === null
96
+ ? JOIN_CHANNEL_PHRASE
97
+ : JOIN_CHANNEL_PHRASE_AND_GET_USER,
98
+ variables: {
99
+ passphrase: phrase,
100
+ //userName: username,
101
+ },
102
+ });
103
+ }
104
+ if (response?.error) {
105
+ throw response.error;
106
+ } else {
107
+ if ((response && response.data) || isWaitingRoomEnabled) {
108
+ let data = isWaitingRoomEnabled ? response : response.data;
109
+ let roomInfo: Partial<RoomInfoContextInterface['data']> = {};
110
+
111
+ if (data?.joinChannel?.channel || data?.channel) {
112
+ roomInfo.channel = isWaitingRoomEnabled
113
+ ? data.channel
114
+ : data.joinChannel.channel;
115
+ }
116
+ if (data?.joinChannel?.mainUser?.uid || data?.mainUser?.uid) {
117
+ roomInfo.uid = isWaitingRoomEnabled
118
+ ? data.mainUser.uid
119
+ : data.joinChannel.mainUser.uid;
120
+ }
121
+ if (data?.joinChannel?.mainUser?.rtc || data?.mainUser?.rtc) {
122
+ roomInfo.token = isWaitingRoomEnabled
123
+ ? data.mainUser.rtc
124
+ : data.joinChannel.mainUser.rtc;
125
+ }
126
+ if (data?.joinChannel?.mainUser?.rtm || data?.mainUser?.rtm) {
127
+ roomInfo.rtmToken = isWaitingRoomEnabled
128
+ ? data.mainUser.rtm
129
+ : data.joinChannel.mainUser.rtm;
130
+ }
131
+ if (data?.joinChannel?.secret || data?.secret) {
132
+ roomInfo.encryptionSecret = isWaitingRoomEnabled
133
+ ? data.secret
134
+ : data.joinChannel.secret;
135
+ }
136
+ if (data?.joinChannel?.secretSalt || data?.secretSalt) {
137
+ roomInfo.encryptionSecretSalt = base64ToUint8Array(
138
+ isWaitingRoomEnabled
139
+ ? data.secretSalt
140
+ : data.joinChannel.secretSalt,
141
+ );
142
+ }
143
+ if (data?.joinChannel?.screenShare?.uid || data?.screenShare?.uid) {
144
+ roomInfo.screenShareUid = isWaitingRoomEnabled
145
+ ? data.screenShare.uid
146
+ : data.joinChannel.screenShare.uid;
147
+ }
148
+ if (data?.joinChannel?.screenShare?.rtc || data?.screenShare?.rtc) {
149
+ roomInfo.screenShareToken = isWaitingRoomEnabled
150
+ ? data.screenShare.rtc
151
+ : data.joinChannel.screenShare.rtc;
152
+ }
153
+ roomInfo.isHost = isWaitingRoomEnabled
154
+ ? data.isHost
155
+ : data.joinChannel.isHost;
156
+
157
+ if (data?.joinChannel?.title || data?.title) {
158
+ roomInfo.meetingTitle = isWaitingRoomEnabled
159
+ ? data.title
160
+ : data.joinChannel.title;
161
+ }
162
+ if (data?.joinChannel?.whiteboard || data?.whiteboard) {
163
+ const whiteboard: RoomInfoContextInterface['data']['whiteboard'] = {
164
+ room_token: isWaitingRoomEnabled
165
+ ? data.whiteboard.room_token
166
+ : data?.joinChannel?.whiteboard?.room_token,
167
+ room_uuid: isWaitingRoomEnabled
168
+ ? data.whiteboard.room_uuid
169
+ : data?.joinChannel?.whiteboard?.room_uuid,
170
+ };
171
+ if (whiteboard?.room_token && whiteboard?.room_uuid) {
172
+ roomInfo.whiteboard = whiteboard;
173
+ }
174
+ }
175
+ //getUser is not available from backend
176
+ // if (data?.getUser?.name) {
177
+ // roomInfo.username = data.getUser.name;
178
+ // }
179
+ setRoomInfo(prevState => {
180
+ let compiledMeetingInfo = {
181
+ ...prevState.data,
182
+ ...roomInfo,
183
+ };
184
+ return {
185
+ ...prevState,
186
+ isJoinDataFetched: true,
187
+ data: compiledMeetingInfo,
188
+ };
189
+ });
190
+ return roomInfo;
191
+ } else {
192
+ throw new Error('An error occurred in parsing the channel data.');
193
+ }
194
+ }
195
+ } catch (error) {
196
+ throw error;
197
+ }
198
+ };
199
+ }
@@ -9,19 +9,30 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import {useRender} from 'customization-api';
13
- import {UidType} from '../../agora-rn-uikit';
14
12
 
15
- /**
16
- * Returns a function that checks whether the given uid is a active speaker and returns true/false
17
- * @returns function
18
- */
19
- function useIsActiveSpeaker() {
20
- const {activeSpeaker, renderList} = useRender();
21
- const isActiveSpeaker = (uid: UidType) => {
22
- return renderList[uid].audio && activeSpeaker === uid;
13
+ import {DispatchContext, RtcContext} from '../../agora-rn-uikit';
14
+ import {useContext} from 'react';
15
+
16
+ function useLocalAudio() {
17
+ const {dispatch} = useContext(DispatchContext);
18
+ const {RtcEngineUnsafe} = useContext(RtcContext);
19
+
20
+ const disableAudioButton = () => {
21
+ RtcEngineUnsafe.muteLocalAudioStream(true);
22
+ dispatch({
23
+ type: 'LocalMuteAudio',
24
+ value: [0, true],
25
+ });
23
26
  };
24
- return isActiveSpeaker;
27
+
28
+ const enableAudioButton = () => {
29
+ dispatch({
30
+ type: 'LocalMuteAudio',
31
+ value: [0, false],
32
+ });
33
+ };
34
+
35
+ return {enableAudioButton, disableAudioButton};
25
36
  }
26
37
 
27
- export default useIsActiveSpeaker;
38
+ export default useLocalAudio;
@@ -9,13 +9,23 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
+
12
13
  import React from 'react';
14
+ import {createHook} from 'customization-implementation';
13
15
 
14
- const Settings: React.FC = () => {
15
- return <></>;
16
- };
17
- export const SettingsWithViewWrapper = () => {
18
- return <></>;
16
+ const ToolbarMenuContext = React.createContext({isToolbarMenuItem: false});
17
+
18
+ export interface ToolbarMenuProviderProps {
19
+ children: React.ReactNode;
20
+ }
21
+ const ToolbarMenuProvider = (props: ToolbarMenuProviderProps) => {
22
+ return (
23
+ <ToolbarMenuContext.Provider value={{isToolbarMenuItem: true}}>
24
+ {props.children}
25
+ </ToolbarMenuContext.Provider>
26
+ );
19
27
  };
20
28
 
21
- export default Settings;
29
+ const useToolbarMenu = createHook(ToolbarMenuContext);
30
+
31
+ export {ToolbarMenuProvider, useToolbarMenu};
@@ -0,0 +1,8 @@
1
+ import {useState} from 'react';
2
+
3
+ export function useModal(initialMode = false) {
4
+ const [modalOpen, setModalOpen] = useState(initialMode);
5
+ const toggle = () => setModalOpen(!modalOpen);
6
+
7
+ return {modalOpen, setModalOpen, toggle};
8
+ }
@@ -1,6 +1,6 @@
1
1
  import {gql, useMutation} from '@apollo/client';
2
2
  import {UidType} from '../../agora-rn-uikit';
3
- import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
3
+ import {useRoomInfo} from '../components/room-info/useRoomInfo';
4
4
  import useIsPSTN from './useIsPSTN';
5
5
  const MUTE_PSTN = gql`
6
6
  mutation mutePSTN($uid: Int!, $passphrase: String!, $mute: Boolean!) {
@@ -15,7 +15,7 @@ const useMutePSTN = () => {
15
15
  const [mutePSTN, {data, loading, error}] = useMutation(MUTE_PSTN);
16
16
  const {
17
17
  data: {isHost, roomId},
18
- } = useMeetingInfo();
18
+ } = useRoomInfo();
19
19
  const isPSTN = useIsPSTN();
20
20
  return async (uid: UidType) => {
21
21
  if (isHost) {
@@ -11,7 +11,12 @@
11
11
  */
12
12
  import {useLocalUserInfo, useRtc} from 'customization-api';
13
13
  import {useContext} from 'react';
14
- import {PropsContext, ClientRole, ToggleState} from '../../agora-rn-uikit';
14
+ import {
15
+ PropsContext,
16
+ ClientRoleType,
17
+ ToggleState,
18
+ DispatchContext,
19
+ } from '../../agora-rn-uikit';
15
20
  import {isAndroid, isIOS, isWebInternal} from './common';
16
21
  import {SdkMuteQueueContext} from '../components/SdkMuteToggleListener';
17
22
 
@@ -23,11 +28,12 @@ export enum MUTE_LOCAL_TYPE {
23
28
  * Returns an asynchronous function to toggle muted state of the given track type for the local user.
24
29
  */
25
30
  function useMuteToggleLocal() {
26
- const {RtcEngine, dispatch} = useRtc();
31
+ const {RtcEngineUnsafe} = useRtc();
32
+ const {dispatch} = useContext(DispatchContext);
27
33
  const local = useLocalUserInfo();
28
34
  const isLiveStream = $config.EVENT_MODE;
29
35
  const {rtcProps} = useContext(PropsContext);
30
- const isBroadCasting = rtcProps?.role == ClientRole.Broadcaster;
36
+ const isBroadCasting = rtcProps?.role == ClientRoleType.ClientRoleBroadcaster;
31
37
 
32
38
  const {videoMuteQueue, audioMuteQueue} = useContext(SdkMuteQueueContext);
33
39
 
@@ -71,9 +77,14 @@ function useMuteToggleLocal() {
71
77
  });
72
78
 
73
79
  try {
74
- await RtcEngine.muteLocalAudioStream(
75
- localAudioState === ToggleState.enabled,
76
- );
80
+ isWebInternal()
81
+ ? await RtcEngineUnsafe.muteLocalAudioStream(
82
+ localAudioState === ToggleState.enabled,
83
+ ) //@ts-ignore
84
+ : await RtcEngineUnsafe.enableLocalAudio(
85
+ localAudioState === ToggleState.enabled ? false : true,
86
+ );
87
+
77
88
  // Enable UI
78
89
  dispatch({
79
90
  type: 'LocalMuteAudio',
@@ -122,10 +133,11 @@ function useMuteToggleLocal() {
122
133
  try {
123
134
  //enableLocalVideo not available on web
124
135
  isWebInternal()
125
- ? await RtcEngine.muteLocalVideoStream(
136
+ ? await RtcEngineUnsafe.muteLocalVideoStream(
126
137
  localVideoState === ToggleState.enabled ? true : false,
127
138
  )
128
- : await RtcEngine.enableLocalVideo(
139
+ : //@ts-ignore
140
+ await RtcEngineUnsafe.enableLocalVideo(
129
141
  localVideoState === ToggleState.enabled ? false : true,
130
142
  );
131
143
  /**
@@ -135,7 +147,7 @@ function useMuteToggleLocal() {
135
147
  * enable publishing for livestreaming presenter(who raised hand and approved by host)
136
148
  */
137
149
  if ((isAndroid() || isIOS()) && isLiveStream && isBroadCasting) {
138
- await RtcEngine.muteLocalVideoStream(
150
+ await RtcEngineUnsafe.muteLocalVideoStream(
139
151
  localVideoState === ToggleState.enabled ? true : false,
140
152
  );
141
153
  }
@@ -1,8 +1,8 @@
1
1
  import {controlMessageEnum} from '../components/ChatContext';
2
- import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
2
+ import {useRoomInfo} from '../components/room-info/useRoomInfo';
3
3
  import useIsPSTN from './useIsPSTN';
4
4
  import {UidType} from '../../agora-rn-uikit';
5
- import events, {EventPersistLevel} from '../rtm-events-api';
5
+ import events, {PersistanceLevel} from '../rtm-events-api';
6
6
 
7
7
  /**
8
8
  * Returns a function to end the call for a remote user with the given uid.
@@ -10,7 +10,7 @@ import events, {EventPersistLevel} from '../rtm-events-api';
10
10
  const useRemoteEndCall = () => {
11
11
  const {
12
12
  data: {isHost},
13
- } = useMeetingInfo();
13
+ } = useRoomInfo();
14
14
  const isPSTN = useIsPSTN();
15
15
 
16
16
  return (uid: UidType) => {
@@ -19,7 +19,7 @@ const useRemoteEndCall = () => {
19
19
  events.send(
20
20
  controlMessageEnum.kickUser,
21
21
  '',
22
- EventPersistLevel.LEVEL1,
22
+ PersistanceLevel.None,
23
23
  uid,
24
24
  );
25
25
  }
@@ -1,7 +1,7 @@
1
1
  import {controlMessageEnum} from '../components/ChatContext';
2
- import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
2
+ import {useRoomInfo} from '../components/room-info/useRoomInfo';
3
3
  import {UidType} from '../../agora-rn-uikit';
4
- import events, {EventPersistLevel} from '../rtm-events-api';
4
+ import events, {PersistanceLevel} from '../rtm-events-api';
5
5
 
6
6
  /**
7
7
  * Returns a function to end the screenshare for a remote user with the given uid.
@@ -9,13 +9,13 @@ import events, {EventPersistLevel} from '../rtm-events-api';
9
9
  const useRemoteEndScreenshare = () => {
10
10
  const {
11
11
  data: {isHost},
12
- } = useMeetingInfo();
12
+ } = useRoomInfo();
13
13
  return (uid: UidType) => {
14
14
  if (isHost && uid) {
15
15
  events.send(
16
16
  controlMessageEnum.kickScreenshare,
17
17
  '',
18
- EventPersistLevel.LEVEL1,
18
+ PersistanceLevel.None,
19
19
  uid,
20
20
  );
21
21
  } else {
@@ -9,12 +9,12 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
12
+ import {useRoomInfo} from '../components/room-info/useRoomInfo';
13
13
  import {controlMessageEnum} from '../components/ChatContext';
14
14
  import useIsPSTN from './useIsPSTN';
15
15
  import useMutePSTN from './useMutePSTN';
16
16
  import {UidType} from '../../agora-rn-uikit';
17
- import events, {EventPersistLevel} from '../rtm-events-api';
17
+ import events, {PersistanceLevel} from '../rtm-events-api';
18
18
 
19
19
  export enum MUTE_REMOTE_TYPE {
20
20
  audio,
@@ -26,7 +26,7 @@ export enum MUTE_REMOTE_TYPE {
26
26
  function useRemoteMute() {
27
27
  const {
28
28
  data: {isHost},
29
- } = useMeetingInfo();
29
+ } = useRoomInfo();
30
30
  const isPSTN = useIsPSTN();
31
31
  const mutePSTN = useMutePSTN();
32
32
 
@@ -46,7 +46,7 @@ function useRemoteMute() {
46
46
  events.send(
47
47
  controlMessageEnum.muteAudio,
48
48
  '',
49
- EventPersistLevel.LEVEL1,
49
+ PersistanceLevel.None,
50
50
  uid,
51
51
  );
52
52
  }
@@ -55,7 +55,7 @@ function useRemoteMute() {
55
55
  events.send(
56
56
  controlMessageEnum.muteAudio,
57
57
  '',
58
- EventPersistLevel.LEVEL1,
58
+ PersistanceLevel.None,
59
59
  );
60
60
  }
61
61
  break;
@@ -66,7 +66,7 @@ function useRemoteMute() {
66
66
  events.send(
67
67
  controlMessageEnum.muteVideo,
68
68
  '',
69
- EventPersistLevel.LEVEL1,
69
+ PersistanceLevel.None,
70
70
  uid,
71
71
  );
72
72
  }
@@ -75,7 +75,7 @@ function useRemoteMute() {
75
75
  events.send(
76
76
  controlMessageEnum.muteVideo,
77
77
  '',
78
- EventPersistLevel.LEVEL1,
78
+ PersistanceLevel.None,
79
79
  );
80
80
  }
81
81
  break;
@@ -9,12 +9,12 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
12
+ import {useRoomInfo} from '../components/room-info/useRoomInfo';
13
13
  import {controlMessageEnum} from '../components/ChatContext';
14
14
  import useIsPSTN from './useIsPSTN';
15
15
  import useMutePSTN from './useMutePSTN';
16
16
  import {UidType} from '../../agora-rn-uikit';
17
- import events, {EventPersistLevel} from '../rtm-events-api';
17
+ import events, {PersistanceLevel} from '../rtm-events-api';
18
18
 
19
19
  export enum REQUEST_REMOTE_TYPE {
20
20
  audio,
@@ -26,7 +26,7 @@ export enum REQUEST_REMOTE_TYPE {
26
26
  function useRemoteRequest() {
27
27
  const {
28
28
  data: {isHost},
29
- } = useMeetingInfo();
29
+ } = useRoomInfo();
30
30
  const isPSTN = useIsPSTN();
31
31
 
32
32
  return async (type: REQUEST_REMOTE_TYPE, uid?: UidType) => {
@@ -41,7 +41,7 @@ function useRemoteRequest() {
41
41
  events.send(
42
42
  controlMessageEnum.requestAudio,
43
43
  '',
44
- EventPersistLevel.LEVEL1,
44
+ PersistanceLevel.None,
45
45
  uid,
46
46
  );
47
47
  }
@@ -50,7 +50,7 @@ function useRemoteRequest() {
50
50
  events.send(
51
51
  controlMessageEnum.requestAudio,
52
52
  '',
53
- EventPersistLevel.LEVEL1,
53
+ PersistanceLevel.None,
54
54
  );
55
55
  }
56
56
  break;
@@ -61,7 +61,7 @@ function useRemoteRequest() {
61
61
  events.send(
62
62
  controlMessageEnum.requestVideo,
63
63
  '',
64
- EventPersistLevel.LEVEL1,
64
+ PersistanceLevel.None,
65
65
  uid,
66
66
  );
67
67
  }
@@ -70,7 +70,7 @@ function useRemoteRequest() {
70
70
  events.send(
71
71
  controlMessageEnum.requestVideo,
72
72
  '',
73
- EventPersistLevel.LEVEL1,
73
+ PersistanceLevel.None,
74
74
  );
75
75
  }
76
76
  break;
@@ -0,0 +1,18 @@
1
+ import {useLocation} from '../components/Router';
2
+ import {useMemo} from 'react';
3
+
4
+ interface ReadOnlyURLSearchParams extends URLSearchParams {
5
+ append: never;
6
+ set: never;
7
+ delete: never;
8
+ sort: never;
9
+ }
10
+
11
+ export function useSearchParams() {
12
+ const {search} = useLocation();
13
+
14
+ return useMemo(
15
+ () => new URLSearchParams(search) as ReadOnlyURLSearchParams,
16
+ [search],
17
+ );
18
+ }
@@ -13,11 +13,12 @@ import {useCustomization} from 'customization-implementation';
13
13
  import {useLanguage} from '../language/useLanguage';
14
14
  import {DEFAULT_I18_DATA} from '../language';
15
15
  import {TextDataInterface} from '../language/default-labels/index';
16
+ import {useEffect, useRef} from 'react';
16
17
 
17
18
  export function usei18nData(
18
19
  selectedLanguageCode: string = DEFAULT_I18_DATA.locale,
19
20
  ) {
20
- const languageData = useCustomization((data) => data?.i18n);
21
+ const languageData = useCustomization(data => data?.i18n);
21
22
  if (
22
23
  !selectedLanguageCode ||
23
24
  !languageData ||
@@ -27,7 +28,7 @@ export function usei18nData(
27
28
  return DEFAULT_I18_DATA.data;
28
29
  } else {
29
30
  let selectedLanguageData = languageData.find(
30
- (item) => item.locale === selectedLanguageCode,
31
+ item => item.locale === selectedLanguageCode,
31
32
  );
32
33
  if (selectedLanguageData && selectedLanguageData.data) {
33
34
  return {
@@ -43,7 +44,7 @@ export function usei18nData(
43
44
  export function useString<T = string>(
44
45
  keyName: keyof TextDataInterface,
45
46
  ): (input?: T) => string {
46
- const lanCode = useLanguage((data) => data.languageCode);
47
+ const lanCode = useLanguage(data => data.languageCode);
47
48
  const textData = usei18nData(lanCode);
48
49
  const getString = (input?: T) => {
49
50
  let keyValue = textData ? textData[keyName] : undefined;
@@ -59,3 +60,12 @@ export function useString<T = string>(
59
60
  };
60
61
  return getString;
61
62
  }
63
+
64
+ export const useStringRef = (key: keyof TextDataInterface) => {
65
+ const fn = useString(key);
66
+ const refFn = useRef(fn);
67
+ useEffect(() => {
68
+ refFn.current = fn;
69
+ }, [fn]);
70
+ return refFn;
71
+ };
@@ -0,0 +1,25 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 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.
10
+ *********************************************
11
+ */
12
+ import {useRtc} from 'customization-api';
13
+
14
+ function useSwitchCamera() {
15
+ const {RtcEngineUnsafe} = useRtc();
16
+ return () => {
17
+ try {
18
+ RtcEngineUnsafe.switchCamera();
19
+ } catch (error) {
20
+ console.error(error);
21
+ }
22
+ };
23
+ }
24
+
25
+ export default useSwitchCamera;
@@ -0,0 +1,19 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 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.
10
+ *********************************************
11
+ */
12
+
13
+ function useSwitchCamera() {
14
+ return () => {
15
+ console.warn('SwitchCamera only supported on native platforms');
16
+ };
17
+ }
18
+
19
+ export default useSwitchCamera;