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
@@ -12,14 +12,18 @@
12
12
  // @ts-nocheck
13
13
  import React, {useState, useContext, useEffect, useRef} from 'react';
14
14
  import RtmEngine from 'agora-react-native-rtm';
15
- import {PropsContext, useLocalUid} from '../../agora-rn-uikit';
15
+ import {
16
+ ContentInterface,
17
+ DispatchContext,
18
+ PropsContext,
19
+ useLocalUid,
20
+ } from '../../agora-rn-uikit';
16
21
  import ChatContext from './ChatContext';
17
- import {RtcContext} from '../../agora-rn-uikit';
18
22
  import {Platform} from 'react-native';
19
23
  import {backOff} from 'exponential-backoff';
20
24
  import {useString} from '../utils/useString';
21
- import {isAndroid, isWeb, isWebInternal} from '../utils/common';
22
- import {useRender, useRtc} from 'customization-api';
25
+ import {isAndroid, isIOS, isWeb, isWebInternal} from '../utils/common';
26
+ import {useContent, useIsAttendee, useUserName} from 'customization-api';
23
27
  import {
24
28
  safeJsonParse,
25
29
  timeNow,
@@ -27,12 +31,23 @@ import {
27
31
  getMessageTime,
28
32
  get32BitUid,
29
33
  } from '../rtm/utils';
30
- import {EventUtils, EventsQueue} from '../rtm-events';
31
- import {EventPersistLevel} from '../rtm-events-api';
34
+ import {EventUtils, EventsQueue, EventNames} from '../rtm-events';
35
+ import events, {PersistanceLevel} from '../rtm-events-api';
32
36
  import RTMEngine from '../rtm/RTMEngine';
33
37
  import {filterObject} from '../utils';
34
38
  import SDKEvents from '../utils/SdkEvents';
35
39
  import isSDK from '../utils/isSDK';
40
+ import {useAsyncEffect} from '../utils/useAsyncEffect';
41
+ import {
42
+ WaitingRoomStatus,
43
+ useRoomInfo,
44
+ } from '../components/room-info/useRoomInfo';
45
+ import LocalEventEmitter, {
46
+ LocalEventsEnum,
47
+ } from '../rtm-events-api/LocalEvents';
48
+ import {PSTNUserLabel} from '../language/default-labels/videoCallScreenLabels';
49
+ import {controlMessageEnum} from '../components/ChatContext';
50
+ import {RECORDING_BOT_UID} from '../utils/constants';
36
51
 
37
52
  export enum UserType {
38
53
  ScreenShare = 'screenshare',
@@ -43,11 +58,27 @@ const RtmConfigure = (props: any) => {
43
58
  const localUid = useLocalUid();
44
59
  const {callActive} = props;
45
60
  const {rtcProps} = useContext(PropsContext);
46
- const {RtcEngine, dispatch} = useRtc();
47
- const {renderList, activeUids} = useRender();
48
- const renderListRef = useRef({renderList: renderList});
61
+ const {dispatch} = useContext(DispatchContext);
62
+ const {defaultContent, activeUids} = useContent();
63
+ const defaultContentRef = useRef({defaultContent: defaultContent});
49
64
  const activeUidsRef = useRef({activeUids: activeUids});
50
65
 
66
+ const {
67
+ waitingRoomStatus,
68
+ data: {isHost},
69
+ } = useRoomInfo();
70
+ const waitingRoomStatusRef = useRef({waitingRoomStatus: waitingRoomStatus});
71
+
72
+ const isHostRef = useRef({isHost: isHost});
73
+
74
+ useEffect(() => {
75
+ isHostRef.current.isHost = isHost;
76
+ }, [isHost]);
77
+
78
+ useEffect(() => {
79
+ waitingRoomStatusRef.current.waitingRoomStatus = waitingRoomStatus;
80
+ }, [waitingRoomStatus]);
81
+
51
82
  /**
52
83
  * inside event callback state won't have latest value.
53
84
  * so creating ref to access the state
@@ -57,35 +88,31 @@ const RtmConfigure = (props: any) => {
57
88
  }, [activeUids]);
58
89
 
59
90
  useEffect(() => {
60
- renderListRef.current.renderList = renderList;
61
- }, [renderList]);
62
-
63
- const [login, setLogin] = useState<boolean>(false);
91
+ defaultContentRef.current.defaultContent = defaultContent;
92
+ }, [defaultContent]);
64
93
 
65
94
  const [hasUserJoinedRTM, setHasUserJoinedRTM] = useState<boolean>(false);
66
95
  const [onlineUsersCount, setTotalOnlineUsers] = useState<number>(0);
67
96
 
68
- //commented for v1 release
69
- // const userText = useString('remoteUserDefaultLabel')();
70
- const userText = 'User';
71
- const pstnUserLabel = useString('pstnUserLabel')();
72
- //commented for v1 release
73
- //const getScreenShareName = useString('screenshareUserName');
74
- const getScreenShareName = (name: string) => `${name}'s screenshare`;
75
-
76
97
  let engine = useRef<RtmEngine>(null!);
77
98
  const timerValueRef: any = useRef(5);
78
99
 
79
100
  React.useEffect(() => {
80
101
  setTotalOnlineUsers(
81
102
  Object.keys(
82
- filterObject(renderList, ([k, v]) => v?.type === 'rtc' && !v.offline),
103
+ filterObject(
104
+ defaultContent,
105
+ ([k, v]) =>
106
+ v?.type === 'rtc' &&
107
+ !v.offline &&
108
+ activeUids.indexOf(v?.uid) !== -1,
109
+ ),
83
110
  ).length,
84
111
  );
85
- }, [renderList]);
112
+ }, [defaultContent]);
86
113
 
87
114
  React.useEffect(() => {
88
- const handBrowserClose = (ev) => {
115
+ const handBrowserClose = ev => {
89
116
  ev.preventDefault();
90
117
  return (ev.returnValue = 'Are you sure you want to exit?');
91
118
  };
@@ -118,7 +145,7 @@ const RtmConfigure = (props: any) => {
118
145
  });
119
146
  RTMEngine.getInstance().setLocalUID(localUid.toString());
120
147
  timerValueRef.current = 5;
121
- setAttribute();
148
+ await setAttribute();
122
149
  } catch (error) {
123
150
  setTimeout(async () => {
124
151
  timerValueRef.current = timerValueRef.current + timerValueRef.current;
@@ -167,7 +194,7 @@ const RtmConfigure = (props: any) => {
167
194
 
168
195
  const updateRenderListState = (
169
196
  uid: number,
170
- data: Partial<RenderInterface>,
197
+ data: Partial<ContentInterface>,
171
198
  ) => {
172
199
  dispatch({type: 'UpdateRenderList', value: [uid, data]});
173
200
  };
@@ -176,7 +203,7 @@ const RtmConfigure = (props: any) => {
176
203
  try {
177
204
  await engine.current
178
205
  .getChannelMembersBychannelId(rtcProps.channel)
179
- .then(async (data) => {
206
+ .then(async data => {
180
207
  await Promise.all(
181
208
  data.members.map(async (member: any) => {
182
209
  const backoffAttributes = backOff(
@@ -219,7 +246,7 @@ const RtmConfigure = (props: any) => {
219
246
  const userData = {
220
247
  screenUid: screenUid,
221
248
  //below thing for livestreaming
222
- type: 'rtc',
249
+ type: uid === parseInt(RECORDING_BOT_UID) ? 'bot' : 'rtc',
223
250
  uid,
224
251
  offline: false,
225
252
  lastMessageTimeStamp: 0,
@@ -256,7 +283,7 @@ const RtmConfigure = (props: any) => {
256
283
  }
257
284
  }),
258
285
  );
259
- setLogin(true);
286
+
260
287
  console.log('RTM init done');
261
288
  });
262
289
  timerValueRef.current = 5;
@@ -313,7 +340,7 @@ const RtmConfigure = (props: any) => {
313
340
  const userData = {
314
341
  screenUid: screenUid,
315
342
  //below thing for livestreaming
316
- type: 'rtc',
343
+ type: uid === parseInt(RECORDING_BOT_UID) ? 'bot' : 'rtc',
317
344
  uid,
318
345
  offline: false,
319
346
  lastMessageTimeStamp: 0,
@@ -367,30 +394,46 @@ const RtmConfigure = (props: any) => {
367
394
  }
368
395
  });
369
396
 
370
- engine.current.on('channelMessageReceived', (evt) => {
397
+ engine.current.on('channelMessageReceived', evt => {
371
398
  console.log('CUSTOM_EVENT_API channelMessageReceived: ', evt);
372
399
 
373
400
  const {uid, channelId, text, ts} = evt;
374
- const [err, msg] = safeJsonParse(text);
375
- if (err) {
376
- console.log(
377
- 'CUSTOM_EVENT_API: JSON payload incorrect, Error while parsing the payload',
378
- );
379
- }
401
+ //whiteboard upload
402
+ if (uid == 1010101) {
403
+ const [err, res] = safeJsonParse(text);
404
+ if (err) {
405
+ console.log(
406
+ 'CUSTOM_EVENT_API: JSON payload incorrect, Error while parsing the payload',
407
+ );
408
+ }
409
+ if (res?.data?.data?.images) {
410
+ LocalEventEmitter.emit(
411
+ LocalEventsEnum.WHITEBOARD_FILE_UPLOAD,
412
+ res?.data?.data?.images,
413
+ );
414
+ }
415
+ } else {
416
+ const [err, msg] = safeJsonParse(text);
417
+ if (err) {
418
+ console.log(
419
+ 'CUSTOM_EVENT_API: JSON payload incorrect, Error while parsing the payload',
420
+ );
421
+ }
380
422
 
381
- const timestamp = getMessageTime(ts);
423
+ const timestamp = getMessageTime(ts);
382
424
 
383
- const sender = Platform.OS ? get32BitUid(uid) : parseInt(uid);
425
+ const sender = Platform.OS ? get32BitUid(uid) : parseInt(uid);
384
426
 
385
- if (channelId === rtcProps.channel) {
386
- try {
387
- eventDispatcher(msg, sender, timestamp);
388
- } catch (error) {
389
- console.log('error while dispacthing', error);
427
+ if (channelId === rtcProps.channel) {
428
+ try {
429
+ eventDispatcher(msg, sender, timestamp);
430
+ } catch (error) {
431
+ console.log('error while dispacthing', error);
432
+ }
390
433
  }
391
434
  }
392
435
  });
393
- doLoginAndSetupRTM();
436
+ await doLoginAndSetupRTM();
394
437
  };
395
438
 
396
439
  const runQueuedEvents = async () => {
@@ -413,15 +456,71 @@ const RtmConfigure = (props: any) => {
413
456
  ts: number,
414
457
  ) => {
415
458
  console.log('CUSTOM_EVENT_API: inside eventDispatcher ', data);
416
- const {evt, value} = data;
417
- // Step 1: Set local attributes
418
- if (value?.persistLevel === EventPersistLevel.LEVEL3) {
419
- const rtmAttribute = {key: evt, value: value};
420
- await engine.current.addOrUpdateLocalUserAttributes([rtmAttribute]);
459
+ let evt = '',
460
+ value = {};
461
+
462
+ if (data.feat === 'WAITING_ROOM') {
463
+ if (data.etyp === 'REQUEST') {
464
+ const outputData = {
465
+ evt: `${data.feat}_${data.etyp}`,
466
+ payload: JSON.stringify({
467
+ attendee_uid: data.data.data.attendee_uid,
468
+ attendee_screenshare_uid: data.data.data.attendee_screenshare_uid,
469
+ }),
470
+ persistLevel: 1,
471
+ source: 'core',
472
+ };
473
+ const formattedData = JSON.stringify(outputData);
474
+ evt = data.feat + '_' + data.etyp; //rename if client side RTM meessage is to be sent for approval
475
+ value = formattedData;
476
+ }
477
+ if (data.etyp === 'RESPONSE') {
478
+ const outputData = {
479
+ evt: `${data.feat}_${data.etyp}`,
480
+ payload: JSON.stringify({
481
+ approved: data.data.data.approved,
482
+ channelName: data.data.data.channel_name,
483
+ mainUser: data.data.data.mainUser,
484
+ screenShare: data.data.data.screenShare,
485
+ whiteboard: data.data.data.whiteboard,
486
+ }),
487
+ persistLevel: 1,
488
+ source: 'core',
489
+ };
490
+ const formattedData = JSON.stringify(outputData);
491
+ evt = data.feat + '_' + data.etyp;
492
+ value = formattedData;
493
+ }
494
+ } else {
495
+ if (
496
+ $config.ENABLE_WAITING_ROOM &&
497
+ !isHostRef.current?.isHost &&
498
+ waitingRoomStatusRef.current?.waitingRoomStatus !==
499
+ WaitingRoomStatus.APPROVED
500
+ ) {
501
+ if (
502
+ data.evt === controlMessageEnum.muteAudio ||
503
+ data.evt === controlMessageEnum.muteVideo
504
+ ) {
505
+ return;
506
+ } else {
507
+ evt = data.evt;
508
+ value = data.value;
509
+ }
510
+ } else {
511
+ evt = data.evt;
512
+ value = data.value;
513
+ }
421
514
  }
422
- // Step 2: Emit the event
515
+
423
516
  try {
424
517
  const {payload, persistLevel, source} = JSON.parse(value);
518
+ // Step 1: Set local attributes
519
+ if (persistLevel === PersistanceLevel.Session) {
520
+ const rtmAttribute = {key: evt, value: value};
521
+ await engine.current.addOrUpdateLocalUserAttributes([rtmAttribute]);
522
+ }
523
+ // Step 2: Emit the event
425
524
  console.log('CUSTOM_EVENT_API: emiting event..: ');
426
525
  EventUtils.emitEvent(evt, source, {payload, persistLevel, sender, ts});
427
526
  // Because async gets evaluated in a different order when in an sdk
@@ -441,19 +540,37 @@ const RtmConfigure = (props: any) => {
441
540
  };
442
541
 
443
542
  const end = async () => {
444
- callActive
445
- ? (RTMEngine.getInstance().destroy(),
446
- EventUtils.clear(),
447
- setHasUserJoinedRTM(false),
448
- // setLogin(false),
449
- console.log('RTM cleanup done'))
450
- : {};
543
+ if (!callActive) {
544
+ return;
545
+ }
546
+ await RTMEngine.getInstance().destroy();
547
+ if (isIOS() || isAndroid()) {
548
+ EventUtils.clear();
549
+ }
550
+ setHasUserJoinedRTM(false);
551
+ console.log('RTM cleanup done');
451
552
  };
452
553
 
453
- useEffect(() => {
454
- callActive ? init() : (console.log('waiting to init RTM'), setLogin(true));
455
- return () => {
456
- end();
554
+ useAsyncEffect(async () => {
555
+ //waiting room attendee -> rtm login will happen on page load
556
+ if ($config.ENABLE_WAITING_ROOM) {
557
+ //attendee
558
+ if (!isHost && !callActive) {
559
+ await init();
560
+ }
561
+ //host
562
+ if (isHost && callActive) {
563
+ await init();
564
+ }
565
+ }
566
+ if (!$config.ENABLE_WAITING_ROOM) {
567
+ //host and attendee
568
+ if (callActive) {
569
+ await init();
570
+ }
571
+ }
572
+ return async () => {
573
+ await end();
457
574
  };
458
575
  // eslint-disable-next-line react-hooks/exhaustive-deps
459
576
  }, [rtcProps.channel, rtcProps.appId, callActive]);
@@ -467,7 +584,7 @@ const RtmConfigure = (props: any) => {
467
584
  localUid: localUid,
468
585
  onlineUsersCount,
469
586
  }}>
470
- {login ? props.children : <></>}
587
+ {props.children}
471
588
  </ChatContext.Provider>
472
589
  );
473
590
  };
@@ -0,0 +1,112 @@
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 React from 'react';
13
+ import {View, StyleSheet} from 'react-native';
14
+ import Toolbar from '../atoms/Toolbar';
15
+ import {ToolbarCustomItem} from '../atoms/ToolbarPreset';
16
+ import {CustomToolbarSort} from '../utils/common';
17
+
18
+ const defaultStartItems: ToolbarCustomItem[] = [];
19
+ const defaultCenterItems: ToolbarCustomItem[] = [];
20
+ const defaultEndItems: ToolbarCustomItem[] = [];
21
+
22
+ export interface RightbarProps {
23
+ customItems?: ToolbarCustomItem[];
24
+ includeDefaultItems?: boolean;
25
+ }
26
+ const Rightbar = (props: RightbarProps) => {
27
+ const {customItems = [], includeDefaultItems = true} = props;
28
+
29
+ const isHidden = (i) => {
30
+ return i?.hide === 'yes';
31
+ };
32
+
33
+ const customStartItems = customItems
34
+ ?.filter((i) => i?.align === 'start' && !isHidden(i))
35
+ ?.concat(includeDefaultItems ? defaultStartItems : [])
36
+ ?.sort(CustomToolbarSort);
37
+
38
+ const customCenterItems = customItems
39
+ ?.filter((i) => i?.align === 'center' && !isHidden(i))
40
+ ?.concat(includeDefaultItems ? defaultCenterItems : [])
41
+ ?.sort(CustomToolbarSort);
42
+
43
+ const customEndItems = customItems
44
+ ?.filter((i) => i?.align === 'end' && !isHidden(i))
45
+ ?.concat(includeDefaultItems ? defaultEndItems : [])
46
+ ?.sort(CustomToolbarSort);
47
+
48
+ const renderContent = (
49
+ items: ToolbarCustomItem[],
50
+ type: 'start' | 'center' | 'end',
51
+ ) => {
52
+ return items?.map((item, index) => {
53
+ const ToolbarItem = item?.component;
54
+ if (ToolbarItem) {
55
+ return <ToolbarItem key={`left-toolbar-${type}` + index} />;
56
+ } else {
57
+ return null;
58
+ }
59
+ });
60
+ };
61
+ return (
62
+ <Toolbar>
63
+ <View style={style.startContent}>
64
+ {customStartItems && customStartItems?.length ? (
65
+ renderContent(customStartItems, 'start')
66
+ ) : (
67
+ <></>
68
+ )}
69
+ </View>
70
+ <View style={style.centerContent}>
71
+ {customCenterItems && customCenterItems?.length ? (
72
+ renderContent(customCenterItems, 'center')
73
+ ) : (
74
+ <></>
75
+ )}
76
+ </View>
77
+ <View style={style.endContent}>
78
+ {customEndItems && customEndItems?.length ? (
79
+ renderContent(customEndItems, 'end')
80
+ ) : (
81
+ <></>
82
+ )}
83
+ </View>
84
+ </Toolbar>
85
+ );
86
+ };
87
+
88
+ const style = StyleSheet.create({
89
+ startContent: {
90
+ flex: 1,
91
+ zIndex: 2,
92
+ flexDirection: 'column',
93
+ justifyContent: 'flex-start',
94
+ alignItems: 'center',
95
+ },
96
+ centerContent: {
97
+ flex: 1,
98
+ zIndex: 2,
99
+ flexDirection: 'column',
100
+ justifyContent: 'center',
101
+ alignItems: 'center',
102
+ },
103
+ endContent: {
104
+ flex: 1,
105
+ zIndex: 2,
106
+ flexDirection: 'column',
107
+ justifyContent: 'flex-end',
108
+ alignItems: 'center',
109
+ },
110
+ });
111
+
112
+ export default Rightbar;
@@ -4,8 +4,8 @@ import SDKMethodEventsManager, {
4
4
  } from '../utils/SdkMethodEvents';
5
5
  import {
6
6
  validateMeetingInfoData,
7
- MeetingInfoContextInterface,
8
- } from './meeting-info/useMeetingInfo';
7
+ RoomInfoContextInterface,
8
+ } from './room-info/useRoomInfo';
9
9
  import {CustomizationApiInterface} from 'customization-api';
10
10
  import {Unsubscribe} from 'nanoevents';
11
11
 
@@ -24,7 +24,7 @@ type SdkApiContextInterface = {
24
24
  | {
25
25
  initialized: true;
26
26
  phrase: string;
27
- meetingDetails?: Partial<MeetingInfoContextInterface['data']>;
27
+ meetingDetails?: Partial<RoomInfoContextInterface['data']>;
28
28
  userName: string;
29
29
  skipPrecall: boolean;
30
30
  promise: extractPromises<_InternalSDKMethodEventsMap['join']>;
@@ -76,8 +76,8 @@ const SdkApiInitState: SdkApiContextInterface = {
76
76
  microphoneDevice: {},
77
77
  speakerDevice: {},
78
78
  cameraDevice: {},
79
- onMuteVideo: (_) => {},
80
- onMuteAudio: (_) => {},
79
+ onMuteVideo: _ => {},
80
+ onMuteAudio: _ => {},
81
81
  clearState: () => {},
82
82
  };
83
83
 
@@ -96,7 +96,7 @@ type commonEventHandlers = {
96
96
  };
97
97
 
98
98
  const commonEventHandlers: commonEventHandlers = {
99
- join: (setter) => {
99
+ join: setter => {
100
100
  return SDKMethodEventsManager.on(
101
101
  'join',
102
102
  (res, rej, roomDetail, skipPrecall, userName) => {
@@ -130,7 +130,7 @@ const commonEventHandlers: commonEventHandlers = {
130
130
  },
131
131
  );
132
132
  },
133
- customize: (setter) => {
133
+ customize: setter => {
134
134
  return SDKMethodEventsManager.on('customize', (res, rej, customization) => {
135
135
  setter({
136
136
  customization: customization,
@@ -138,7 +138,7 @@ const commonEventHandlers: commonEventHandlers = {
138
138
  res();
139
139
  });
140
140
  },
141
- microphoneDevice: (setter) => {
141
+ microphoneDevice: setter => {
142
142
  return SDKMethodEventsManager.on(
143
143
  'microphoneDevice',
144
144
  (res, rej, deviceId) => {
@@ -149,7 +149,7 @@ const commonEventHandlers: commonEventHandlers = {
149
149
  },
150
150
  );
151
151
  },
152
- speakerDevice: (setter) => {
152
+ speakerDevice: setter => {
153
153
  return SDKMethodEventsManager.on('speakerDevice', (res, rej, deviceId) => {
154
154
  setter({
155
155
  deviceId,
@@ -157,7 +157,7 @@ const commonEventHandlers: commonEventHandlers = {
157
157
  });
158
158
  });
159
159
  },
160
- cameraDevice: (setter) => {
160
+ cameraDevice: setter => {
161
161
  return SDKMethodEventsManager.on('cameraDevice', (res, rej, deviceId) => {
162
162
  setter({
163
163
  deviceId,
@@ -169,19 +169,19 @@ const commonEventHandlers: commonEventHandlers = {
169
169
 
170
170
  const registerListener = () => {
171
171
  moduleEventsUnsub = [
172
- commonEventHandlers.customize((state) => {
172
+ commonEventHandlers.customize(state => {
173
173
  SdkApiInitState.customize = state;
174
174
  }),
175
- commonEventHandlers.join((state) => {
175
+ commonEventHandlers.join(state => {
176
176
  SdkApiInitState.join = state;
177
177
  }),
178
- commonEventHandlers.microphoneDevice((state) => {
178
+ commonEventHandlers.microphoneDevice(state => {
179
179
  SdkApiInitState.microphoneDevice = state;
180
180
  }),
181
- commonEventHandlers.speakerDevice((state) => {
181
+ commonEventHandlers.speakerDevice(state => {
182
182
  SdkApiInitState.speakerDevice = state;
183
183
  }),
184
- commonEventHandlers.cameraDevice((state) => {
184
+ commonEventHandlers.cameraDevice(state => {
185
185
  SdkApiInitState.cameraDevice = state;
186
186
  }),
187
187
  SDKMethodEventsManager.on('muteVideo', defaultMuteListener),
@@ -189,11 +189,13 @@ const registerListener = () => {
189
189
  ];
190
190
  };
191
191
 
192
+ registerListener();
193
+
192
194
  const deRegisterListener = () => {
193
- moduleEventsUnsub.forEach((v) => v());
195
+ moduleEventsUnsub.forEach(v => v());
194
196
  };
195
197
 
196
- const SdkApiContextProvider: React.FC = (props) => {
198
+ const SdkApiContextProvider: React.FC = props => {
197
199
  const [joinState, setJoinState] = useState(SdkApiInitState.join);
198
200
  const [enterRoom, setEnterRoom] =
199
201
  useState<extractPromises<_InternalSDKMethodEventsMap['join']>>();
@@ -225,7 +227,7 @@ const SdkApiContextProvider: React.FC = (props) => {
225
227
  muteAudioListener.current = value;
226
228
  };
227
229
 
228
- const clearState: SdkApiContextInterface['clearState'] = (key) => {
230
+ const clearState: SdkApiContextInterface['clearState'] = key => {
229
231
  switch (key) {
230
232
  case 'join':
231
233
  setJoinState(SdkApiInitState.join);
@@ -258,19 +260,19 @@ const SdkApiContextProvider: React.FC = (props) => {
258
260
  deRegisterListener();
259
261
 
260
262
  const unsub = [
261
- commonEventHandlers.customize((state) => {
263
+ commonEventHandlers.customize(state => {
262
264
  setUserCustomization(state);
263
265
  }),
264
- commonEventHandlers.join((state) => {
266
+ commonEventHandlers.join(state => {
265
267
  setJoinState(state);
266
268
  }),
267
- commonEventHandlers.microphoneDevice((state) => {
269
+ commonEventHandlers.microphoneDevice(state => {
268
270
  setMicrophoneDeviceState(state);
269
271
  }),
270
- commonEventHandlers.speakerDevice((state) => {
272
+ commonEventHandlers.speakerDevice(state => {
271
273
  setSpeakerDeviceState(state);
272
274
  }),
273
- commonEventHandlers.cameraDevice((state) => {
275
+ commonEventHandlers.cameraDevice(state => {
274
276
  setCameraDeviceState(state);
275
277
  }),
276
278
  SDKMethodEventsManager.on('muteVideo', (...args) => {
@@ -282,7 +284,7 @@ const SdkApiContextProvider: React.FC = (props) => {
282
284
  ];
283
285
 
284
286
  return () => {
285
- unsub.forEach((v) => v());
287
+ unsub.forEach(v => v());
286
288
  registerListener();
287
289
  };
288
290
  }, []);
@@ -1,18 +1,14 @@
1
- import React, { useContext, useEffect, createContext, useRef } from 'react';
2
- import { SdkApiContext } from './SdkApiContext';
3
- import {
4
- useMuteToggleLocal,
5
- useLocalUserInfo,
6
- ToggleState,
7
- MUTE_LOCAL_TYPE,
8
- } from 'customization-api';
1
+ import React, {useContext, useEffect, createContext, useRef} from 'react';
2
+ import {SdkApiContext} from './SdkApiContext';
3
+ import {useLocalUserInfo, ToggleState} from 'customization-api';
4
+ import useMuteToggleLocal, {MUTE_LOCAL_TYPE} from '../utils/useMuteToggleLocal';
9
5
 
10
6
  export const SdkMuteQueueContext = createContext({
11
- videoMuteQueue: { current: [] },
12
- audioMuteQueue: { current: [] },
7
+ videoMuteQueue: {current: []},
8
+ audioMuteQueue: {current: []},
13
9
  });
14
10
 
15
- const SdkMuteToggleListener = (props) => {
11
+ const SdkMuteToggleListener = props => {
16
12
  const videoMuteQueue = useRef([]);
17
13
  const audioMuteQueue = useRef([]);
18
14
 
@@ -83,7 +79,7 @@ const SdkMuteToggleListener = (props) => {
83
79
  }, [local]);
84
80
 
85
81
  return (
86
- <SdkMuteQueueContext.Provider value={{ videoMuteQueue, audioMuteQueue }}>
82
+ <SdkMuteQueueContext.Provider value={{videoMuteQueue, audioMuteQueue}}>
87
83
  {props.children}
88
84
  </SdkMuteQueueContext.Provider>
89
85
  );
@@ -74,7 +74,6 @@ export const SessionProvider = (props: {children: React.ReactNode}) => {
74
74
  useState<joinSessionInterface>(initJoinStoreValue);
75
75
  const joinSession = (data: joinSessionInterface) => {
76
76
  setJoinStore(data);
77
- // console.log({data});
78
77
  history.push(`/${data.phrase}`);
79
78
  };
80
79
  return (