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
@@ -0,0 +1,235 @@
1
+ import React from 'react';
2
+ import {useCaption} from './useCaption';
3
+ import protoRoot from './proto/ptoto';
4
+ import PQueue from 'p-queue';
5
+
6
+ type StreamMessageCallback = (args: [number, Uint8Array]) => void;
7
+ type FinalListType = {
8
+ [key: string]: string[];
9
+ };
10
+
11
+ const useStreamMessageUtils = (): {
12
+ streamMessageCallback: StreamMessageCallback;
13
+ } => {
14
+ const {
15
+ setCaptionObj,
16
+ setMeetingTranscript,
17
+ activeSpeakerRef,
18
+ prevSpeakerRef,
19
+ } = useCaption();
20
+
21
+ let captionStartTime: number = 0;
22
+ const finalList: FinalListType = {};
23
+ const finalTranscriptList: FinalListType = {};
24
+ const queue = new PQueue({concurrency: 1});
25
+ let counter = 0;
26
+ let lastOfftime = 0;
27
+
28
+ const streamMessageCallback: StreamMessageCallback = args => {
29
+ const queueCallback = (args1: [number, Uint8Array]) => {
30
+ /* uid - bot which sends stream message in channel
31
+ payload - stream message in Uint8Array format
32
+ */
33
+ const [, payload] = args1;
34
+ let nonFinalText = ''; // holds intermediate results
35
+ let finalText = ''; // holds final strings
36
+ let currentFinalText = ''; // holds current caption
37
+ let isInterjecting = false;
38
+
39
+ const textstream = protoRoot
40
+ .lookupType('Text')
41
+ .decode(payload as Uint8Array) as any;
42
+
43
+ //console.log('STT - Parsed Textstream : ', textstream);
44
+ // console.log(
45
+ // `STT-callback(${++counter}): %c${textstream.uid} %c${textstream.words
46
+ // .map(word =>
47
+ // word.text === '.'
48
+ // ? ''
49
+ // : word.isFinal
50
+ // ? word.text + ' --Final--'
51
+ // : word.text,
52
+ // )
53
+ // .join(' ')}`,
54
+ // 'color:red',
55
+ // 'color:blue',
56
+ // );
57
+
58
+ // Identifing Current & Prev Speakers for the Captions
59
+ /*
60
+ t0 A : Hi All!
61
+ t1 B : Hi A
62
+ t2 A : Hi B
63
+ t3 C : What's Plan
64
+ t4 B : Goal Planning
65
+ t5 C : Yes Agree
66
+
67
+ Screen:
68
+ Time : t0 | t1 | t2 | t3 | t4 | t5
69
+ Prev Speaker : | A:Hi All! | B: Hi A | A: Hi B | C: What's Plan | B: Goal Planning
70
+ Active Speaker : A:Hi All! | B: Hi A | A: Hi B | C: What's Plan | B: Goal Planning | C: Yes Agree
71
+ Clearing Required: A B A C
72
+
73
+ Logic:
74
+ time : t0 t1 t2 t3 t4 t5
75
+ textstream.uid : A B A C B C
76
+ (B)prevSpeaker : - - A B A C
77
+ (B)activeSpeake: - A B A C B
78
+ Prev Data clear: - - A B A C
79
+ ################## CHANGE ######################
80
+ (A)prevSpeaker : - A B A C B
81
+ (A)activeSpeake: A B A C B C
82
+
83
+ Clear when textStream.uid == prevSpeakerRef.current
84
+
85
+ */
86
+
87
+ const finalWord = textstream.words.filter(word => word.isFinal === true);
88
+ // when we only get final word for the previous speaker then don't flip previous speaker as active but update in place.
89
+
90
+ if (
91
+ textstream.uid !== activeSpeakerRef.current &&
92
+ !(finalWord.length > 0 && textstream.uid === prevSpeakerRef.current)
93
+ ) {
94
+ // we have a speaker change so clear the context for prev speaker
95
+ if (prevSpeakerRef.current !== '') {
96
+ finalList[prevSpeakerRef.current] = [];
97
+ isInterjecting = true;
98
+ // console.log(
99
+ // '%cSTT-callback%c Interjection! ',
100
+ // 'color:#fff',
101
+ // 'background: #222; color: #bada55',
102
+ // );
103
+ }
104
+ prevSpeakerRef.current = activeSpeakerRef.current;
105
+ activeSpeakerRef.current = textstream.uid;
106
+ }
107
+
108
+ /* creating [] for each user to store their complete transcripts
109
+ initializing captions state for cuurent speaker
110
+ ex: {282190954:[]}
111
+ */
112
+ if (!finalList[textstream.uid]) {
113
+ finalList[textstream.uid] = [];
114
+ finalTranscriptList[textstream.uid] = [];
115
+ }
116
+
117
+ const words = textstream.words; //[Word,Word]
118
+
119
+ /* categorize words into final & nonFinal objects per uid
120
+ Final Word Ex : {
121
+ "text": "Hello, are you doing?",
122
+ "durationMs": 960,
123
+ "isFinal": true,
124
+ "confidence": 0.8549408316612244
125
+ }
126
+ */
127
+
128
+ for (const word of words) {
129
+ if (word.isFinal) {
130
+ finalText = finalText + word.text;
131
+ } else {
132
+ nonFinalText =
133
+ word.text !== '.' ? nonFinalText + word.text : nonFinalText;
134
+ if (!captionStartTime) {
135
+ captionStartTime = performance.now();
136
+ }
137
+ }
138
+ }
139
+
140
+ if (finalText) {
141
+ finalList[textstream.uid].push(finalText);
142
+ finalTranscriptList[textstream.uid].push(finalText);
143
+ currentFinalText = finalText;
144
+ // log info to show measure the duration of passes in which a sentence gets finalized
145
+ const duration = performance.now() - captionStartTime;
146
+ console.log(
147
+ `stt-Time taken to finalize caption ${currentFinalText}: ${duration}ms`,
148
+ );
149
+ captionStartTime = null; // Reset start time
150
+ }
151
+
152
+ /* Updating Meeting Transcript */
153
+ if (currentFinalText.length) {
154
+ setMeetingTranscript(prevTranscript => {
155
+ const lastTranscriptIndex = prevTranscript.length - 1;
156
+ const lastTranscript =
157
+ lastTranscriptIndex >= 0
158
+ ? prevTranscript[lastTranscriptIndex]
159
+ : null;
160
+
161
+ /*
162
+ checking if the last item transcript matches with current uid
163
+ If yes then updating the last transcript msg with current text
164
+ If no then adding a new entry in the transcript
165
+ */
166
+ if (lastTranscript && lastTranscript.uid === textstream.uid) {
167
+ const updatedTranscript = {
168
+ ...lastTranscript,
169
+ //text: lastTranscript.text + ' ' + currentFinalText, // missing few updates with reading prev values
170
+ text: finalTranscriptList[textstream.uid].join(' '),
171
+ };
172
+
173
+ return [
174
+ ...prevTranscript.slice(0, lastTranscriptIndex),
175
+ updatedTranscript,
176
+ ];
177
+ } else {
178
+ finalTranscriptList[textstream.uid] = [currentFinalText];
179
+
180
+ return [
181
+ ...prevTranscript,
182
+ {
183
+ uid: textstream.uid,
184
+ time: new Date().getTime(),
185
+ text: currentFinalText,
186
+ },
187
+ ];
188
+ }
189
+ });
190
+ }
191
+
192
+ /*
193
+ Previous final words of the uid are prepended and
194
+ then current non final words so that context of speech is not lost
195
+ */
196
+ const existingStringBuffer = isInterjecting
197
+ ? ''
198
+ : finalList[textstream.uid]?.join(' ');
199
+ const latestString = nonFinalText;
200
+ const captionText =
201
+ existingStringBuffer.length > 0
202
+ ? existingStringBuffer + ' ' + latestString
203
+ : latestString;
204
+
205
+ // updating the captions
206
+ captionText &&
207
+ setCaptionObj(prevState => {
208
+ return {
209
+ ...prevState,
210
+ [textstream.uid]: {
211
+ text: captionText,
212
+ lastUpdated: new Date().getTime(),
213
+ },
214
+ };
215
+ });
216
+
217
+ // console.group('STT-logs');
218
+ // console.log('Recived uid =>', textstream.uid);
219
+ // console.log('PrevSpeaker uid =>', prevSpeakerRef.current);
220
+ // console.log('ActiveSpeaker uid=>', activeSpeakerRef.current);
221
+ // console.log('final List =>', finalList);
222
+ // console.groupEnd();
223
+ };
224
+ (async () => {
225
+ await queue.add(() => queueCallback(args));
226
+ console.log('stt- using pq queue');
227
+ })();
228
+ };
229
+
230
+ return {
231
+ streamMessageCallback,
232
+ };
233
+ };
234
+
235
+ export default useStreamMessageUtils;
@@ -0,0 +1,68 @@
1
+ import {formatTranscriptContent} from './utils';
2
+ import {useCaption} from './useCaption';
3
+ import RNFetchBlob from 'rn-fetch-blob';
4
+ import {isAndroid, isIOS, useRoomInfo, useContent} from 'customization-api';
5
+ import Share from 'react-native-share';
6
+
7
+ const useTranscriptDownload = (): {
8
+ downloadTranscript: () => Promise<string | null>;
9
+ } => {
10
+ const {meetingTranscript} = useCaption();
11
+ const {defaultContent} = useContent();
12
+ const {
13
+ data: {meetingTitle},
14
+ } = useRoomInfo();
15
+
16
+ const downloadTranscript = (): Promise<string | null> => {
17
+ return new Promise((resolve, reject) => {
18
+ try {
19
+ const [finalContent, fileName] = formatTranscriptContent(
20
+ meetingTranscript,
21
+ meetingTitle,
22
+ defaultContent,
23
+ );
24
+
25
+ // get path to the Documents directory, don't have access to Downloads folder so saving in documents 1
26
+ const documentsDir = RNFetchBlob.fs.dirs.DocumentDir;
27
+
28
+ // setting file path
29
+ const filePath = `${documentsDir}/${fileName}`;
30
+
31
+ // Writing content to the file
32
+ RNFetchBlob.fs
33
+ .writeFile(filePath, finalContent, 'utf8')
34
+ .then(() => {
35
+ console.warn('Content downloaded successfully on native.');
36
+ // display preview of the document and option to share
37
+ if (isIOS()) {
38
+ RNFetchBlob.ios.previewDocument(filePath);
39
+ } else if (isAndroid()) {
40
+ console.warn('android download complete !');
41
+ // need to show the preview of downloaded file
42
+ Share.open({url: `file://${filePath}`, type: 'text/plain'})
43
+ .then(res => {
44
+ console.warn('File shared successfully:', res);
45
+ resolve(filePath);
46
+ })
47
+ .catch(error => {
48
+ console.error('Error sharing file:', error);
49
+ reject(error);
50
+ });
51
+ }
52
+ resolve(filePath);
53
+ })
54
+ .catch(error => {
55
+ console.error('Error downloading content:', error);
56
+ reject(error);
57
+ });
58
+ } catch (error) {
59
+ console.error('Error downloading content:', error);
60
+ reject(error);
61
+ }
62
+ });
63
+ };
64
+
65
+ return {downloadTranscript};
66
+ };
67
+
68
+ export default useTranscriptDownload;
@@ -0,0 +1,52 @@
1
+ import {formatTranscriptContent} from './utils';
2
+ import {useCaption} from './useCaption';
3
+ import {useRoomInfo, useContent} from 'customization-api';
4
+
5
+ const useTranscriptDownload = (): {
6
+ downloadTranscript: () => Promise<string | null>;
7
+ } => {
8
+ const {meetingTranscript} = useCaption();
9
+
10
+ const {defaultContent} = useContent();
11
+ const {
12
+ data: {meetingTitle},
13
+ } = useRoomInfo();
14
+
15
+ const downloadTranscript = (): Promise<string | null> => {
16
+ return new Promise((resolve, reject) => {
17
+ try {
18
+ const [finalContent, fileName] = formatTranscriptContent(
19
+ meetingTranscript,
20
+ meetingTitle,
21
+ defaultContent,
22
+ );
23
+
24
+ // blob with required content
25
+ const blob = new Blob([finalContent], {type: 'text/plain'});
26
+
27
+ // url to download content
28
+ const downloadUrl = URL.createObjectURL(blob);
29
+
30
+ // anchor ele to download
31
+ const anchor = document.createElement('a');
32
+ anchor.href = downloadUrl;
33
+ anchor.download = fileName;
34
+
35
+ // click to dowload the file
36
+ anchor.click();
37
+
38
+ // revoke download url
39
+ URL.revokeObjectURL(downloadUrl);
40
+ console.log('Content downloaded successfully.');
41
+ resolve(downloadUrl);
42
+ } catch (error) {
43
+ console.error('Error downloading content:', error);
44
+ reject(error);
45
+ }
46
+ });
47
+ };
48
+
49
+ return {downloadTranscript};
50
+ };
51
+
52
+ export default useTranscriptDownload;
@@ -0,0 +1,125 @@
1
+ import {ContentObjects} from '../../../agora-rn-uikit/src/Contexts/RtcContext';
2
+ import {TranscriptItem} from './useCaption';
3
+
4
+ export function formatTime(timestamp: number): string {
5
+ const d = new Date(timestamp);
6
+ const h = d.getHours();
7
+ const m = d.getMinutes().toString().padStart(2, '0');
8
+ //const s = d.getSeconds().toString().padStart(2, '0');
9
+ const suffix = h >= 12 ? 'PM' : 'AM';
10
+ const H = h % 12 || 12;
11
+ return `${H}:${m} ${suffix}`;
12
+ }
13
+
14
+ export type LanguageType =
15
+ | 'en-US'
16
+ | 'hi-IN'
17
+ | 'zh-CN'
18
+ | 'zh-HK'
19
+ | 'fr-FR'
20
+ | 'de-DE'
21
+ | 'ko-KR'
22
+ | 'en-IN'
23
+ | 'ar'
24
+ | 'ja-JP'
25
+ | 'pt-PT'
26
+ | 'es-ES'
27
+ | 'it-IT'
28
+ | 'id-ID'
29
+ | '';
30
+
31
+ interface LanguageData {
32
+ label: string;
33
+ value: LanguageType;
34
+ }
35
+
36
+ export const langData: LanguageData[] = [
37
+ {label: 'English (US)', value: 'en-US'},
38
+ {label: 'English (India)', value: 'en-IN'},
39
+ {label: 'Hindi', value: 'hi-IN'},
40
+ {label: 'Chinese (Simplified)', value: 'zh-CN'},
41
+ {label: 'Chinese (Traditional)', value: 'zh-HK'},
42
+ {label: 'Arabic', value: 'ar'},
43
+ {label: 'French', value: 'fr-FR'},
44
+ {label: 'German', value: 'de-DE'},
45
+ {label: 'Japanese', value: 'ja-JP'},
46
+ {label: 'Korean', value: 'ko-KR'},
47
+ {label: 'Portuguese', value: 'pt-PT'},
48
+ {label: 'Spanish', value: 'es-ES'},
49
+ {label: 'Italian', value: 'it-IT'},
50
+ {label: 'Indonesian', value: 'id-ID'},
51
+ ];
52
+
53
+ export function getLanguageLabel(
54
+ languageCode: LanguageType[],
55
+ ): string | undefined {
56
+ const langLabels = languageCode.map(langCode => {
57
+ return langData.find(data => data.value === langCode).label;
58
+ });
59
+ return langLabels ? langLabels.join(', ') : undefined;
60
+ }
61
+
62
+ export function formatDateWithTimeZone(date: Date): string {
63
+ const day = String(date.getUTCDate()).padStart(2, '0');
64
+ const month = String(date.getUTCMonth() + 1).padStart(2, '0');
65
+ const year = date.getUTCFullYear();
66
+
67
+ const hours = String(date.getUTCHours()).padStart(2, '0');
68
+ const minutes = String(date.getUTCMinutes()).padStart(2, '0');
69
+
70
+ const timeZoneOffset = 5.5 * 60; // Offset in minutes for GMT +5:30
71
+ const offsetHours = Math.floor(timeZoneOffset / 60);
72
+ const offsetMinutes = timeZoneOffset % 60;
73
+ const offsetSign = '+';
74
+
75
+ return `${day}/${month}/${year} ${hours}:${minutes} GMT ${offsetSign}${offsetHours}:${String(
76
+ offsetMinutes,
77
+ ).padStart(2, '0')}`;
78
+ }
79
+
80
+ export const formatTranscriptContent = (
81
+ meetingTranscript: TranscriptItem[],
82
+ meetingTitle: string,
83
+ defaultContent: ContentObjects,
84
+ ) => {
85
+ const formattedContent = meetingTranscript
86
+ .map(item => {
87
+ if (item.uid.toString().indexOf('langUpdate') !== -1) {
88
+ return `${defaultContent[item?.uid?.split('-')[1]]?.name} ${item.text}`;
89
+ }
90
+ return `${defaultContent[item.uid].name} ${formatTime(
91
+ Number(item?.time),
92
+ )}:\n${item.text}`;
93
+ })
94
+ .join('\n\n');
95
+
96
+ const startTime = formatDateWithTimeZone(
97
+ new Date(meetingTranscript[0]?.time),
98
+ );
99
+
100
+ const attendees = Object.entries(defaultContent)
101
+ .filter(
102
+ arr =>
103
+ arr[1].type === 'rtc' &&
104
+ (arr[1]?.isInWaitingRoom === true ? false : true),
105
+ )
106
+ .map(arr => arr[1].name)
107
+ .join(',');
108
+
109
+ const info =
110
+ 'This editable transcript was computer generated and might contain errors. People can also change\nthe text after it was created.';
111
+ const finalContent = `${meetingTitle} (${startTime}) - Transcript \n\nParticipants\n${attendees} \n\nTranscript\n${info} \n\n${formattedContent}`;
112
+
113
+ // to give unique file name
114
+ const currentDate = new Date();
115
+ const formattedDate = currentDate.toISOString().slice(0, 10);
116
+ const formattedTime = currentDate
117
+ .toTimeString()
118
+ .slice(0, 8)
119
+ .replace(/:/g, '');
120
+
121
+ // adding the filename
122
+ const fileName = `MeetingTranscript_${formattedDate}_${formattedTime}.txt`;
123
+
124
+ return [finalContent, fileName];
125
+ };
@@ -1,4 +1,4 @@
1
- import React, {useState} from 'react';
1
+ import React, {useEffect, useReducer, useState} from 'react';
2
2
  import {
3
3
  View,
4
4
  Text,
@@ -19,6 +19,12 @@ import UserAvatar from '../../atoms/UserAvatar';
19
19
  import ThemeConfig from '../../theme';
20
20
  import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
21
21
  import Spacer from '../../atoms/Spacer';
22
+ import {useLiveStreamDataContext} from '../../components/contexts/LiveStreamDataContext';
23
+ import {useWaitingRoomContext} from '../../components/contexts/WaitingRoomContext';
24
+ import {
25
+ inviteTileNoElseJoinedYetText,
26
+ videoRoomUserFallbackText,
27
+ } from '../../language/default-labels/videoCallScreenLabels';
22
28
 
23
29
  const ChatIcon = () => (
24
30
  <View style={{alignSelf: 'center', marginRight: 20}}>
@@ -31,34 +37,64 @@ const ChatIcon = () => (
31
37
  );
32
38
 
33
39
  const ChatParticipants = (props: any) => {
34
- //commented for v1 release
35
- //const remoteUserDefaultLabel = useString('remoteUserDefaultLabel')();
36
- const remoteUserDefaultLabel = 'User';
40
+ const remoteUserDefaultLabel = useString(videoRoomUserFallbackText)();
37
41
  const {selectUser} = props;
38
- const {defaultContent, activeUids} = useContent();
42
+ const {defaultContent, activeUids, customContent} = useContent();
43
+ const activeUidsLen = activeUids?.filter(i => !customContent[i])?.length;
39
44
  const localUid = useLocalUid();
40
45
  const {unreadIndividualMessageCount} = useChatNotification();
41
46
  const isMobile = isMobileUA();
47
+ const {audienceUids, hostUids} = useLiveStreamDataContext();
48
+ const {waitingRoomUids} = useWaitingRoomContext();
49
+ const [_, forceUpdate] = useReducer(x => x + 1, 0);
50
+
51
+ useEffect(() => {
52
+ if ($config.ENABLE_WAITING_ROOM) {
53
+ forceUpdate();
54
+ }
55
+ }, [waitingRoomUids, activeUids]);
56
+
57
+ const noOneElseJoinedYet = useString(inviteTileNoElseJoinedYetText)();
58
+
42
59
  return (
43
60
  <ScrollView>
44
- {activeUids && activeUids.length === 1 ? (
45
- <View style={style.defaultMessageContainer}>
46
- <Text style={style.defaultMessageText}>
47
- No one else has joined yet.
48
- </Text>
49
- </View>
50
- ) : (
51
- <></>
52
- )}
61
+ {
62
+ //video meeting vertical
63
+ (!$config.EVENT_MODE && activeUids && activeUidsLen === 1) ||
64
+ //livestreaming vertical
65
+ ($config.EVENT_MODE && hostUids.length + audienceUids.length === 1) ? (
66
+ <View style={style.defaultMessageContainer}>
67
+ <Text style={style.defaultMessageText}>{noOneElseJoinedYet}</Text>
68
+ </View>
69
+ ) : (
70
+ <></>
71
+ )
72
+ }
53
73
  {Object.keys(defaultContent)
54
- .map((i) => parseInt(i))
55
- .filter((i) => {
74
+ .map(i => parseInt(i))
75
+ .filter(i => {
56
76
  try {
57
77
  if (isNaN(i)) {
58
78
  return false;
59
79
  } else {
60
80
  const userId = i;
61
81
  const userInfo = defaultContent[userId];
82
+ //video meeting with waiting room
83
+ if (
84
+ $config.ENABLE_WAITING_ROOM &&
85
+ !$config.EVENT_MODE &&
86
+ activeUids?.indexOf(userId) === -1
87
+ ) {
88
+ return false;
89
+ }
90
+ //livestreaming with waiting room
91
+ if (
92
+ $config.ENABLE_WAITING_ROOM &&
93
+ $config.EVENT_MODE &&
94
+ hostUids?.concat(audienceUids)?.indexOf(userId) === -1
95
+ ) {
96
+ return false;
97
+ }
62
98
  return (
63
99
  userId !== localUid && //user can't chat with own user
64
100
  // @ts-ignore
@@ -77,7 +113,7 @@ const ChatParticipants = (props: any) => {
77
113
  defaultContent[a]?.lastMessageTimeStamp
78
114
  );
79
115
  })
80
- .map((uid) => {
116
+ .map(uid => {
81
117
  const uidAsNumber = uid;
82
118
  const name = defaultContent[uidAsNumber]
83
119
  ? defaultContent[uidAsNumber].name + ''
@@ -10,19 +10,16 @@ import {ClientRole} from '../../../agora-rn-uikit';
10
10
  import {useContent} from 'customization-api';
11
11
  import UserAvatar from '../../atoms/UserAvatar';
12
12
  import Spacer from '../../atoms/Spacer';
13
+ import {
14
+ peoplePanelStreamingRequestSectionHeader,
15
+ peoplePanelUserNotFoundLabel,
16
+ } from '../../language/default-labels/videoCallScreenLabels';
13
17
 
14
18
  const CurrentLiveStreamRequestsView = (props: any) => {
15
- //commented for v1 release
16
- // const noLiveStreamingRequestsLabel = useString(
17
- // 'raisedHandsListPlaceholder',
18
- // )();
19
- // const remoteUserDefaultLabel = useString('remoteUserDefaultLabel')();
20
- // const noUserFoundLabel = useString('noUserFoundLabel')();
21
- // const raisedHandsListTitleLabel = useString('raisedHandsListTitleLabel')();
22
- const noLiveStreamingRequestsLabel = 'No streaming request(s)';
23
- const remoteUserDefaultLabel = 'User';
24
- const noUserFoundLabel = 'User not found';
25
- const raisedHandsListTitleLabel = 'Streaming Request';
19
+ const noUserFoundLabel = useString(peoplePanelUserNotFoundLabel)();
20
+ const raisedHandsListTitleLabel = useString(
21
+ peoplePanelStreamingRequestSectionHeader,
22
+ )();
26
23
  const {defaultContent} = useContent();
27
24
  const {raiseHandList, setLastCheckedRequestTimestamp} =
28
25
  useContext(LiveStreamContext);
@@ -89,6 +86,7 @@ const CurrentLiveStreamRequestsView = (props: any) => {
89
86
  </Text>
90
87
  </View>
91
88
  </View>
89
+ <Spacer size={24} horizontal={true} />
92
90
  <View style={styles.btnContainer}>
93
91
  <RemoteLiveStreamRequestReject
94
92
  uid={userUID}
@@ -117,9 +115,9 @@ const CurrentLiveStreamRequestsView = (props: any) => {
117
115
  };
118
116
  const styles = StyleSheet.create({
119
117
  btnContainer: {
120
- flex: 1,
118
+ // flex: 1,
121
119
  flexDirection: 'row',
122
- justifyContent: 'center',
120
+ // justifyContent: 'center',
123
121
  alignItems: 'center',
124
122
  },
125
123
  container: {