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
@@ -1,42 +1,54 @@
1
+ /* eslint-disable react-native/no-inline-styles */
1
2
  import {StyleSheet, Text, TouchableOpacity, View} from 'react-native';
2
3
  import React, {useContext} from 'react';
3
4
  import ImageIcon from '../../atoms/ImageIcon';
4
- import LocalAudioMute, {
5
- LocalAudioMuteProps,
6
- } from '../../subComponents/LocalAudioMute';
7
- import LocalVideoMute, {
8
- LocalVideoMuteProps,
9
- } from '../../subComponents/LocalVideoMute';
10
- import LocalEndcall, {
11
- LocalEndcallProps,
12
- } from '../../subComponents/LocalEndCall';
5
+ import LocalAudioMute from '../../subComponents/LocalAudioMute';
6
+ import LocalVideoMute from '../../subComponents/LocalVideoMute';
7
+ import LocalEndcall from '../../subComponents/LocalEndCall';
13
8
  import CopyJoinInfo from '../../subComponents/CopyJoinInfo';
14
9
  import LocalSwitchCamera from '../../subComponents/LocalSwitchCamera';
15
10
  import Recording from '../../subComponents/Recording';
16
11
  import ChatContext from '../../components/ChatContext';
17
- import {numFormatter} from '../../utils';
18
- import IconButton from '../../atoms/IconButton';
19
- import {useLayout} from '../../utils/useLayout';
20
- import useLayoutsData from '../../pages/video-call/useLayoutsData';
21
- import {useChangeDefaultLayout} from '../../pages/video-call/DefaultLayouts';
22
12
  import {PropsContext, ToggleState} from '../../../agora-rn-uikit';
23
- import {ClientRole} from '../../../agora-rn-uikit';
24
- import {useMeetingInfo} from '../../components/meeting-info/useMeetingInfo';
13
+ import {ClientRoleType} from '../../../agora-rn-uikit';
14
+ import {
15
+ RoomInfoContextInterface,
16
+ useRoomInfo,
17
+ } from '../../components/room-info/useRoomInfo';
25
18
  import LiveStreamControls from '../../components/livestream/views/LiveStreamControls';
26
19
  import LiveStreamContext, {RaiseHandValue} from '../../components/livestream';
27
20
  import {
28
21
  ChatIconButton,
29
- ParticipantsCountView,
30
22
  ParticipantsIconButton,
31
23
  } from '../../../src/components/Navbar';
32
24
  import {useChatNotification} from '../../components/chat-notification/useChatNotification';
33
25
  import {SidePanelType} from '../../subComponents/SidePanelEnum';
34
26
  import {useSidePanel} from '../../utils/useSidePanel';
35
- import Settings from '../../components/Settings';
36
- import {useLocalUserInfo} from 'customization-api';
27
+ import {useContent, useLocalUserInfo, ToolbarItem} from 'customization-api';
37
28
  import LayoutIconButton from '../../subComponents/LayoutIconButton';
29
+ import CaptionIcon from '../../../src/subComponents/caption/CaptionIcon';
30
+ import TranscriptIcon from '../../../src/subComponents/caption/TranscriptIcon';
31
+ import useSTTAPI from '../../../src/subComponents/caption/useSTTAPI';
32
+ import Carousel from '../../atoms/Carousel';
33
+ import {useCaption} from '../../subComponents/caption/useCaption';
34
+ import Settings from '../../components/Settings';
38
35
  import ScreenshareButton from '../../subComponents/screenshare/ScreenshareButton';
39
36
  import {useScreenshare} from '../../subComponents/screenshare/useScreenshare';
37
+ import {EventNames} from '../../rtm-events';
38
+ import events from '../../rtm-events-api';
39
+ import {getLanguageLabel} from '../../subComponents/caption/utils';
40
+ import Toast from '../../../react-native-toast-message';
41
+ import {CustomToolbarSort} from '../../utils/common';
42
+ import {ActionSheetProvider} from '../../utils/useActionSheet';
43
+ import {useWaitingRoomContext} from '../../components/contexts/WaitingRoomContext';
44
+ import {useSetRoomInfo} from '../../components/room-info/useSetRoomInfo';
45
+ import VBButton from '../../components/virtual-background/VBButton';
46
+ import {useVB} from '../../components/virtual-background/useVB';
47
+ import {useString} from '../../utils/useString';
48
+ import {
49
+ sttSpokenLanguageToastHeading,
50
+ sttSpokenLanguageToastSubHeading,
51
+ } from '../../language/default-labels/videoCallScreenLabels';
40
52
  //Icon for expanding Action Sheet
41
53
  interface ShowMoreIconProps {
42
54
  isExpanded: boolean;
@@ -46,7 +58,7 @@ interface ShowMoreIconProps {
46
58
  const ShowMoreIcon = (props: ShowMoreIconProps) => {
47
59
  const {isExpanded, onPress, showNotification} = props;
48
60
  return (
49
- <View style={styles.iconWithText}>
61
+ <ToolbarItem>
50
62
  <View style={styles.iconContainer}>
51
63
  <TouchableOpacity onPress={onPress}>
52
64
  <ImageIcon
@@ -56,147 +68,78 @@ const ShowMoreIcon = (props: ShowMoreIconProps) => {
56
68
  </TouchableOpacity>
57
69
  {showNotification && <View style={styles.notification} />}
58
70
  </View>
59
- </View>
71
+ </ToolbarItem>
60
72
  );
61
73
  };
62
74
 
63
75
  //Icon for Live Streaming Controls
64
- interface LiveStreamIconProps {
65
- isHandRaised: boolean;
66
- showLabel?: boolean;
67
- }
68
- const LiveStreamIcon = (props: LiveStreamIconProps) => {
69
- const {isHandRaised, showLabel = $config.ICON_TEXT} = props;
70
- return (
71
- <View style={styles.iconWithText}>
72
- <View style={styles.iconContainer}>
73
- <LiveStreamControls
74
- showControls={true}
75
- isDesktop={false}
76
- showLabel={false}
77
- />
78
- </View>
79
- {showLabel && (
80
- <Text style={styles.iconText}>
81
- {isHandRaised ? 'Lower\nHand' : 'Raise\nHand'}
82
- </Text>
83
- )}
84
- </View>
85
- );
76
+ const LiveStreamIcon = () => {
77
+ //toolbaritem wrapped in the LiveStreamControls
78
+ return <LiveStreamControls showControls={true} />;
86
79
  };
87
80
 
88
81
  //Icon for Chat
89
- interface ChatIconProps {
90
- showLabel?: boolean;
91
- }
92
- const ChatIcon = (props: ChatIconProps) => {
93
- const {showLabel = $config.ICON_TEXT} = props;
82
+ const ChatIcon = () => {
94
83
  return (
95
- <View style={styles.iconWithText}>
96
- <View style={styles.iconContainer}>
97
- <ChatIconButton isOnActionSheet={true} />
98
- </View>
99
- {showLabel && <Text style={styles.iconText}>Chat</Text>}
100
- </View>
84
+ <ToolbarItem>
85
+ <ChatIconButton />
86
+ </ToolbarItem>
101
87
  );
102
88
  };
103
89
 
104
90
  //Icon for Participants
105
- interface ParticipantsIconProps {
106
- showNotification: boolean;
107
- }
108
- const ParticipantsIcon = (props: ParticipantsIconProps) => {
109
- const {showNotification} = props;
91
+ const ParticipantsIcon = () => {
110
92
  return (
111
- <View style={styles.iconWithText}>
112
- <View style={styles.iconContainer}>
113
- <ParticipantsIconButton isOnActionSheet={true} />
114
- </View>
115
- {$config.ICON_TEXT && <Text style={styles.iconText}>People</Text>}
116
- {/* {showNotification && <View style={styles.notification} />} */}
117
- </View>
93
+ <ToolbarItem>
94
+ <ParticipantsIconButton />
95
+ </ToolbarItem>
118
96
  );
119
97
  };
120
98
 
121
99
  //Icon for Recording
122
- interface RecordingIconProps {
123
- showLabel?: boolean;
124
- }
125
- const RecordingIcon = (props: RecordingIconProps) => {
126
- const {showLabel = $config.ICON_TEXT} = props;
100
+
101
+ const RecordingIcon = () => {
127
102
  return (
128
- <View style={styles.iconWithText}>
129
- <View style={styles.iconContainer}>
130
- <Recording showLabel={false} isOnActionSheet={true} />
131
- </View>
132
- {showLabel && <Text style={styles.iconText}>Record</Text>}
133
- </View>
103
+ <ToolbarItem>
104
+ <Recording />
105
+ </ToolbarItem>
134
106
  );
135
107
  };
136
108
 
137
- interface SwitchCameraIconProps {
138
- disabled: boolean;
139
- }
140
- const SwitchCameraIcon = (props: SwitchCameraIconProps) => {
141
- const {disabled} = props;
109
+ const VBIcon = () => {
110
+ const {isVBActive, setIsVBActive} = useVB();
142
111
  return (
143
- <View style={styles.iconWithText}>
144
- <View style={styles.iconContainer}>
145
- <LocalSwitchCamera showLabel={false} disabled={disabled} />
146
- </View>
147
- {$config.ICON_TEXT && (
148
- <View>
149
- <Text
150
- style={[
151
- styles.iconText,
152
- {
153
- color: disabled ? $config.SEMANTIC_NEUTRAL : $config.FONT_COLOR,
154
- },
155
- ]}>
156
- Switch
157
- </Text>
158
- <Text
159
- style={[
160
- styles.iconText,
161
- {
162
- color: disabled ? $config.SEMANTIC_NEUTRAL : $config.FONT_COLOR,
163
- marginTop: 0,
164
- },
165
- ]}>
166
- Camera
167
- </Text>
168
- </View>
169
- )}
170
- </View>
112
+ <ToolbarItem>
113
+ <VBButton
114
+ isVBOpen={isVBActive}
115
+ setIsVBOpen={setIsVBActive}
116
+ showLabel={true}
117
+ />
118
+ </ToolbarItem>
171
119
  );
172
120
  };
173
121
 
174
- interface SettingsIconProps {
175
- onPress: () => void;
176
- }
177
- const SettingsIcon = (props: SettingsIconProps) => {
178
- const {onPress} = props;
122
+ const SwitchCameraIcon = () => {
179
123
  return (
180
- <View style={styles.iconWithText}>
181
- <TouchableOpacity style={styles.iconContainer} onPress={onPress}>
182
- <ImageIcon
183
- name={'settings'}
184
- tintColor={$config.SECONDARY_ACTION_COLOR}
185
- />
186
- </TouchableOpacity>
187
- {$config.ICON_TEXT && <Text style={styles.iconText}>Settings</Text>}
188
- </View>
124
+ <ToolbarItem>
125
+ <LocalSwitchCamera />
126
+ </ToolbarItem>
127
+ );
128
+ };
129
+
130
+ const SettingsIcon = () => {
131
+ return (
132
+ <ToolbarItem>
133
+ <Settings />
134
+ </ToolbarItem>
189
135
  );
190
136
  };
191
137
 
192
138
  const ShareIcon = () => {
193
139
  return (
194
- <View style={styles.iconWithText}>
195
- <View style={styles.iconContainer}>
196
- <CopyJoinInfo showLabel={false} isOnActionSheet={true} />
197
- </View>
198
- {$config.ICON_TEXT && <Text style={styles.iconText}>Invite</Text>}
199
- </View>
140
+ <ToolbarItem>
141
+ <CopyJoinInfo />
142
+ </ToolbarItem>
200
143
  );
201
144
  };
202
145
  const ScreenshareIcon = () => {
@@ -210,124 +153,213 @@ const ScreenshareIcon = () => {
210
153
  );
211
154
  };
212
155
 
213
- interface AudioIconProps {
214
- isMobileView: boolean;
215
- isOnActionSheet: boolean;
216
- showLabel: boolean;
217
- disabled: boolean;
218
- }
219
- const AudioIcon = (props: AudioIconProps) => {
156
+ const AudioIcon = () => {
220
157
  return (
221
- <View style={styles.iconWithText}>
222
- <View style={styles.iconContainer}>
223
- <LocalAudioMute {...props} />
224
- </View>
225
- </View>
158
+ <ToolbarItem>
159
+ <LocalAudioMute />
160
+ </ToolbarItem>
226
161
  );
227
162
  };
228
163
 
229
- interface CamIconProps {
230
- isMobileView: boolean;
231
- isOnActionSheet: boolean;
232
- showLabel: boolean;
233
- disabled: boolean;
234
- }
235
- const CamIcon = (props: CamIconProps) => {
164
+ const CamIcon = () => {
236
165
  return (
237
- <View style={styles.iconWithText}>
238
- <View style={styles.iconContainer}>
239
- <LocalVideoMute {...props} />
240
- </View>
241
- </View>
166
+ <ToolbarItem>
167
+ <LocalVideoMute />
168
+ </ToolbarItem>
169
+ );
170
+ };
171
+
172
+ const EndCallIcon = () => {
173
+ return (
174
+ <ToolbarItem>
175
+ <LocalEndcall />
176
+ </ToolbarItem>
242
177
  );
243
178
  };
244
179
 
245
- interface EndCallIconProps {
246
- showLabel: boolean;
247
- isOnActionSheet: boolean;
180
+ const LayoutIcon = () => {
181
+ return (
182
+ <ToolbarItem>
183
+ <LayoutIconButton />
184
+ </ToolbarItem>
185
+ );
186
+ };
187
+
188
+ interface CaptionIconBtnProps {
189
+ showLabel?: boolean;
190
+ onPress?: () => void;
248
191
  }
249
- const EndCallIcon = (props: EndCallIconProps) => {
192
+
193
+ const CaptionIconBtn = (props: CaptionIconBtnProps) => {
194
+ const {showLabel = $config.ICON_TEXT, onPress} = props;
195
+ const {isCaptionON, isSTTActive} = useCaption();
196
+ const {
197
+ data: {isHost},
198
+ } = useRoomInfo();
199
+ const isDisabled = !(
200
+ $config.ENABLE_STT &&
201
+ (isHost || (!isHost && isSTTActive))
202
+ );
250
203
  return (
251
- <View style={styles.iconWithText}>
252
- <View
253
- style={[
254
- styles.iconContainer,
255
- {backgroundColor: $config.SEMANTIC_ERROR},
256
- ]}>
257
- <LocalEndcall {...props} />
258
- </View>
259
- </View>
204
+ <ToolbarItem>
205
+ <CaptionIcon
206
+ isOnActionSheet={true}
207
+ showLabel={true}
208
+ closeActionSheet={onPress}
209
+ />
210
+ </ToolbarItem>
260
211
  );
261
212
  };
262
213
 
263
- interface LayoutIconProps {
214
+ interface TranscriptIconProps {
264
215
  showLabel?: boolean;
265
216
  }
266
- const LayoutIcon = (props: LayoutIconProps) => {
217
+
218
+ const TranscriptIconBtn = (props: TranscriptIconProps) => {
267
219
  const {showLabel = $config.ICON_TEXT} = props;
220
+ const {sidePanel} = useSidePanel();
221
+ const isTranscriptON = sidePanel === SidePanelType.Transcript;
222
+ const {isSTTActive} = useCaption();
223
+ const {
224
+ data: {isHost},
225
+ } = useRoomInfo();
226
+ const isDisabled = !(
227
+ $config.ENABLE_STT &&
228
+ (isHost || (!isHost && isSTTActive))
229
+ );
268
230
  return (
269
- <View style={styles.iconWithText}>
270
- <View style={styles.iconContainer}>
271
- <LayoutIconButton showLabel={false} />
272
- </View>
273
- {showLabel && <Text style={styles.iconText}>Layout</Text>}
274
- </View>
231
+ <ToolbarItem>
232
+ <TranscriptIcon isOnActionSheet={true} showLabel={true} />
233
+ </ToolbarItem>
275
234
  );
276
235
  };
277
236
 
278
- type ActionSheetComponentsProps = [
279
- (props: AudioIconProps) => JSX.Element,
280
- (props: CamIconProps) => JSX.Element,
281
- (props: EndCallIconProps) => JSX.Element,
282
- (props: ShowMoreIconProps) => JSX.Element,
283
- (props: ChatIconProps) => JSX.Element,
284
- (props: ParticipantsIconProps) => JSX.Element,
285
- (props) => JSX.Element,
286
- (props: SwitchCameraIconProps) => JSX.Element,
287
- (props: LayoutIconProps) => JSX.Element,
288
- (props: SettingsIconProps) => JSX.Element,
289
- (props) => JSX.Element,
290
- ];
291
-
292
- export const ActionSheetComponentsArray: ActionSheetComponentsProps = [
293
- AudioIcon,
294
- CamIcon,
295
- EndCallIcon,
296
- ShowMoreIcon,
297
- ChatIcon,
298
- ParticipantsIcon,
299
- RecordingIcon,
300
- SwitchCameraIcon,
301
- LayoutIcon,
302
- SettingsIcon,
303
- ShareIcon,
304
- ];
305
-
306
- const ActionSheetContent = (props) => {
307
- const {handleSheetChanges, isExpanded, native = false} = props;
308
- const {onlineUsersCount, localUid} = useContext(ChatContext);
237
+ const ToastIcon = ({color}) => (
238
+ <View style={{marginRight: 12, alignSelf: 'center', width: 24, height: 24}}>
239
+ <ImageIcon iconType="plain" tintColor={color} name={'lang-select'} />
240
+ </View>
241
+ );
242
+
243
+ const ActionSheetContent = props => {
244
+ const heading = useString<'Set' | 'Changed'>(sttSpokenLanguageToastHeading);
245
+ const subheading = useString<{
246
+ action: 'Set' | 'Changed';
247
+ newLanguage: string;
248
+ oldLanguage: string;
249
+ username: string;
250
+ }>(sttSpokenLanguageToastSubHeading);
251
+
252
+ const {
253
+ handleSheetChanges,
254
+ isExpanded,
255
+ customItems = [],
256
+ includeDefaultItems = true,
257
+ displayCustomBottomSheetContent = false,
258
+ customBottomSheetContent,
259
+ native = false,
260
+ } = props;
261
+
262
+ const {localUid} = useContext(ChatContext);
309
263
  const {isScreenshareActive} = useScreenshare();
310
- const layouts = useLayoutsData();
311
- const {currentLayout} = useLayout();
312
- const changeLayout = useChangeDefaultLayout();
313
264
  const {rtcProps} = useContext(PropsContext);
314
- const {sidePanel, setSidePanel} = useSidePanel();
265
+ const {setSidePanel} = useSidePanel();
266
+ const {setRoomInfo} = useSetRoomInfo();
315
267
  const {
316
268
  data: {isHost},
317
- } = useMeetingInfo();
269
+ sttLanguage,
270
+ isSTTActive,
271
+ } = useRoomInfo();
318
272
  const {isPendingRequestToReview, raiseHandList} =
319
273
  useContext(LiveStreamContext);
320
274
  const {totalUnreadCount} = useChatNotification();
321
- const layout = layouts.findIndex((item) => item.name === currentLayout);
322
- const isLiveStream = $config.EVENT_MODE;
323
- const isAudience = rtcProps?.role == ClientRole.Audience;
324
- const isBroadCasting = rtcProps?.role == ClientRole.Broadcaster;
275
+ const {setIsSTTActive, setLanguage, setMeetingTranscript} = useCaption();
276
+ const {defaultContent} = useContent();
277
+ const {waitingRoomUids} = useWaitingRoomContext();
278
+ const defaultContentRef = React.useRef(defaultContent);
279
+
280
+ React.useEffect(() => {
281
+ defaultContentRef.current = defaultContent;
282
+ }, [defaultContent]);
283
+
284
+ //STT events on mount
285
+
286
+ React.useEffect(() => {
287
+ setIsSTTActive(isSTTActive);
288
+ }, [isSTTActive]);
289
+
290
+ React.useEffect(() => {
291
+ // for mobile events are set in ActionSheetContent
292
+ if (!sttLanguage) return;
293
+ const {
294
+ username,
295
+ prevLang,
296
+ newLang,
297
+ uid,
298
+ langChanged,
299
+ }: RoomInfoContextInterface['sttLanguage'] = sttLanguage;
300
+ if (!langChanged) return;
301
+ const actionText =
302
+ prevLang.indexOf('') !== -1
303
+ ? `has set the spoken language to "${getLanguageLabel(newLang)}" `
304
+ : `changed the spoken language from "${getLanguageLabel(
305
+ prevLang,
306
+ )}" to "${getLanguageLabel(newLang)}" `;
307
+ const msg = `${
308
+ defaultContentRef.current[uid]?.name || username
309
+ } ${actionText} `;
310
+
311
+ let subheadingObj: any = {};
312
+ if (prevLang.indexOf('') !== -1) {
313
+ subheadingObj = {
314
+ username: defaultContentRef.current[uid]?.name || username,
315
+ action: prevLang.indexOf('') !== -1 ? 'Set' : 'Changed',
316
+ newLanguage: getLanguageLabel(newLang),
317
+ };
318
+ } else {
319
+ subheadingObj = {
320
+ username: defaultContentRef.current[uid]?.name || username,
321
+ action: prevLang.indexOf('') !== -1 ? 'Set' : 'Changed',
322
+ newLanguage: getLanguageLabel(newLang),
323
+ oldLanguage: getLanguageLabel(prevLang),
324
+ };
325
+ }
326
+ Toast.show({
327
+ leadingIconName: 'lang-select',
328
+ type: 'info',
329
+ text1: heading(prevLang.indexOf('') !== -1 ? 'Set' : 'Changed'),
330
+ visibilityTime: 3000,
331
+ primaryBtn: null,
332
+ secondaryBtn: null,
333
+ text2: subheading(subheadingObj),
334
+ });
335
+ setRoomInfo(prev => {
336
+ return {
337
+ ...prev,
338
+ sttLanguage: {...sttLanguage, langChanged: false},
339
+ };
340
+ });
341
+ // syncing local set language
342
+ newLang && setLanguage(newLang);
343
+ // add spoken lang msg to transcript
344
+ setMeetingTranscript(prev => {
345
+ return [
346
+ ...prev,
347
+ {
348
+ name: 'langUpdate',
349
+ time: new Date().getTime(),
350
+ uid: `langUpdate-${uid}`,
351
+ text: actionText,
352
+ },
353
+ ];
354
+ });
355
+ }, [sttLanguage]);
356
+
357
+ const isLiveStream = $config.EVENT_MODE && !$config.AUDIO_ROOM;
358
+ const isAudience = rtcProps?.role === ClientRoleType.ClientRoleAudience;
359
+ const isBroadCasting =
360
+ rtcProps?.role === ClientRoleType.ClientRoleBroadcaster;
325
361
  const isHandRaised = raiseHandList[localUid]?.raised === RaiseHandValue.TRUE;
326
362
 
327
- const handleLayoutChange = () => {
328
- changeLayout();
329
- };
330
-
331
363
  const isAudioRoom = $config.AUDIO_ROOM;
332
364
  const isVoiceChatHost = !$config.EVENT_MODE && $config.AUDIO_ROOM && isHost;
333
365
  const isVoiceChatAudience =
@@ -338,114 +370,256 @@ const ActionSheetContent = (props) => {
338
370
 
339
371
  const isAudioVideoControlsDisabled =
340
372
  isAudience && $config.EVENT_MODE && !$config.RAISE_HAND;
341
- const isVideoDisabled = native
342
- ? useLocalUserInfo().video === ToggleState.disabled || isScreenshareActive
343
- : useLocalUserInfo().video === ToggleState.disabled;
344
- return (
345
- <View>
346
- {/* Row Always Visible */}
347
- <View
348
- style={[
349
- styles.row,
350
- {borderBottomWidth: 1, paddingTop: 4, justifyContent: 'center'},
351
- ]}>
352
- {isAudioVideoControlsDisabled ? null : (
353
- <AudioIcon
354
- isMobileView={true}
355
- isOnActionSheet={true}
356
- showLabel={false}
357
- disabled={isLiveStream && isAudience && !isBroadCasting}
358
- />
359
- )}
360
373
 
361
- {/*For AudioCast Host:Chat ,Attendee:Raise Hand
362
- For VoiceChat Host:Chat, Attendee:Chat
363
- */}
374
+ const isConferencing = !$config.EVENT_MODE && !$config.AUDIO_ROOM;
364
375
 
365
- {(isAudioCastHost || isVoiceChatHost || isVoiceChatAudience) && (
366
- <ChatIcon showLabel={false} />
367
- )}
368
- {(isAudioCastAudience && isLiveStream && isAudience) ||
376
+ const localUser = useLocalUserInfo();
377
+
378
+ const isVideoDisabled = native
379
+ ? localUser.video === ToggleState.disabled || isScreenshareActive
380
+ : localUser.video === ToggleState.disabled;
381
+
382
+ const isPendingWaitingRoomApproval = isHost && waitingRoomUids.length > 0;
383
+
384
+ const defaultItems = [
385
+ {
386
+ default: true,
387
+ order: 0,
388
+ hide: 'no',
389
+ align: 'start',
390
+ component: isAudioVideoControlsDisabled ? null : <AudioIcon />,
391
+ },
392
+ {
393
+ default: true,
394
+ order: 0,
395
+ hide: 'no',
396
+ align: 'start',
397
+ /*For AudioCast Host:Chat ,Attendee:Raise Hand
398
+ For VoiceChat Host:Chat, Attendee:Chat
399
+ */
400
+ component: (isAudioCastHost ||
401
+ isVoiceChatHost ||
402
+ isVoiceChatAudience) && <ChatIcon />,
403
+ },
404
+
405
+ {
406
+ default: true,
407
+ order: 0,
408
+ hide: 'no',
409
+ align: 'start',
410
+ component:
411
+ (isAudioCastAudience && isLiveStream && isAudience) ||
369
412
  (isBroadCasting && !isHost) ? (
370
413
  $config.RAISE_HAND && isAudioRoom ? (
371
- <LiveStreamIcon isHandRaised={isHandRaised} showLabel={false} />
414
+ <LiveStreamIcon />
372
415
  ) : null
373
- ) : null}
374
-
375
- {!isAudioRoom &&
376
- (isAudioVideoControlsDisabled ? null : (
377
- <CamIcon
378
- isOnActionSheet={true}
379
- isMobileView={true}
380
- showLabel={false}
381
- disabled={isLiveStream && isAudience && !isBroadCasting}
382
- />
383
- ))}
384
-
385
- <EndCallIcon showLabel={false} isOnActionSheet={true} />
386
-
387
- <ShowMoreIcon
388
- isExpanded={isExpanded}
389
- showNotification={
390
- (!isExpanded && totalUnreadCount !== 0) ||
391
- ($config.EVENT_MODE && isPendingRequestToReview)
392
- }
393
- onPress={() => handleSheetChanges(isExpanded ? 0 : 1)}
394
- />
395
- </View>
396
-
397
- {/* Rest Of Controls */}
398
- <View style={styles.row}>
399
- {/**
400
- * In event mode when raise hand feature is active
401
- * and audience is promoted to host, the audience can also
402
- * demote himself
403
- */}
404
- {(isLiveStream && isAudience) || (isBroadCasting && !isHost) ? (
416
+ ) : null,
417
+ },
418
+ {
419
+ default: true,
420
+ order: 1,
421
+ hide: 'no',
422
+ align: 'start',
423
+ component:
424
+ !isAudioRoom && (isAudioVideoControlsDisabled ? null : <CamIcon />),
425
+ },
426
+ {
427
+ default: true,
428
+ order: 2,
429
+ hide: 'no',
430
+ align: 'start',
431
+ component: <EndCallIcon />,
432
+ },
433
+ //reset of the controls
434
+ {
435
+ default: true,
436
+ order: 4,
437
+ hide: 'no',
438
+ align: 'start',
439
+ component:
440
+ (isLiveStream && isAudience) || (isBroadCasting && !isHost) ? (
405
441
  $config.RAISE_HAND && !isAudioRoom ? (
406
- <LiveStreamIcon isHandRaised={isHandRaised} />
442
+ <LiveStreamIcon />
407
443
  ) : null
408
- ) : null}
409
-
410
- {/* Layout view */}
411
- <LayoutIcon />
412
-
413
- {/* chat */}
414
- {!(isAudioCastHost || isVoiceChatHost || isVoiceChatAudience) && (
415
- <ChatIcon />
416
- )}
417
- {/* participants */}
418
- <ParticipantsIcon
419
- showNotification={$config.EVENT_MODE && isPendingRequestToReview}
444
+ ) : null,
445
+ },
446
+
447
+ {
448
+ default: true,
449
+ order: 5,
450
+ hide: 'no',
451
+ align: 'start',
452
+ component: !(
453
+ isAudioCastHost ||
454
+ isVoiceChatHost ||
455
+ isVoiceChatAudience
456
+ ) && <ChatIcon />,
457
+ },
458
+ {
459
+ default: true,
460
+ order: 6,
461
+ hide: 'no',
462
+ align: 'start',
463
+ component: <ParticipantsIcon />,
464
+ },
465
+ {
466
+ default: true,
467
+ order: 7,
468
+ hide: 'no',
469
+ align: 'start',
470
+ component: isHost && $config.CLOUD_RECORDING ? <RecordingIcon /> : null,
471
+ },
472
+ {
473
+ default: true,
474
+ order: 7,
475
+ hide: 'no',
476
+ align: 'start',
477
+ component:
478
+ $config.ENABLE_VIRTUAL_BACKGROUND && !$config.AUDIO_ROOM ? (
479
+ <VBIcon />
480
+ ) : null,
481
+ },
482
+ {
483
+ default: true,
484
+ order: 8,
485
+ hide: 'no',
486
+ align: 'start',
487
+ component:
488
+ !isAudioRoom &&
489
+ (isAudioVideoControlsDisabled ? null : <SwitchCameraIcon />),
490
+ },
491
+ {
492
+ default: true,
493
+ order: 9,
494
+ hide: 'no',
495
+ align: 'start',
496
+ component: <LayoutIcon />,
497
+ },
498
+ {
499
+ default: true,
500
+ order: 10,
501
+ hide: 'no',
502
+ align: 'start',
503
+ component: <SettingsIcon />,
504
+ },
505
+ {
506
+ default: true,
507
+ order: 11,
508
+ hide: 'no',
509
+ align: 'start',
510
+ component: <ShareIcon />,
511
+ },
512
+ {
513
+ default: true,
514
+ order: 12,
515
+ hide: 'no',
516
+ align: 'start',
517
+ component: (
518
+ <CaptionIconBtn
519
+ onPress={() => handleSheetChanges(isExpanded ? 0 : 1)}
420
520
  />
421
- {/* record */}
422
- {isHost && $config.CLOUD_RECORDING ? <RecordingIcon /> : null}
423
-
424
- {/* switch camera */}
425
- {!isAudioRoom &&
426
- (isAudioVideoControlsDisabled ? null : (
427
- <SwitchCameraIcon
428
- disabled={
429
- (isLiveStream && isAudience && !isBroadCasting) ||
430
- isVideoDisabled
521
+ ),
522
+ },
523
+ {
524
+ default: true,
525
+ order: 13,
526
+ hide: 'no',
527
+ align: 'start',
528
+ component: <TranscriptIconBtn />,
529
+ },
530
+ ];
531
+
532
+ const isHidden = i => {
533
+ return i?.hide === 'yes';
534
+ };
535
+ const combinedItems = customItems
536
+ ?.filter(i => !isHidden(i))
537
+ ?.concat(includeDefaultItems ? defaultItems : [])
538
+ //to filter empty component because of some condition array will have empty component
539
+ ?.filter(i => i?.component)
540
+ ?.sort(CustomToolbarSort);
541
+
542
+ if (displayCustomBottomSheetContent) {
543
+ return <View>{customBottomSheetContent}</View>;
544
+ }
545
+ return (
546
+ <View>
547
+ {/* Row Always Visible */}
548
+ <ActionSheetProvider isOnFirstRow={true}>
549
+ <View
550
+ style={[
551
+ styles.row,
552
+ {borderBottomWidth: 1, paddingTop: 4, justifyContent: 'center'},
553
+ ]}>
554
+ {/**If no items more than 4 then render firstrender first 3 items and render show more icon */}
555
+ {/**If no items more less or equal to 4 then render n items and don't show more icon */}
556
+ {combinedItems
557
+ ?.slice(0, combinedItems?.length > 4 ? 3 : 4)
558
+ ?.map(i => {
559
+ const Component = i?.component;
560
+ if (Component) {
561
+ return i?.default ? Component : <Component />;
562
+ } else {
563
+ return null;
564
+ }
565
+ })}
566
+ {combinedItems && combinedItems?.length > 4 ? (
567
+ <ShowMoreIcon
568
+ isExpanded={isExpanded}
569
+ showNotification={
570
+ (!isExpanded && totalUnreadCount !== 0) ||
571
+ ($config.EVENT_MODE && isPendingRequestToReview) ||
572
+ isPendingWaitingRoomApproval
431
573
  }
574
+ onPress={() => handleSheetChanges(isExpanded ? 0 : 1)}
432
575
  />
433
- ))}
576
+ ) : (
577
+ <></>
578
+ )}
579
+ </View>
580
+ </ActionSheetProvider>
434
581
 
435
- {/* settings */}
436
- <SettingsIcon
437
- onPress={() => {
438
- setSidePanel(SidePanelType.Settings);
439
- }}
440
- />
582
+ <CarouselWrapper data={combinedItems?.slice(3, combinedItems?.length)} />
583
+ </View>
584
+ );
585
+ };
586
+ const CarouselWrapper = ({data}) => {
587
+ const createSlides = () => {
588
+ const slides = [];
589
+ const items = data || [];
590
+ // one slide can contain max of 8 icons
591
+ for (let i = 0; i < items.length; i += 8) {
592
+ const slideItems = items.slice(i, i + 8).map(item => {
593
+ const Component = item?.component;
594
+ return Component ? (
595
+ item.default ? (
596
+ Component
597
+ ) : (
598
+ <Component key={item.id} />
599
+ )
600
+ ) : null;
601
+ });
602
+
603
+ slides.push({
604
+ id: `slide_${Math.floor(i / 8) + 1}`,
605
+ component: <View style={styles.row}>{slideItems}</View>,
606
+ });
607
+ }
608
+
609
+ return slides;
610
+ };
441
611
 
442
- {native && $config.SCREEN_SHARING ? <ScreenshareIcon /> : <></>}
612
+ const slides = createSlides();
443
613
 
444
- {/* invite */}
445
- <ShareIcon />
614
+ const isPaginationRequired = slides.length > 1;
615
+
616
+ if (isPaginationRequired)
617
+ return (
618
+ <View style={{flexDirection: 'row'}}>
619
+ <Carousel data={slides} />
446
620
  </View>
447
- </View>
448
- );
621
+ );
622
+ return <View style={styles.row}>{slides[0].component}</View>;
449
623
  };
450
624
 
451
625
  export default ActionSheetContent;