agora-appbuilder-core 4.0.0-api.5 → 4.0.0-api.6

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