agora-appbuilder-core 4.0.0-test.2 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/package.json +3 -3
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +22 -22
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +20328 -20229
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/.eslintrc.js +5 -0
  10. package/template/agora-rn-uikit/package.json +14 -14
  11. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  12. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  13. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  14. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +6 -6
  15. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +78 -38
  16. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +26 -17
  17. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Icons.ts +39 -0
  19. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  20. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  21. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +5 -2
  22. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
  23. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  24. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
  25. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  26. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
  27. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  28. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
  29. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  30. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  31. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -7
  32. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -7
  33. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +6 -7
  34. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -8
  35. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -9
  36. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -8
  37. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +14 -13
  38. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -7
  39. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -7
  40. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -6
  41. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +20 -3
  42. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  43. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -1
  44. package/template/agora-rn-uikit/src/Rtc/Create.tsx +117 -111
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +46 -27
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +174 -75
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +2 -2
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +41 -19
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +37 -17
  51. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
  52. package/template/agora-rn-uikit/src/index.ts +15 -9
  53. package/template/android/app/build.gradle +59 -156
  54. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  55. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  56. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  57. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  58. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  59. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +22 -36
  60. package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
  61. package/template/android/app/src/main/res/values/strings.xml +3 -0
  62. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  63. package/template/android/build.gradle +17 -31
  64. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  65. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  66. package/template/android/gradle.properties +18 -4
  67. package/template/android/gradlew +165 -104
  68. package/template/android/gradlew.bat +12 -23
  69. package/template/android/settings.gradle +1 -0
  70. package/template/bridge/rtc/webNg/RtcEngine.ts +191 -71
  71. package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -26
  72. package/template/bridge/rtc/webNg/Types.ts +20 -5
  73. package/template/bridge/rtc/webNg/index.ts +81 -14
  74. package/template/bridge/rtm/web/index.ts +5 -3
  75. package/template/configTransform.js +16 -1
  76. package/template/customization-api/action-library.ts +4 -16
  77. package/template/customization-api/app-state.ts +15 -8
  78. package/template/customization-api/customEvents.ts +7 -2
  79. package/template/customization-api/customize.ts +1 -1
  80. package/template/customization-api/index.ts +4 -0
  81. package/template/customization-api/sub-components.ts +17 -16
  82. package/template/customization-api/temp.ts +52 -0
  83. package/template/customization-api/typeDefinition.ts +32 -45
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/index.ts +0 -1
  87. package/template/defaultConfig.js +72 -0
  88. package/template/global.d.ts +9 -1
  89. package/template/index.js +1 -4
  90. package/template/index.web.js +0 -5
  91. package/template/ios/.xcode.env +11 -0
  92. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  93. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  94. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  95. package/template/ios/HelloWorld/Info.plist +7 -1
  96. package/template/ios/HelloWorld/main.m +2 -1
  97. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +81 -119
  98. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  99. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  100. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  101. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  102. package/template/ios/HelloWorldTests/Info.plist +2 -2
  103. package/template/ios/Podfile +51 -21
  104. package/template/ios/Podfile.lock +553 -294
  105. package/template/jest.config.js +4 -0
  106. package/template/metro.config.js +7 -32
  107. package/template/package.json +48 -39
  108. package/template/react-native-toast-message/index.d.ts +3 -1
  109. package/template/react-native-toast-message/index.js +1 -0
  110. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  111. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  112. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  113. package/template/react-native-toast-message/src/index.js +3 -1
  114. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  115. package/template/src/App.tsx +79 -22
  116. package/template/src/AppRoutes.tsx +48 -3
  117. package/template/src/AppWrapper.tsx +25 -21
  118. package/template/src/SDKAppWrapper.tsx +11 -11
  119. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  120. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  121. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  122. package/template/src/app-state/useVideoQuality.tsx +39 -0
  123. package/template/src/assets/font-styles.css +174 -3
  124. package/template/src/assets/fonts/icomoon.ttf +0 -0
  125. package/template/src/assets/selection.json +1 -1
  126. package/template/src/atoms/ActionMenu.tsx +50 -11
  127. package/template/src/atoms/Avatar.tsx +51 -0
  128. package/template/src/atoms/Card.tsx +21 -8
  129. package/template/src/atoms/Carousel.native.tsx +105 -0
  130. package/template/src/atoms/Carousel.tsx +103 -0
  131. package/template/src/atoms/Checkbox.tsx +98 -0
  132. package/template/src/atoms/CircularProgress.tsx +0 -1
  133. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  134. package/template/src/atoms/CustomIcon.tsx +46 -0
  135. package/template/src/atoms/DropDownMulti.tsx +349 -0
  136. package/template/src/atoms/Dropdown.tsx +3 -3
  137. package/template/src/atoms/IconButton.tsx +52 -9
  138. package/template/src/atoms/ImageIcon.tsx +18 -5
  139. package/template/src/atoms/InlineNotification.tsx +81 -0
  140. package/template/src/atoms/InviteInfo.tsx +4 -4
  141. package/template/src/atoms/MeetingLink.tsx +160 -0
  142. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  143. package/template/src/atoms/Popup.tsx +46 -26
  144. package/template/src/atoms/PrimaryButton.tsx +19 -5
  145. package/template/src/atoms/RecordingInfo.tsx +8 -5
  146. package/template/src/atoms/SecondaryButton.tsx +2 -0
  147. package/template/src/atoms/Spacer.tsx +1 -0
  148. package/template/src/atoms/TertiaryButton.tsx +35 -5
  149. package/template/src/atoms/TextInput.tsx +2 -1
  150. package/template/src/atoms/Toolbar.tsx +102 -0
  151. package/template/src/atoms/ToolbarItem.tsx +85 -0
  152. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  153. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  154. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  155. package/template/src/atoms/Tooltip.tsx +30 -13
  156. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  157. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  158. package/template/src/auth/AuthProvider.tsx +30 -32
  159. package/template/src/auth/AuthRoute.tsx +11 -3
  160. package/template/src/auth/IDPAuth.electron.tsx +4 -3
  161. package/template/src/auth/IDPAuth.tsx +10 -2
  162. package/template/src/auth/IDPLogoutComponent.tsx +14 -5
  163. package/template/src/auth/UserCancelPopup.tsx +11 -4
  164. package/template/src/auth/openIDPURL.electron.tsx +5 -4
  165. package/template/src/auth/openIDPURL.tsx +1 -1
  166. package/template/src/auth/useIDPAuth.electron.tsx +6 -3
  167. package/template/src/auth/useIDPAuth.tsx +0 -4
  168. package/template/src/auth/useTokenAuth.tsx +10 -8
  169. package/template/src/components/Chat.tsx +97 -78
  170. package/template/src/components/ChatContext.ts +2 -0
  171. package/template/src/components/ColorConfigure.tsx +0 -1
  172. package/template/src/components/CommonStyles.ts +9 -2
  173. package/template/src/components/Controls.tsx +914 -182
  174. package/template/src/components/Controls1.native.tsx +9 -5
  175. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  176. package/template/src/components/DeviceConfigure.tsx +88 -43
  177. package/template/src/components/DeviceContext.tsx +2 -0
  178. package/template/src/components/EventsConfigure.tsx +685 -81
  179. package/template/src/components/GraphQLProvider.tsx +51 -33
  180. package/template/src/components/GridVideo.tsx +30 -16
  181. package/template/src/components/HostControlView.tsx +11 -14
  182. package/template/src/components/JoinPhrase.tsx +0 -1
  183. package/template/src/components/Leftbar.tsx +110 -0
  184. package/template/src/components/Navbar.tsx +296 -149
  185. package/template/src/components/NavbarMobile.tsx +119 -0
  186. package/template/src/components/NetworkQualityContext.tsx +12 -6
  187. package/template/src/components/ParticipantsView.tsx +62 -55
  188. package/template/src/components/PinnedVideo.tsx +191 -119
  189. package/template/src/components/Precall.native.tsx +155 -72
  190. package/template/src/components/Precall.tsx +225 -73
  191. package/template/src/components/RTMConfigure.tsx +180 -63
  192. package/template/src/components/Rightbar.tsx +112 -0
  193. package/template/src/components/SdkApiContext.tsx +26 -24
  194. package/template/src/components/SdkMuteToggleListener.tsx +8 -12
  195. package/template/src/components/SessionContext.tsx +0 -1
  196. package/template/src/components/Settings.tsx +33 -4
  197. package/template/src/components/SettingsView.tsx +42 -9
  198. package/template/src/components/Share.tsx +130 -72
  199. package/template/src/components/StorageContext.tsx +5 -4
  200. package/template/src/components/ToastComponent.tsx +7 -1
  201. package/template/src/components/WhiteboardLayout.tsx +291 -0
  202. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  203. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  204. package/template/src/components/common/Error.tsx +2 -0
  205. package/template/src/components/common/Logo.tsx +2 -2
  206. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  207. package/template/src/components/contexts/ScreenShareContext.tsx +1 -0
  208. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  209. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  210. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  211. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  212. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  213. package/template/src/components/livestream/Types.ts +36 -20
  214. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  215. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  216. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  217. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  218. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  219. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  220. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  221. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  222. package/template/src/components/participants/Participant.tsx +45 -16
  223. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  224. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  225. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  226. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  227. package/template/src/components/popups/InvitePopup.tsx +105 -44
  228. package/template/src/components/popups/StartScreenSharePopup.native.tsx +26 -23
  229. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  230. package/template/src/components/popups/StopScreenSharePopup.native.tsx +17 -5
  231. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  232. package/template/src/components/precall/LocalMute.tsx +69 -45
  233. package/template/src/components/precall/PermissionHelper.tsx +31 -28
  234. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  235. package/template/src/components/precall/VideoFallback.tsx +173 -0
  236. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  237. package/template/src/components/precall/VideoPreview.tsx +29 -164
  238. package/template/src/components/precall/index.tsx +2 -0
  239. package/template/src/components/precall/joinCallBtn.native.tsx +9 -4
  240. package/template/src/components/precall/joinCallBtn.tsx +9 -4
  241. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  242. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  243. package/template/src/components/precall/meetingTitle.tsx +37 -11
  244. package/template/src/components/precall/selectDevice.tsx +5 -5
  245. package/template/src/components/precall/textInput.tsx +17 -19
  246. package/template/src/components/precall/usePreCall.tsx +4 -4
  247. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  248. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  249. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  250. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  251. package/template/src/components/recordings/recording-table.tsx +154 -0
  252. package/template/src/components/recordings/style.ts +183 -0
  253. package/template/src/components/recordings/utils.ts +80 -0
  254. package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +46 -12
  255. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  256. package/template/src/components/useShareLink.tsx +23 -60
  257. package/template/src/components/useUserPreference.tsx +54 -17
  258. package/template/src/components/useVideoCall.tsx +52 -7
  259. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  260. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  261. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  262. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  263. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  264. package/template/src/components/virtual-background/VButils.ts +104 -0
  265. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  266. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  267. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  268. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  269. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  270. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  271. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  272. package/template/src/components/virtual-background/images/index.ts +37 -0
  273. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  274. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  275. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  276. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  277. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  278. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  279. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  280. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  281. package/template/src/components/virtual-background/useVB.tsx +267 -0
  282. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  283. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  284. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  285. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  286. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  287. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  288. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  289. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  290. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  291. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  292. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  293. package/template/src/language/default-labels/commonLabels.ts +51 -14
  294. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  295. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  296. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  297. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  298. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  299. package/template/src/pages/Create.tsx +118 -92
  300. package/template/src/pages/Endcall.tsx +2 -2
  301. package/template/src/pages/Join.tsx +67 -45
  302. package/template/src/pages/VideoCall.tsx +240 -132
  303. package/template/src/pages/video-call/ActionSheet.native.tsx +33 -3
  304. package/template/src/pages/video-call/ActionSheet.tsx +54 -15
  305. package/template/src/pages/video-call/ActionSheetContent.tsx +487 -313
  306. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  307. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  308. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  309. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  310. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  311. package/template/src/pages/video-call/VideoCallMobileView.tsx +199 -99
  312. package/template/src/pages/video-call/VideoCallScreen.native.tsx +2 -25
  313. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -57
  314. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  315. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  316. package/template/src/pages/video-call/VideoRenderer.tsx +237 -98
  317. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  318. package/template/src/pages/video-call/index.ts +42 -8
  319. package/template/src/rtm/RTMEngine.ts +9 -4
  320. package/template/src/rtm-events/constants.ts +21 -3
  321. package/template/src/rtm-events-api/Events.ts +6 -4
  322. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  323. package/template/src/rtm-events-api/types.ts +5 -5
  324. package/template/src/selection.json +1 -0
  325. package/template/src/subComponents/ChatBubble.tsx +87 -67
  326. package/template/src/subComponents/ChatContainer.tsx +70 -49
  327. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  328. package/template/src/subComponents/ChatInput.tsx +31 -80
  329. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  330. package/template/src/subComponents/Checkbox.tsx +7 -6
  331. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  332. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  333. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  334. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  335. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  336. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  337. package/template/src/subComponents/Loading.tsx +22 -9
  338. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  339. package/template/src/subComponents/LocalEndCall.tsx +48 -31
  340. package/template/src/subComponents/LocalSwitchCamera.tsx +49 -11
  341. package/template/src/subComponents/LocalVideoMute.tsx +87 -35
  342. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  343. package/template/src/subComponents/Recording.tsx +29 -9
  344. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  345. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  346. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  347. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  348. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  349. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  350. package/template/src/subComponents/SelectDevice.tsx +103 -34
  351. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  352. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  353. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  354. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  355. package/template/src/subComponents/ToastConfig.tsx +70 -61
  356. package/template/src/subComponents/caption/Caption.tsx +132 -0
  357. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  358. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  359. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  360. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  361. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  362. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  363. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  364. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  365. package/template/src/subComponents/caption/index.ts +3 -0
  366. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  367. package/template/src/subComponents/caption/proto/test.proto +23 -0
  368. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  369. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  370. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  371. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  372. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  373. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  374. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  375. package/template/src/subComponents/caption/utils.ts +126 -0
  376. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  377. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  378. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  379. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  380. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  381. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  382. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  383. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  384. package/template/src/subComponents/recording/useRecording.tsx +251 -150
  385. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  386. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +18 -13
  387. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +164 -93
  388. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +163 -108
  389. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  390. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  391. package/template/src/theme/index.ts +13 -0
  392. package/template/src/utils/SdkMethodEvents.ts +5 -5
  393. package/template/src/utils/axiomLogger.ts +117 -0
  394. package/template/src/utils/book.jpg +0 -0
  395. package/template/src/utils/common.tsx +96 -1
  396. package/template/src/utils/constants.ts +4 -0
  397. package/template/src/utils/getCustomRoute.ts +7 -0
  398. package/template/src/utils/index.tsx +34 -0
  399. package/template/src/utils/useActionSheet.tsx +50 -0
  400. package/template/src/utils/useActiveSpeaker.ts +38 -0
  401. package/template/src/utils/useAppState.ts +17 -0
  402. package/template/src/utils/useAsyncEffect.ts +138 -0
  403. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
  404. package/template/src/utils/useEndCall.ts +65 -0
  405. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  406. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  407. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  408. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  409. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  410. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  411. package/template/src/utils/useIsPSTN.ts +3 -3
  412. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  413. package/template/src/utils/useJoinRoom.ts +199 -0
  414. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  415. package/template/src/{components/Settings.native.tsx → utils/useMenu.tsx} +16 -6
  416. package/template/src/utils/useModal.tsx +8 -0
  417. package/template/src/utils/useMutePSTN.ts +2 -2
  418. package/template/src/utils/useMuteToggleLocal.ts +21 -9
  419. package/template/src/utils/useRemoteEndCall.ts +4 -4
  420. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  421. package/template/src/utils/useRemoteMute.ts +7 -7
  422. package/template/src/utils/useRemoteRequest.ts +7 -7
  423. package/template/src/utils/useSearchParams.tsx +18 -0
  424. package/template/src/utils/useString.ts +13 -3
  425. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  426. package/template/src/utils/useSwitchCamera.tsx +19 -0
  427. package/template/src/utils/useToolbar.tsx +59 -0
  428. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  429. package/template/static.d.ts +42 -0
  430. package/template/web/index.html +20 -0
  431. package/template/webpack.commons.js +21 -10
  432. package/template/_buckconfig +0 -6
  433. package/template/_gitattributes +0 -1
  434. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  435. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  436. package/template/android/app/_BUCK +0 -55
  437. package/template/android/app/build_defs.bzl +0 -19
  438. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  439. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  440. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  441. package/template/src/utils/useButtonTemplate.tsx +0 -44
  442. package/template/src/utils/useJoinMeeting.ts +0 -142
@@ -3,7 +3,12 @@ import React from 'react';
3
3
 
4
4
  import {SidePanelType} from '../../subComponents/SidePanelEnum';
5
5
 
6
- import {ChatHeader, PeopleHeader, SettingsHeader} from './SidePanelHeader';
6
+ import {
7
+ ChatHeader,
8
+ PeopleHeader,
9
+ SettingsHeader,
10
+ TranscriptHeader,
11
+ } from './SidePanelHeader';
7
12
 
8
13
  const ActionSheetHandle = (props: {sidePanel: SidePanelType}) => {
9
14
  const Header = null;
@@ -17,6 +22,7 @@ const ActionSheetHandle = (props: {sidePanel: SidePanelType}) => {
17
22
  {sidePanel === SidePanelType.Participants && <PeopleHeader />}
18
23
  {sidePanel === SidePanelType.Chat && <ChatHeader />}
19
24
  {sidePanel === SidePanelType.Settings && <SettingsHeader />}
25
+ {sidePanel === SidePanelType.Transcript && <TranscriptHeader />}
20
26
  </View>
21
27
  );
22
28
  };
@@ -1,24 +1,36 @@
1
- import {layoutObjectType} from 'customization-api';
1
+ import {LayoutItem} from 'customization-api';
2
2
  import GridVideo from '../../components/GridVideo';
3
3
  import PinnedVideo from '../../components/PinnedVideo';
4
4
  import useLayoutsData from './useLayoutsData';
5
5
  import {useLayout} from '../../utils/useLayout';
6
-
7
- export const DefaultLayouts: layoutObjectType[] = [
6
+ import {isMobileUA} from '../../utils/common';
7
+ import {
8
+ toolbarItemLayoutOptionGridText,
9
+ toolbarItemLayoutOptionSidebarText,
10
+ } from '../../language/default-labels/videoCallScreenLabels';
11
+ const isMobileView = isMobileUA();
12
+ const DefaultLayouts: LayoutItem[] = [
8
13
  {
9
14
  name: 'grid',
10
15
  label: 'Grid',
11
- iconName: 'grid',
16
+ translationKey: toolbarItemLayoutOptionGridText,
17
+ //iconName: 'grid',
18
+ icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFOSURBVHgB7drBTcNAEIXhWVeQEkwJVIDohA6gA2iBigIVhA6cEuhgGGNfd1+kZK1x9H/SyidbT0/ry+6YAQBwt9z9EOs91tFv4xTrZW8ZasHGWJP3Mc3fz56hiHBTPEbr5xzrsZTya0kzDLW3fNmCo/U1xnqzxBmG+nv2att4ssQZqr/Y/IPaRmJ7l6wZBkMTBQkUJFCQQEECBQkUJFCQQEECBQkUJFCQQEECBQkUJFCQ0Croy7bxY4kztAr6tm18WuIMrSPXQzxO1vlGIU46HyxxhuoOWq9Bnm25FunhvH7fMme4yHz94stt5C0cY32su2NXGQAAuDPOAFUzGANUIhwDVLW3nAGqfwxQiQwMUIkMnCgKFCRQkEBBAgUJFCRQkEBBAgUJFCRQkEBBAgUJFCRQkEBBAgNUIgMDVCIDA1QMUF2X4SLOABUAADv0Bxz9l6sMoGOZAAAAAElFTkSuQmCC',
12
19
  component: GridVideo,
13
20
  },
14
21
  {
15
22
  name: 'pinned',
16
- label: 'Pinned',
17
- iconName: 'pinned',
23
+ label: 'Sidebar',
24
+ translationKey: toolbarItemLayoutOptionSidebarText,
25
+ //iconName: 'pinned',
26
+ //for mobile view top pinned icon and desktop left pinned icon
27
+ icon: isMobileView
28
+ ? 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFFSURBVHgB7dzhTcJQFEDhWybQDeoIjuAoTqKO4ASOAk6gG9gNZIN6TTUhhvdOAo9Iy/mSF3689JKeFH40lAhJkhZpHMc+1zrX53igP/OaaDjzJVdfa9DV4uTLOlcfR+jSzswxGmg8c8h1myO3+zZXlQMf4sg4M9Hneixt1q6gj2gQaAZX0Ldtjrze+16lI874ZE4+c9cqVGUgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIEn/6eQ3zObCG2YHMhAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEKgF2sTleC9t1AK9xuV4Lm3UfqN4lS9vsfxHw4eu625Km8Ur6OdB+7uYHrxfqiGmcyyqfklnpN+691H5nM7QJtdTTP+4MIQkSYv0BZfkCSDYSwACAAAAAElFTkSuQmCC'
29
+ : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGCSURBVHgB7drdTYRAFIbhM1SwJWAJVmC2E61AO1BLsCKwgrUDKMEOxkPAS+a7YeCweZ9ksle7OXn3jzBjBgDA3co5X3y9++ryNm6+ns82w9pgra8h1zFMrx99hiSGG/yhtXpGX48ppV8LOkOz9qw8fwRbq6v19WaBZ2jWn2evto8nCzzD6lds+oLaTvzjnaLO0BiKCCQQSCCQQCCBQAKBBAIJBBIIJBBIIJBAIIFAAoEEAgmlQL3t48cCKwX6tn18WWClW64Xf7hZ5R0Fv9P5YOszxL3lumyDXG3eFqlhXF4/tOKPtEf6f4dfbLvfit7Xp817UaMFlywwdjVOgEACgQQCCQQSZKAc9fDSTtT5oNYfOqtzNT36upauhSL8zYc+QBX6OijC4aUIoh+gOhwHqMQM/M0LBBIIJBBIIJBAIIFAAoEEAgkEEggkEEggkEAggUACgYToB6h6O3iG6AeoDp8h+gGqw2cIfYDqNIe4pi2gZUd0C52vj+XTcaoZAAA4lz9x+tmcZ0GmbAAAAABJRU5ErkJggg==',
18
30
  component: PinnedVideo,
19
31
  },
20
32
  ];
21
-
33
+ export {DefaultLayouts};
22
34
  export const getPinnedLayoutName = () => DefaultLayouts[1].name;
23
35
  export const getGridLayoutName = () => DefaultLayouts[0].name;
24
36
 
@@ -28,7 +40,7 @@ export const useSetPinnedLayout = () => {
28
40
  const pinnedLayoutName = getPinnedLayoutName();
29
41
  let checkPinnedLayoutExist = false;
30
42
  if (layouts && Array.isArray(layouts) && layouts.length) {
31
- let data = layouts.filter((item) => item.name === pinnedLayoutName);
43
+ let data = layouts.filter(item => item.name === pinnedLayoutName);
32
44
  if (data && data.length) {
33
45
  checkPinnedLayoutExist = true;
34
46
  }
@@ -1,88 +1,60 @@
1
- import React, {useContext, useEffect} from 'react';
2
- import {View, StyleSheet, useWindowDimensions, Text} from 'react-native';
3
- import {RFValue} from 'react-native-responsive-fontsize';
1
+ import React from 'react';
2
+ import {View, StyleSheet, Text} from 'react-native';
4
3
  import ThemeConfig from '../../theme';
5
- import {RenderInterface} from '../../../agora-rn-uikit';
6
4
  import ImageIcon from '../../atoms/ImageIcon';
7
- import TextWithTooltip from '../../subComponents/TextWithTooltip';
5
+ import {useLayout, useContent} from 'customization-api';
6
+ import {isMobileUA, isWeb, useIsSmall} from '../../utils/common';
7
+ import {getGridLayoutName} from './DefaultLayouts';
8
+ import {useVideoContainer} from './VideoRenderer';
9
+ import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
8
10
  import {useString} from '../../utils/useString';
9
- import {useLayout, useRender} from 'customization-api';
10
- import useIsActiveSpeaker from '../../utils/useIsActiveSpeaker';
11
- import {isMobileUA, isWeb, isWebInternal, useIsSmall} from '../../utils/common';
12
- import AnimatedActiveSpeaker from '../../atoms/AnimatedActiveSpeaker';
13
- import {getGridLayoutName, getPinnedLayoutName} from './DefaultLayouts';
11
+ import {videoRoomUserFallbackText} from '../../language/default-labels/videoCallScreenLabels';
14
12
 
15
- interface NameWithMicIconProps {
16
- user: RenderInterface;
17
- isMax: boolean;
18
- videoTileWidth: number;
13
+ export interface NameWithMicIconProps {
14
+ name: string;
15
+ muted?: boolean;
16
+ customBgColor?: string;
17
+ customTextColor?: string;
19
18
  }
20
19
 
21
20
  const NameWithMicIcon = (props: NameWithMicIconProps) => {
22
- const {activeUids} = useRender();
21
+ const {activeUids, customContent} = useContent();
22
+ const {videoTileWidth} = useVideoContainer();
23
23
  const {currentLayout} = useLayout();
24
+ const activeUidsLen = activeUids?.filter(i => !customContent[i])?.length;
24
25
  const reduceSpace =
25
26
  isMobileUA() &&
26
27
  activeUids.length > 4 &&
27
28
  currentLayout === getGridLayoutName();
28
- const {user} = props;
29
- const {height, width} = useWindowDimensions();
30
- const isActiveSpeaker = useIsActiveSpeaker();
31
- const isSpeaking = isActiveSpeaker(user.uid);
32
- //commented for v1 release
33
- //const remoteUserDefaultLabel = useString('remoteUserDefaultLabel')();
34
- const remoteUserDefaultLabel = 'User';
29
+ const {name, muted} = props;
30
+ const remoteUserDefaultLabel = useString(videoRoomUserFallbackText)();
35
31
  const isSmall = useIsSmall();
36
32
  return (
37
33
  <View
38
34
  style={[
39
35
  style.container,
40
36
  {
41
- maxWidth:
42
- props.videoTileWidth * 0.6 > 180 ? 180 : props.videoTileWidth * 0.6,
37
+ maxWidth: videoTileWidth * 0.6 > 180 ? 180 : videoTileWidth * 0.6,
43
38
  },
44
39
  reduceSpace ? {left: 2, bottom: 2} : {},
45
- reduceSpace && activeUids.length > 12 ? {padding: 2} : {},
40
+ reduceSpace && activeUidsLen > 12 ? {padding: 2} : {},
41
+ props?.customBgColor ? {backgroundColor: props?.customBgColor} : {},
46
42
  ]}>
47
- {/* {user.audio ? (
48
- <AnimatedActiveSpeaker isSpeaking={isSpeaking} />
49
- ) : ( */}
50
- <ImageIcon
51
- iconType="plain"
52
- name={
53
- user.audio && isSpeaking
54
- ? 'active-speaker'
55
- : user.audio
56
- ? 'mic-on'
57
- : 'mic-off'
58
- }
59
- tintColor={
60
- user.audio
61
- ? $config.PRIMARY_ACTION_BRAND_COLOR
62
- : $config.SEMANTIC_ERROR
63
- }
64
- iconSize={20}
65
- />
66
- {/* )} */}
67
- {/* <ImageIcon
68
- name={
69
- isSpeaking ? 'active-speaker' : user.audio ? 'mic-on' : 'mic-off'
70
- }
43
+ {muted !== undefined ? (
44
+ <ImageIcon
45
+ iconType="plain"
46
+ name={!muted ? 'mic-on' : 'mic-off'}
71
47
  tintColor={
72
- isSpeaking
73
- ? $config.PRIMARY_ACTION_BRAND_COLOR
74
- : user.audio
75
- ? $config.PRIMARY_ACTION_BRAND_COLOR
76
- : $config.SEMANTIC_ERROR
48
+ !muted ? $config.PRIMARY_ACTION_BRAND_COLOR : $config.SEMANTIC_ERROR
77
49
  }
78
- iconSize={'small'}
79
- /> */}
50
+ iconSize={20}
51
+ />
52
+ ) : (
53
+ <></>
54
+ )}
80
55
  {(isMobileUA() || (!isMobileUA() && isSmall())) &&
81
56
  currentLayout === getGridLayoutName() &&
82
- activeUids.length > 6 ? (
83
- // || (isMobileUA() &&
84
- // currentLayout !== getPinnedLayoutName() &&
85
- // !props?.isMax)
57
+ activeUidsLen > 6 ? (
86
58
  <></>
87
59
  ) : (
88
60
  <PlatformWrapper>
@@ -90,8 +62,11 @@ const NameWithMicIcon = (props: NameWithMicIconProps) => {
90
62
  numberOfLines={1}
91
63
  textBreakStrategy="simple"
92
64
  ellipsizeMode="tail"
93
- style={style.name}>
94
- {user.name || remoteUserDefaultLabel}
65
+ style={[
66
+ style.name,
67
+ props?.customTextColor ? {color: props?.customTextColor} : {},
68
+ ]}>
69
+ {name || remoteUserDefaultLabel}
95
70
  </Text>
96
71
  </PlatformWrapper>
97
72
  )}
@@ -120,7 +95,8 @@ const PlatformWrapper = ({children}) => {
120
95
 
121
96
  const style = StyleSheet.create({
122
97
  container: {
123
- backgroundColor: $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR,
98
+ backgroundColor:
99
+ $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR + hexadecimalTransparency['25%'],
124
100
  position: 'absolute',
125
101
  alignItems: 'center',
126
102
  padding: 8,
@@ -129,7 +105,8 @@ const style = StyleSheet.create({
129
105
  bottom: 8,
130
106
  borderRadius: 4,
131
107
  flexDirection: 'row',
132
- zIndex: 5,
108
+ zIndex: 999,
109
+ elevation: 5,
133
110
  },
134
111
  name: {
135
112
  color: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
@@ -1,7 +1,7 @@
1
- import React from 'react';
1
+ import React, {useEffect} from 'react';
2
2
  import VideoRenderer from './VideoRenderer';
3
3
  import {UidType} from '../../../agora-rn-uikit';
4
- import {renderComponentObjectInterface, useRender} from 'customization-api';
4
+ import {useContent} from 'customization-api';
5
5
  import {useCustomization} from 'customization-implementation';
6
6
  import {isValidReactComponent} from '../../utils/common';
7
7
 
@@ -16,35 +16,19 @@ interface RenderComponentProps {
16
16
  isMax?: boolean;
17
17
  }
18
18
  const RenderComponent = ({uid, isMax = false}: RenderComponentProps) => {
19
- const {renderList} = useRender();
20
- const FpeRenderComponent = useCustomization((config) =>
21
- typeof config?.components?.videoCall === 'object' &&
22
- typeof config?.components?.videoCall?.customContent === 'object'
23
- ? config?.components?.videoCall?.customContent
24
- : undefined,
25
- );
19
+ const {defaultContent, customContent, activeUids} = useContent();
20
+ const RenderComp = DefaultRenderComponent['rtc'];
26
21
 
27
- const getRenderComponent = (type: keyof renderComponentObjectInterface) => {
28
- //checking FPE providing the render component and whether its valid react element
29
- const FPEComp =
30
- FpeRenderComponent &&
31
- FpeRenderComponent[type] &&
32
- isValidReactComponent(FpeRenderComponent[type])
33
- ? FpeRenderComponent[type]
34
- : false;
35
- //if its valid element then return fpe comp other return the default component
36
- if (FPEComp) {
37
- return FPEComp;
38
- } else {
39
- return DefaultRenderComponent[type]
40
- ? DefaultRenderComponent[type]
41
- : DefaultRenderComponent['rtc'];
42
- }
43
- };
44
-
45
- const RenderComp = getRenderComponent(renderList[uid]?.type);
46
-
47
- return <RenderComp user={renderList[uid]} isMax={isMax} />;
22
+ if (customContent && customContent[uid] && customContent[uid]?.component) {
23
+ const CustomComponent = customContent[uid]?.component;
24
+ const CustomComponentProps = customContent[uid]?.props;
25
+ //@ts-ignore
26
+ return <CustomComponent {...CustomComponentProps} />;
27
+ } else if (defaultContent[uid]) {
28
+ return <RenderComp user={defaultContent[uid]} isMax={isMax} />;
29
+ } else {
30
+ return null;
31
+ }
48
32
  };
49
33
 
50
34
  export default RenderComponent;
@@ -1,4 +1,10 @@
1
- import {StyleSheet, Text, TouchableOpacity, View} from 'react-native';
1
+ import {
2
+ StyleSheet,
3
+ Text,
4
+ TouchableOpacity,
5
+ useWindowDimensions,
6
+ View,
7
+ } from 'react-native';
2
8
  import React, {useContext} from 'react';
3
9
  import SidePanelHeader, {
4
10
  SidePanelStyles,
@@ -8,13 +14,42 @@ import ThemeConfig from '../../theme';
8
14
  import {useChatNotification} from '../../components/chat-notification/useChatNotification';
9
15
  import {useSidePanel} from '../../utils/useSidePanel';
10
16
  import {SidePanelType} from '../../subComponents/SidePanelEnum';
11
- import {useChatUIControl} from '../../components/chat-ui/useChatUIControl';
17
+ import {
18
+ ChatType,
19
+ useChatUIControls,
20
+ } from '../../components/chat-ui/useChatUIControls';
12
21
  import {numFormatter} from '../../utils';
13
22
  import ChatContext from '../../components/ChatContext';
23
+ import {useCaption} from '../../subComponents/caption/useCaption';
24
+ import ActionMenu, {ActionMenuItem} from '../../atoms/ActionMenu';
25
+ import {calculatePosition} from '../../utils/common';
26
+ import LanguageSelectorPopup from '../../subComponents/caption/LanguageSelectorPopup';
27
+ import useSTTAPI from '../../subComponents/caption/useSTTAPI';
28
+ import useGetName from '../../utils/useGetName';
29
+ import {LanguageType} from '../../subComponents/caption/utils';
30
+ import {useRoomInfo, usePreCall} from 'customization-api';
31
+ import useTranscriptDownload from '../../subComponents/caption/useTranscriptDownload';
32
+ import {useVB} from '../../components/virtual-background/useVB';
33
+ import {PropsContext} from '../../../agora-rn-uikit';
34
+ import useLiveStreamingUids from '../../utils/useLiveStreamingUids';
35
+ import {useString} from '../../utils/useString';
36
+ import {
37
+ settingsPanelHeading,
38
+ vbPanelHeading,
39
+ } from '../../language/default-labels/precallScreenLabels';
40
+ import {
41
+ chatPanelGroupTabText,
42
+ chatPanelPrivateTabText,
43
+ peoplePanelHeaderText,
44
+ sttChangeSpokenLanguageText,
45
+ sttDownloadTranscriptBtnText,
46
+ sttTranscriptPanelHeaderText,
47
+ } from '../../language/default-labels/videoCallScreenLabels';
14
48
 
15
- export const SettingsHeader = (props) => {
49
+ export const SettingsHeader = props => {
16
50
  const {setSidePanel} = useSidePanel();
17
- const settingsLabel = 'Settings';
51
+ const settingsLabel = useString(settingsPanelHeading)();
52
+
18
53
  return (
19
54
  <SidePanelHeader
20
55
  centerComponent={
@@ -31,7 +66,12 @@ export const SettingsHeader = (props) => {
31
66
 
32
67
  export const PeopleHeader = () => {
33
68
  const {onlineUsersCount} = useContext(ChatContext);
34
- const participantsLabel = `People (${numFormatter(onlineUsersCount)})`;
69
+ const {hostUids, audienceUids} = useLiveStreamingUids();
70
+ const count = $config.EVENT_MODE
71
+ ? hostUids.length + audienceUids.length
72
+ : onlineUsersCount;
73
+ const participantsLabel = useString(peoplePanelHeaderText)();
74
+
35
75
  const {setSidePanel} = useSidePanel();
36
76
  return (
37
77
  <SidePanelHeader
@@ -57,39 +97,32 @@ export const ChatHeader = () => {
57
97
  } = useChatNotification();
58
98
 
59
99
  const {setSidePanel} = useSidePanel();
60
- const groupChatLabel = 'Group';
61
- const privateChatLabel = 'Private';
100
+ const groupChatLabel = useString(chatPanelGroupTabText)();
101
+ const privateChatLabel = useString(chatPanelPrivateTabText)();
62
102
 
63
- const {
64
- groupActive,
65
- setGroupActive,
66
- privateActive,
67
- setPrivateActive,
68
- setSelectedChatUserId: setSelectedUser,
69
- } = useChatUIControl();
103
+ const {chatType, setChatType, setPrivateChatUser} = useChatUIControls();
70
104
 
71
105
  const selectGroup = () => {
72
- setPrivateActive(false);
73
- setGroupActive(true);
106
+ setChatType(ChatType.Group);
74
107
  //move this logic into ChatContainer
75
108
  //setUnreadGroupMessageCount(0);
76
- setSelectedUser(0);
109
+ setPrivateChatUser(0);
77
110
  };
78
111
  const selectPrivate = () => {
79
- setGroupActive(false);
80
- setSelectedUser(0);
81
- setPrivateActive(false);
112
+ setPrivateChatUser(0);
113
+ setChatType(ChatType.MemberList);
82
114
  };
83
-
115
+ const isPrivateActive = chatType === ChatType.Private;
116
+ const isGroupActive = chatType === ChatType.Group;
84
117
  return (
85
118
  <SidePanelHeader
86
119
  isChat={true}
87
- leadingIconName={privateActive ? 'back-btn' : null}
120
+ leadingIconName={isPrivateActive ? 'back-btn' : null}
88
121
  leadingIconOnPress={
89
- privateActive
122
+ isPrivateActive
90
123
  ? () => {
91
- setSelectedUser(0);
92
- setPrivateActive(false);
124
+ setPrivateChatUser(0);
125
+ setChatType(ChatType.MemberList);
93
126
  }
94
127
  : () => {}
95
128
  }
@@ -98,20 +131,20 @@ export const ChatHeader = () => {
98
131
  <TouchableOpacity
99
132
  onPress={selectGroup}
100
133
  style={
101
- groupActive ? styles.activeContainer : styles.nonActiveContainer
134
+ isGroupActive ? styles.activeContainer : styles.nonActiveContainer
102
135
  }>
103
136
  {unreadGroupMessageCount !== 0 ? (
104
137
  <View style={styles.chatNotification} />
105
138
  ) : null}
106
139
  <Text
107
- style={groupActive ? styles.activeText : styles.nonActiveText}>
140
+ style={isGroupActive ? styles.activeText : styles.nonActiveText}>
108
141
  {groupChatLabel}
109
142
  </Text>
110
143
  </TouchableOpacity>
111
144
  <TouchableOpacity
112
145
  onPress={selectPrivate}
113
146
  style={
114
- !groupActive
147
+ !isGroupActive
115
148
  ? [styles.activeContainer]
116
149
  : [styles.nonActiveContainer]
117
150
  }>
@@ -119,7 +152,7 @@ export const ChatHeader = () => {
119
152
  <View style={styles.chatNotification} />
120
153
  ) : null}
121
154
  <Text
122
- style={!groupActive ? styles.activeText : styles.nonActiveText}>
155
+ style={!isGroupActive ? styles.activeText : styles.nonActiveText}>
123
156
  {privateChatLabel}
124
157
  </Text>
125
158
  </TouchableOpacity>
@@ -133,6 +166,171 @@ export const ChatHeader = () => {
133
166
  );
134
167
  };
135
168
 
169
+ export const VBHeader = () => {
170
+ const label = useString(vbPanelHeading)();
171
+ const {setSidePanel} = useSidePanel();
172
+ const {setIsVBActive} = useVB();
173
+
174
+ const {
175
+ rtcProps: {callActive},
176
+ } = useContext(PropsContext);
177
+ const trailingIconName = 'close';
178
+ return (
179
+ <SidePanelHeader
180
+ centerComponent={<Text style={SidePanelStyles.heading}>{label}</Text>}
181
+ trailingIconName={trailingIconName}
182
+ trailingIconOnPress={() => {
183
+ setSidePanel(SidePanelType.None);
184
+ setIsVBActive(false);
185
+ }}
186
+ />
187
+ );
188
+ };
189
+
190
+ export const TranscriptHeader = props => {
191
+ const {setSidePanel} = useSidePanel();
192
+ const moreIconRef = React.useRef<View>(null);
193
+ const [actionMenuVisible, setActionMenuVisible] =
194
+ React.useState<boolean>(false);
195
+
196
+ const label = useString(sttTranscriptPanelHeaderText)();
197
+
198
+ return (
199
+ <SidePanelHeader
200
+ centerComponent={<Text style={SidePanelStyles.heading}>{label}</Text>}
201
+ trailingIconName={'more-menu'}
202
+ ref={moreIconRef}
203
+ trailingIconOnPress={() => {
204
+ setActionMenuVisible(true);
205
+ }}
206
+ trailingIconName2={'close'}
207
+ trailingIconOnPress2={() => {
208
+ setSidePanel(SidePanelType.None);
209
+ }}>
210
+ <TranscriptHeaderActionMenu
211
+ actionMenuVisible={actionMenuVisible}
212
+ setActionMenuVisible={setActionMenuVisible}
213
+ btnRef={moreIconRef}
214
+ />
215
+ </SidePanelHeader>
216
+ );
217
+ };
218
+
219
+ interface TranscriptHeaderActionMenuProps {
220
+ actionMenuVisible: boolean;
221
+ setActionMenuVisible: (actionMenuVisible: boolean) => void;
222
+ btnRef: React.RefObject<View>;
223
+ }
224
+
225
+ const TranscriptHeaderActionMenu = (props: TranscriptHeaderActionMenuProps) => {
226
+ const {actionMenuVisible, setActionMenuVisible, btnRef} = props;
227
+ const {
228
+ language: prevLang,
229
+ meetingTranscript,
230
+ isLangChangeInProgress,
231
+ setLanguage,
232
+ } = useCaption();
233
+ const {downloadTranscript} = useTranscriptDownload();
234
+ const [modalPosition, setModalPosition] = React.useState({});
235
+ const [isPosCalculated, setIsPosCalculated] = React.useState(false);
236
+ const {width: globalWidth, height: globalHeight} = useWindowDimensions();
237
+ const [isLanguagePopupOpen, setLanguagePopup] =
238
+ React.useState<boolean>(false);
239
+ const {restart} = useSTTAPI();
240
+ const username = useGetName();
241
+ const actionMenuitems: ActionMenuItem[] = [];
242
+ const {
243
+ data: {isHost},
244
+ } = useRoomInfo();
245
+
246
+ const downloadTranscriptLabel = useString(sttDownloadTranscriptBtnText)();
247
+ const changeSpokenLanguage = useString<boolean>(
248
+ sttChangeSpokenLanguageText,
249
+ )();
250
+ isHost &&
251
+ actionMenuitems.push({
252
+ icon: 'lang-select',
253
+ iconColor: $config.SECONDARY_ACTION_COLOR,
254
+ textColor: $config.FONT_COLOR,
255
+ title: changeSpokenLanguage + ' ',
256
+ disabled: isLangChangeInProgress,
257
+ callback: () => {
258
+ setActionMenuVisible(false);
259
+ setLanguagePopup(true);
260
+ },
261
+ });
262
+
263
+ actionMenuitems.push({
264
+ icon: 'download',
265
+ iconColor: $config.SECONDARY_ACTION_COLOR,
266
+ textColor: $config.FONT_COLOR,
267
+ title: downloadTranscriptLabel,
268
+ disabled: meetingTranscript.length === 0,
269
+ callback: () => {
270
+ downloadTranscript();
271
+ setActionMenuVisible(false);
272
+ },
273
+ });
274
+
275
+ const onLanguageChange = (langChanged = false, language: LanguageType[]) => {
276
+ setLanguagePopup(false);
277
+ if (langChanged) {
278
+ restart(language)
279
+ .then(() => {
280
+ console.log('stt restarted successfully');
281
+ })
282
+ .catch(error => {
283
+ console.log('Error in restarting', error);
284
+ // Handle the error case
285
+ });
286
+ }
287
+ };
288
+
289
+ React.useEffect(() => {
290
+ if (actionMenuVisible) {
291
+ //getting btnRef x,y
292
+ btnRef?.current?.measure(
293
+ (
294
+ _fx: number,
295
+ _fy: number,
296
+ localWidth: number,
297
+ localHeight: number,
298
+ px: number,
299
+ py: number,
300
+ ) => {
301
+ const data = calculatePosition({
302
+ px,
303
+ py,
304
+ localWidth,
305
+ localHeight,
306
+ globalHeight,
307
+ globalWidth,
308
+ });
309
+ setModalPosition(data);
310
+ setIsPosCalculated(true);
311
+ },
312
+ );
313
+ }
314
+ }, [actionMenuVisible]);
315
+ return (
316
+ <>
317
+ <ActionMenu
318
+ from={'transcript-header'}
319
+ actionMenuVisible={actionMenuVisible && isPosCalculated}
320
+ setActionMenuVisible={setActionMenuVisible}
321
+ modalPosition={modalPosition}
322
+ items={actionMenuitems}
323
+ />
324
+
325
+ <LanguageSelectorPopup
326
+ modalVisible={isLanguagePopupOpen}
327
+ setModalVisible={setLanguagePopup}
328
+ onConfirm={onLanguageChange}
329
+ />
330
+ </>
331
+ );
332
+ };
333
+
136
334
  const styles = StyleSheet.create({
137
335
  buttonHolder: {
138
336
  backgroundColor: