agora-appbuilder-core 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/package.json +3 -3
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +29 -29
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +28491 -23647
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/.eslintrc.js +5 -0
  10. package/template/agora-rn-uikit/package.json +14 -14
  11. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  12. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  13. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  14. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +6 -6
  15. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +79 -38
  16. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +26 -17
  17. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
  19. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  20. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  21. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +5 -2
  22. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
  23. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  24. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
  25. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  26. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
  27. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  28. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
  29. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  30. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  31. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -7
  32. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -7
  33. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +6 -7
  34. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -8
  35. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -9
  36. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -8
  37. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +14 -13
  38. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -7
  39. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -7
  40. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -6
  41. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +20 -3
  42. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  43. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -1
  44. package/template/agora-rn-uikit/src/Rtc/Create.tsx +138 -100
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +55 -28
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +177 -77
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +8 -0
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +56 -12
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +47 -17
  51. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
  52. package/template/agora-rn-uikit/src/index.ts +15 -9
  53. package/template/android/app/build.gradle +59 -156
  54. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  55. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  56. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  57. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  58. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  59. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +22 -36
  60. package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
  61. package/template/android/app/src/main/res/values/strings.xml +3 -0
  62. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  63. package/template/android/build.gradle +19 -33
  64. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  65. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  66. package/template/android/gradle.properties +18 -4
  67. package/template/android/gradlew +165 -104
  68. package/template/android/gradlew.bat +12 -23
  69. package/template/android/settings.gradle +1 -0
  70. package/template/bridge/rtc/webNg/RtcEngine.ts +200 -70
  71. package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -26
  72. package/template/bridge/rtc/webNg/Types.ts +20 -5
  73. package/template/bridge/rtc/webNg/index.ts +81 -14
  74. package/template/bridge/rtm/web/index.ts +5 -3
  75. package/template/configTransform.js +16 -1
  76. package/template/customization-api/action-library.ts +4 -16
  77. package/template/customization-api/app-state.ts +15 -8
  78. package/template/customization-api/customEvents.ts +7 -2
  79. package/template/customization-api/customize.ts +1 -1
  80. package/template/customization-api/index.ts +4 -0
  81. package/template/customization-api/sub-components.ts +17 -16
  82. package/template/customization-api/temp.ts +52 -0
  83. package/template/customization-api/typeDefinition.ts +34 -46
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/createHook.ts +24 -6
  87. package/template/customization-implementation/index.ts +1 -2
  88. package/template/customization-implementation/useCustomization.tsx +5 -7
  89. package/template/defaultConfig.js +72 -0
  90. package/template/global.d.ts +14 -1
  91. package/template/index.js +1 -4
  92. package/template/index.web.js +0 -5
  93. package/template/index.wsdk.tsx +1 -12
  94. package/template/ios/.xcode.env +11 -0
  95. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  96. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  97. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  98. package/template/ios/HelloWorld/Info.plist +8 -2
  99. package/template/ios/HelloWorld/main.m +2 -1
  100. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +533 -17
  101. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  102. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  103. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  104. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  105. package/template/ios/HelloWorldTests/Info.plist +2 -2
  106. package/template/ios/Podfile +54 -20
  107. package/template/ios/Podfile.lock +809 -0
  108. package/template/ios/ScreenSharing/Info.plist +15 -0
  109. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  110. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  111. package/template/jest.config.js +4 -0
  112. package/template/metro.config.js +7 -32
  113. package/template/package.json +53 -39
  114. package/template/react-native-toast-message/index.d.ts +3 -1
  115. package/template/react-native-toast-message/index.js +1 -0
  116. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  117. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  118. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  119. package/template/react-native-toast-message/src/index.js +3 -1
  120. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  121. package/template/src/App.tsx +53 -69
  122. package/template/src/AppRoutes.tsx +90 -0
  123. package/template/src/AppWrapper.tsx +42 -25
  124. package/template/src/SDKAppWrapper.tsx +89 -57
  125. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  126. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  127. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  128. package/template/src/app-state/useVideoQuality.tsx +39 -0
  129. package/template/src/assets/font-styles.css +175 -3
  130. package/template/src/assets/fonts/icomoon.ttf +0 -0
  131. package/template/src/assets/selection.json +1 -1
  132. package/template/src/atoms/ActionMenu.tsx +50 -11
  133. package/template/src/atoms/Avatar.tsx +51 -0
  134. package/template/src/atoms/Card.tsx +21 -8
  135. package/template/src/atoms/Carousel.native.tsx +105 -0
  136. package/template/src/atoms/Carousel.tsx +103 -0
  137. package/template/src/atoms/Checkbox.tsx +98 -0
  138. package/template/src/atoms/CircularProgress.tsx +0 -1
  139. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  140. package/template/src/atoms/CustomIcon.tsx +46 -0
  141. package/template/src/atoms/DropDownMulti.tsx +349 -0
  142. package/template/src/atoms/Dropdown.tsx +3 -3
  143. package/template/src/atoms/IconButton.tsx +52 -9
  144. package/template/src/atoms/ImageIcon.tsx +18 -5
  145. package/template/src/atoms/InlineNotification.tsx +81 -0
  146. package/template/src/atoms/InviteInfo.tsx +4 -4
  147. package/template/src/atoms/MeetingLink.tsx +160 -0
  148. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  149. package/template/src/atoms/Popup.tsx +49 -27
  150. package/template/src/atoms/PrimaryButton.tsx +19 -5
  151. package/template/src/atoms/RecordingInfo.tsx +8 -5
  152. package/template/src/atoms/SecondaryButton.tsx +2 -0
  153. package/template/src/atoms/Spacer.tsx +1 -0
  154. package/template/src/atoms/TertiaryButton.tsx +35 -5
  155. package/template/src/atoms/TextInput.tsx +2 -1
  156. package/template/src/atoms/Toolbar.tsx +102 -0
  157. package/template/src/atoms/ToolbarItem.tsx +85 -0
  158. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  159. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  160. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  161. package/template/src/atoms/Tooltip.tsx +30 -13
  162. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  163. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  164. package/template/src/auth/AuthProvider.tsx +500 -0
  165. package/template/src/auth/AuthRoute.tsx +94 -0
  166. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  167. package/template/src/auth/IDPAuth.tsx +67 -0
  168. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  169. package/template/src/auth/UserCancelPopup.tsx +115 -0
  170. package/template/src/auth/config.ts +52 -0
  171. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  172. package/template/src/auth/openIDPURL.native.tsx +51 -0
  173. package/template/src/auth/openIDPURL.tsx +20 -0
  174. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  175. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  176. package/template/src/auth/useIDPAuth.tsx +63 -0
  177. package/template/src/auth/useTokenAuth.tsx +194 -0
  178. package/template/src/components/Chat.tsx +92 -72
  179. package/template/src/components/ChatContext.ts +2 -0
  180. package/template/src/components/ColorConfigure.tsx +0 -1
  181. package/template/src/components/CommonStyles.ts +9 -2
  182. package/template/src/components/Controls.tsx +914 -182
  183. package/template/src/components/Controls1.native.tsx +9 -5
  184. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  185. package/template/src/components/DeviceConfigure.tsx +400 -149
  186. package/template/src/components/DeviceContext.tsx +2 -0
  187. package/template/src/components/EventsConfigure.tsx +722 -82
  188. package/template/src/components/GraphQLProvider.tsx +82 -39
  189. package/template/src/components/GridVideo.tsx +30 -16
  190. package/template/src/components/HostControlView.tsx +11 -14
  191. package/template/src/components/JoinPhrase.tsx +0 -1
  192. package/template/src/components/Leftbar.tsx +110 -0
  193. package/template/src/components/Navbar.tsx +305 -147
  194. package/template/src/components/NavbarMobile.tsx +119 -0
  195. package/template/src/components/Navigation.native.tsx +1 -15
  196. package/template/src/components/{Settings.native.tsx → Navigation.sdk.tsx} +17 -6
  197. package/template/src/components/NetworkQualityContext.tsx +12 -6
  198. package/template/src/components/ParticipantsView.tsx +63 -56
  199. package/template/src/components/PinnedVideo.tsx +191 -119
  200. package/template/src/components/Precall.native.tsx +177 -72
  201. package/template/src/components/Precall.tsx +247 -78
  202. package/template/src/components/RTMConfigure.tsx +205 -67
  203. package/template/src/components/Rightbar.tsx +112 -0
  204. package/template/src/components/Router.electron.ts +1 -0
  205. package/template/src/components/Router.native.ts +1 -0
  206. package/template/src/components/Router.sdk.ts +1 -0
  207. package/template/src/components/Router.ts +1 -0
  208. package/template/src/components/SdkApiContext.tsx +313 -0
  209. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  210. package/template/src/components/SessionContext.tsx +0 -1
  211. package/template/src/components/Settings.tsx +33 -4
  212. package/template/src/components/SettingsView.tsx +44 -9
  213. package/template/src/components/Share.tsx +152 -74
  214. package/template/src/components/StorageContext.tsx +23 -6
  215. package/template/src/components/ToastComponent.tsx +10 -1
  216. package/template/src/components/WhiteboardLayout.tsx +291 -0
  217. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  218. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  219. package/template/src/components/common/Error.tsx +2 -0
  220. package/template/src/components/common/Logo.tsx +2 -2
  221. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  222. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  223. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  224. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  225. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  226. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  227. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  228. package/template/src/components/livestream/Types.ts +36 -20
  229. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  230. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  231. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  232. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  233. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  234. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  235. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  236. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  237. package/template/src/components/participants/Participant.tsx +45 -16
  238. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  239. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  240. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  241. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  242. package/template/src/components/popups/InvitePopup.tsx +110 -45
  243. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  244. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  245. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  246. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  247. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  248. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  249. package/template/src/components/precall/LocalMute.tsx +69 -45
  250. package/template/src/components/precall/PermissionHelper.tsx +56 -28
  251. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  252. package/template/src/components/precall/VideoFallback.tsx +173 -0
  253. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  254. package/template/src/components/precall/VideoPreview.tsx +29 -164
  255. package/template/src/components/precall/index.tsx +2 -0
  256. package/template/src/components/precall/joinCallBtn.native.tsx +12 -5
  257. package/template/src/components/precall/joinCallBtn.tsx +13 -4
  258. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  259. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  260. package/template/src/components/precall/meetingTitle.tsx +37 -11
  261. package/template/src/components/precall/selectDevice.tsx +5 -5
  262. package/template/src/components/precall/textInput.tsx +17 -19
  263. package/template/src/components/precall/usePreCall.tsx +33 -1
  264. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  265. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  266. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  267. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  268. package/template/src/components/recordings/recording-table.tsx +154 -0
  269. package/template/src/components/recordings/style.ts +183 -0
  270. package/template/src/components/recordings/utils.ts +80 -0
  271. package/template/src/components/room-info/useRoomInfo.tsx +128 -0
  272. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  273. package/template/src/components/useShareLink.tsx +28 -63
  274. package/template/src/components/useUserPreference.tsx +82 -16
  275. package/template/src/components/useVideoCall.tsx +93 -1
  276. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  277. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  278. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  279. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  280. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  281. package/template/src/components/virtual-background/VButils.ts +104 -0
  282. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  283. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  284. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  285. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  286. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  287. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  288. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  289. package/template/src/components/virtual-background/images/index.ts +37 -0
  290. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  291. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  292. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  293. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  294. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  295. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  296. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  297. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  298. package/template/src/components/virtual-background/useVB.tsx +267 -0
  299. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  300. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  301. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  302. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  303. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  304. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  305. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  306. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  307. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  308. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  309. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  310. package/template/src/language/default-labels/commonLabels.ts +51 -14
  311. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  312. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  313. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  314. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  315. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  316. package/template/src/pages/Create.tsx +136 -106
  317. package/template/src/pages/Endcall.tsx +2 -2
  318. package/template/src/pages/Join.tsx +82 -40
  319. package/template/src/pages/Login.tsx +26 -0
  320. package/template/src/pages/VideoCall.tsx +329 -127
  321. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -6
  322. package/template/src/pages/video-call/ActionSheet.tsx +55 -15
  323. package/template/src/pages/video-call/ActionSheetContent.tsx +498 -308
  324. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  325. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  326. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  327. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  328. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  329. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  330. package/template/src/pages/video-call/VideoCallMobileView.tsx +231 -89
  331. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  332. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -84
  333. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  334. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  335. package/template/src/pages/video-call/VideoRenderer.tsx +343 -57
  336. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  337. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  338. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  339. package/template/src/pages/video-call/index.ts +42 -8
  340. package/template/src/rtm/RTMEngine.ts +17 -4
  341. package/template/src/rtm-events/constants.ts +21 -3
  342. package/template/src/rtm-events-api/Events.ts +7 -4
  343. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  344. package/template/src/rtm-events-api/types.ts +5 -5
  345. package/template/src/selection.json +1 -0
  346. package/template/src/subComponents/ChatBubble.tsx +87 -67
  347. package/template/src/subComponents/ChatContainer.tsx +70 -49
  348. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  349. package/template/src/subComponents/ChatInput.tsx +31 -80
  350. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  351. package/template/src/subComponents/Checkbox.tsx +7 -6
  352. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  353. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  354. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  355. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  356. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  357. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  358. package/template/src/subComponents/Loading.tsx +60 -0
  359. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  360. package/template/src/subComponents/LocalEndCall.tsx +61 -24
  361. package/template/src/subComponents/LocalSwitchCamera.tsx +57 -13
  362. package/template/src/subComponents/LocalVideoMute.tsx +105 -36
  363. package/template/src/subComponents/LogoutButton.tsx +1 -1
  364. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  365. package/template/src/subComponents/Recording.tsx +29 -9
  366. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  367. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  368. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  369. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  370. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  371. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  372. package/template/src/subComponents/SelectDevice.tsx +103 -34
  373. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  374. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  375. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  376. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  377. package/template/src/subComponents/ToastConfig.tsx +70 -61
  378. package/template/src/subComponents/caption/Caption.tsx +132 -0
  379. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  380. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  381. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  382. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  383. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  384. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  385. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  386. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  387. package/template/src/subComponents/caption/index.ts +3 -0
  388. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  389. package/template/src/subComponents/caption/proto/test.proto +23 -0
  390. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  391. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  392. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  393. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  394. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  395. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  396. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  397. package/template/src/subComponents/caption/utils.ts +126 -0
  398. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  399. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  400. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  401. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  402. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  403. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  404. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  405. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  406. package/template/src/subComponents/recording/useRecording.tsx +251 -138
  407. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  408. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +39 -15
  409. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +275 -69
  410. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +193 -124
  411. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  412. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  413. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  414. package/template/src/theme/index.ts +13 -0
  415. package/template/src/utils/SdkEvents.ts +37 -14
  416. package/template/src/utils/SdkMethodEvents.ts +101 -0
  417. package/template/src/utils/axiomLogger.ts +117 -0
  418. package/template/src/utils/book.jpg +0 -0
  419. package/template/src/utils/common.tsx +118 -6
  420. package/template/src/utils/constants.ts +4 -0
  421. package/template/src/utils/getCustomRoute.ts +7 -0
  422. package/template/src/utils/index.tsx +34 -0
  423. package/template/src/utils/useActionSheet.tsx +50 -0
  424. package/template/src/utils/useActiveSpeaker.ts +38 -0
  425. package/template/src/utils/useAppState.ts +17 -0
  426. package/template/src/utils/useAsyncEffect.ts +138 -0
  427. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +27 -26
  428. package/template/src/utils/useEndCall.ts +65 -0
  429. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  430. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  431. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  432. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  433. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  434. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  435. package/template/src/utils/useIsPSTN.ts +3 -3
  436. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  437. package/template/src/utils/useJoinRoom.ts +199 -0
  438. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  439. package/template/src/{components/OAuth.tsx → utils/useMenu.tsx} +16 -15
  440. package/template/src/utils/useModal.tsx +8 -0
  441. package/template/src/utils/useMutePSTN.ts +2 -2
  442. package/template/src/utils/useMuteToggleLocal.ts +121 -96
  443. package/template/src/utils/useRemoteEndCall.ts +4 -4
  444. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  445. package/template/src/utils/useRemoteMute.ts +7 -7
  446. package/template/src/utils/useRemoteRequest.ts +7 -7
  447. package/template/src/utils/useSearchParams.tsx +18 -0
  448. package/template/src/utils/useString.ts +13 -3
  449. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  450. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → utils/useSwitchCamera.tsx} +12 -11
  451. package/template/src/utils/useToolbar.tsx +59 -0
  452. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  453. package/template/static.d.ts +42 -0
  454. package/template/tsconfig_rsdk_index.json +3 -3
  455. package/template/tsconfig_wsdk_index.json +1 -1
  456. package/template/web/index.html +20 -0
  457. package/template/webpack.commons.js +21 -10
  458. package/template/webpack.rsdk.config.js +1 -2
  459. package/template/webpack.web.config.js +7 -3
  460. package/template/_buckconfig +0 -6
  461. package/template/_gitattributes +0 -1
  462. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  463. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  464. package/template/android/app/_BUCK +0 -55
  465. package/template/android/app/build_defs.bzl +0 -19
  466. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  467. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  468. package/template/src/components/OAuth.electron.tsx +0 -41
  469. package/template/src/components/OAuth.native.tsx +0 -55
  470. package/template/src/components/OAuthConfig.ts +0 -77
  471. package/template/src/components/StoreToken.tsx +0 -39
  472. package/template/src/components/meeting-info/useMeetingInfo.tsx +0 -70
  473. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  474. package/template/src/utils/useButtonTemplate.tsx +0 -44
  475. package/template/src/utils/useJoinMeeting.ts +0 -132
@@ -10,11 +10,15 @@
10
10
  *********************************************
11
11
  */
12
12
  import {useLocalUserInfo, useRtc} from 'customization-api';
13
- import {useContext, useEffect, useRef, useState} from 'react';
14
-
15
- import {ToggleState} from '../../agora-rn-uikit/src/Contexts/PropsContext';
16
- import {isMobileUA, isWebInternal} from './common';
17
- import {AppState} from 'react-native';
13
+ import {useContext} from 'react';
14
+ import {
15
+ PropsContext,
16
+ ClientRoleType,
17
+ ToggleState,
18
+ DispatchContext,
19
+ } from '../../agora-rn-uikit';
20
+ import {isAndroid, isIOS, isWebInternal} from './common';
21
+ import {SdkMuteQueueContext} from '../components/SdkMuteToggleListener';
18
22
 
19
23
  export enum MUTE_LOCAL_TYPE {
20
24
  audio,
@@ -24,52 +28,35 @@ export enum MUTE_LOCAL_TYPE {
24
28
  * Returns an asynchronous function to toggle muted state of the given track type for the local user.
25
29
  */
26
30
  function useMuteToggleLocal() {
27
- const {RtcEngine, dispatch} = useRtc();
31
+ const {RtcEngineUnsafe} = useRtc();
32
+ const {dispatch} = useContext(DispatchContext);
28
33
  const local = useLocalUserInfo();
34
+ const isLiveStream = $config.EVENT_MODE;
35
+ const {rtcProps} = useContext(PropsContext);
36
+ const isBroadCasting = rtcProps?.role == ClientRoleType.ClientRoleBroadcaster;
29
37
 
30
- const appState = useRef(AppState.currentState);
31
- const [appStateVisible, setAppStateVisible] = useState(appState.current);
32
- const isCamON = useRef(local.video);
33
-
34
- useEffect(() => {
35
- if ($config.AUDIO_ROOM || !isMobileUA()) return;
36
- const subscription = AppState.addEventListener('change', (nextAppState) => {
37
- appState.current = nextAppState;
38
- setAppStateVisible(appState.current);
39
- });
40
-
41
- return () => {
42
- subscription?.remove();
43
- };
44
- }, []);
38
+ const {videoMuteQueue, audioMuteQueue} = useContext(SdkMuteQueueContext);
45
39
 
46
- useEffect(() => {
47
- // console.log(`Video State ${local.video} in Mode ${appStateVisible}`);
48
- if (appStateVisible === 'background') {
49
- isCamON.current = local.video;
50
- if (isCamON.current) {
51
- isWebInternal()
52
- ? RtcEngine.muteLocalVideoStream(true)
53
- : RtcEngine.enableLocalVideo(false);
40
+ const toggleMute = async (
41
+ type: MUTE_LOCAL_TYPE,
42
+ _action?: ToggleState,
43
+ _fromSdk?: boolean,
44
+ ) => {
45
+ const queueRef =
46
+ type === MUTE_LOCAL_TYPE.video ? videoMuteQueue : audioMuteQueue;
54
47
 
55
- dispatch({
56
- type: 'LocalMuteVideo',
57
- value: [0],
58
- });
48
+ const handleQueue = async () => {
49
+ if (queueRef.current.length > 0) {
50
+ const queueItem = queueRef.current.shift();
51
+ try {
52
+ await toggleMute(type, queueItem.action, true);
53
+ queueItem.resolveQueued();
54
+ } catch (e) {
55
+ queueItem.rejectQueued(e);
56
+ }
59
57
  }
60
- }
61
- if (appStateVisible === 'active' && isCamON.current) {
62
- isWebInternal()
63
- ? RtcEngine.muteLocalVideoStream(false)
64
- : RtcEngine.enableLocalVideo(true);
65
- dispatch({
66
- type: 'LocalMuteVideo',
67
- value: [1],
68
- });
69
- }
70
- }, [appStateVisible]);
58
+ };
71
59
 
72
- return async (type: MUTE_LOCAL_TYPE) => {
73
60
  switch (type) {
74
61
  case MUTE_LOCAL_TYPE.audio:
75
62
  let localAudioState = local.audio;
@@ -78,35 +65,50 @@ function useMuteToggleLocal() {
78
65
  localAudioState === ToggleState.enabled ||
79
66
  localAudioState === ToggleState.disabled
80
67
  ) {
81
- // Disable UI
82
- dispatch({
83
- type: 'LocalMuteAudio',
84
- value: [
85
- localAudioState === ToggleState.enabled
86
- ? ToggleState.disabling
87
- : ToggleState.enabling,
88
- ],
89
- });
90
-
91
- try {
92
- await RtcEngine.muteLocalAudioStream(
93
- localAudioState === ToggleState.enabled,
94
- );
95
- // Enable UI
68
+ if (localAudioState !== _action) {
69
+ // Disable UI
96
70
  dispatch({
97
71
  type: 'LocalMuteAudio',
98
72
  value: [
99
73
  localAudioState === ToggleState.enabled
100
- ? ToggleState.disabled
101
- : ToggleState.enabled,
74
+ ? ToggleState.disabling
75
+ : ToggleState.enabling,
102
76
  ],
103
77
  });
104
- } catch (e) {
105
- console.error(e);
106
- dispatch({
107
- type: 'LocalMuteAudio',
108
- value: [localAudioState],
109
- });
78
+
79
+ try {
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
+
88
+ // Enable UI
89
+ dispatch({
90
+ type: 'LocalMuteAudio',
91
+ value: [
92
+ localAudioState === ToggleState.enabled
93
+ ? ToggleState.disabled
94
+ : ToggleState.enabled,
95
+ ],
96
+ });
97
+ handleQueue();
98
+ } catch (e) {
99
+ dispatch({
100
+ type: 'LocalMuteAudio',
101
+ value: [localAudioState],
102
+ });
103
+ handleQueue();
104
+ if (_fromSdk) {
105
+ throw e;
106
+ } else {
107
+ console.error('Error toggling audio', e);
108
+ }
109
+ }
110
+ } else {
111
+ handleQueue();
110
112
  }
111
113
  }
112
114
  break;
@@ -118,45 +120,68 @@ function useMuteToggleLocal() {
118
120
  localVideoState === ToggleState.disabled
119
121
  ) {
120
122
  // Disable UI
121
- dispatch({
122
- type: 'LocalMuteVideo',
123
- value: [
124
- localVideoState === ToggleState.enabled
125
- ? ToggleState.disabling
126
- : ToggleState.enabling,
127
- ],
128
- });
129
-
130
- try {
131
- //enableLocalVideo not available on web
132
- isWebInternal()
133
- ? await RtcEngine.muteLocalVideoStream(
134
- localVideoState === ToggleState.enabled ? true : false,
135
- )
136
- : await RtcEngine.enableLocalVideo(
137
- localVideoState === ToggleState.enabled ? false : true,
138
- );
139
-
140
- // Enable UI
123
+ if (localVideoState !== _action) {
141
124
  dispatch({
142
125
  type: 'LocalMuteVideo',
143
126
  value: [
144
127
  localVideoState === ToggleState.enabled
145
- ? ToggleState.disabled
146
- : ToggleState.enabled,
128
+ ? ToggleState.disabling
129
+ : ToggleState.enabling,
147
130
  ],
148
131
  });
149
- } catch (e) {
150
- console.log('error while dispatching');
151
- dispatch({
152
- type: 'LocalMuteVideo',
153
- value: [localVideoState],
154
- });
132
+
133
+ try {
134
+ //enableLocalVideo not available on web
135
+ isWebInternal()
136
+ ? await RtcEngineUnsafe.muteLocalVideoStream(
137
+ localVideoState === ToggleState.enabled ? true : false,
138
+ )
139
+ : //@ts-ignore
140
+ await RtcEngineUnsafe.enableLocalVideo(
141
+ localVideoState === ToggleState.enabled ? false : true,
142
+ );
143
+ /**
144
+ * In native only
145
+ * hotfix for livestream co-presenter video publishing
146
+ * enableLocalVideo -> only enabled local video not publishing video stream
147
+ * enable publishing for livestreaming presenter(who raised hand and approved by host)
148
+ */
149
+ if ((isAndroid() || isIOS()) && isLiveStream && isBroadCasting) {
150
+ await RtcEngineUnsafe.muteLocalVideoStream(
151
+ localVideoState === ToggleState.enabled ? true : false,
152
+ );
153
+ }
154
+ // Enable UI
155
+ dispatch({
156
+ type: 'LocalMuteVideo',
157
+ value: [
158
+ localVideoState === ToggleState.enabled
159
+ ? ToggleState.disabled
160
+ : ToggleState.enabled,
161
+ ],
162
+ });
163
+ handleQueue();
164
+ } catch (e) {
165
+ dispatch({
166
+ type: 'LocalMuteVideo',
167
+ value: [localVideoState],
168
+ });
169
+ handleQueue();
170
+ if (_fromSdk) {
171
+ throw e;
172
+ } else {
173
+ console.error('Error toggling video', e);
174
+ }
175
+ }
176
+ } else {
177
+ handleQueue();
155
178
  }
156
179
  }
157
180
  break;
158
181
  }
159
182
  };
183
+
184
+ return toggleMute;
160
185
  }
161
186
 
162
187
  export default useMuteToggleLocal;
@@ -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;
@@ -1,18 +1,19 @@
1
1
  /*
2
2
  ********************************************
3
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.
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
- import React from 'react';
13
12
 
14
- const ScreenshareButton = () => {
15
- return <></>;
16
- };
13
+ function useSwitchCamera() {
14
+ return () => {
15
+ console.warn('SwitchCamera only supported on native platforms');
16
+ };
17
+ }
17
18
 
18
- export default ScreenshareButton;
19
+ export default useSwitchCamera;
@@ -0,0 +1,59 @@
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
+ import React, {useEffect, useState} from 'react';
14
+ import {createHook} from 'customization-implementation';
15
+
16
+ export enum ToolbarPosition {
17
+ top = 'TOP',
18
+ bottom = 'BOTTOM',
19
+ left = 'LEFT',
20
+ right = 'RIGHT',
21
+ }
22
+
23
+ export interface ToolbarInferface {
24
+ position?: ToolbarPosition;
25
+ isHorizontal?: boolean;
26
+ }
27
+
28
+ const ToolbarContext = React.createContext<ToolbarInferface>({
29
+ position: undefined,
30
+ isHorizontal: true,
31
+ });
32
+
33
+ interface ToolbarProviderProps {
34
+ value: ToolbarInferface;
35
+ children: React.ReactNode;
36
+ }
37
+ const ToolbarProvider = (props: ToolbarProviderProps) => {
38
+ const [isHorizontal, setIsHorizontal] = useState(true);
39
+ useEffect(() => {
40
+ if (
41
+ props?.value?.position === ToolbarPosition.left ||
42
+ props?.value?.position === ToolbarPosition.right
43
+ ) {
44
+ setIsHorizontal(false);
45
+ } else {
46
+ !isHorizontal && setIsHorizontal(true);
47
+ }
48
+ }, [props?.value?.position]);
49
+ return (
50
+ <ToolbarContext.Provider
51
+ value={{position: props?.value?.position, isHorizontal}}>
52
+ {props.children}
53
+ </ToolbarContext.Provider>
54
+ );
55
+ };
56
+
57
+ const useToolbar = createHook(ToolbarContext);
58
+
59
+ export {ToolbarProvider, useToolbar};
@@ -0,0 +1,42 @@
1
+ declare module "src/SDKAppWrapper" {
2
+ import { CustomizationApiInterface, MeetingInfoContextInterface, customEvents } from "customization-api/index";
3
+ import { userEventsMapInterface } from "src/utils/SdkEvents";
4
+ import { Unsubscribe } from 'nanoevents';
5
+ import { deviceId } from "src/components/DeviceConfigure";
6
+ type meetingData = Partial<MeetingInfoContextInterface['data']>;
7
+ export interface AppBuilderSdkApiInterface {
8
+ customize: (customization: CustomizationApiInterface) => Promise<void>;
9
+ joinRoom: (roomDetails: string | meetingData, userName?: string) => Promise<meetingData>;
10
+ joinPrecall: (roomDetails: string | meetingData, userName?: string) => Promise<[meetingData, (userName?: string) => Promise<MeetingInfoContextInterface['data']>]>;
11
+ setMicrophone: (deviceId: deviceId) => Promise<void>;
12
+ setCamera: (deviceId: deviceId) => Promise<void>;
13
+ setSpeaker: (deviceId: deviceId) => Promise<void>;
14
+ muteAudio: (mute: boolean | ((currentMute: boolean) => boolean)) => Promise<void>;
15
+ muteVideo: (mute: boolean | ((currentMute: boolean) => boolean)) => Promise<void>;
16
+ createCustomization: (customization: CustomizationApiInterface) => CustomizationApiInterface;
17
+ login: (token: string) => Promise<void>;
18
+ logout: () => Promise<void>;
19
+ customEvents: typeof customEvents;
20
+ on: <T extends keyof userEventsMapInterface>(userEventName: T, cb: userEventsMapInterface[T]) => Unsubscribe;
21
+ }
22
+ export const AppBuilderSdkApi: AppBuilderSdkApiInterface;
23
+ const SDKAppWrapper: () => JSX.Element;
24
+ export default SDKAppWrapper;
25
+ }
26
+ declare module "index.rsdk" {
27
+ /**
28
+ * @format
29
+ */
30
+ import { AppBuilderSdkApiInterface } from "src/SDKAppWrapper";
31
+ import React from 'react';
32
+ import * as RN from 'react-native-web';
33
+ import './src/assets/font-styles.css';
34
+ export * from "customization-api/index";
35
+ export * from "customization-implementation/index";
36
+ interface AppBuilderReactSdkInterface extends AppBuilderSdkApiInterface {
37
+ View: React.FC;
38
+ }
39
+ const AppBuilderReactSdkApi: AppBuilderReactSdkInterface;
40
+ export { React, RN };
41
+ export default AppBuilderReactSdkApi;
42
+ }