agora-appbuilder-core 4.0.0 → 4.0.2

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 (475) 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 +29 -29
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +28491 -23647
  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 +79 -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 +45 -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 +138 -100
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +55 -28
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +177 -77
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +8 -0
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +56 -12
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +47 -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 +19 -33
  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 +200 -70
  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 +34 -46
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/createHook.ts +24 -6
  87. package/template/customization-implementation/index.ts +1 -2
  88. package/template/customization-implementation/useCustomization.tsx +5 -7
  89. package/template/defaultConfig.js +72 -0
  90. package/template/global.d.ts +14 -1
  91. package/template/index.js +1 -4
  92. package/template/index.web.js +0 -5
  93. package/template/index.wsdk.tsx +1 -12
  94. package/template/ios/.xcode.env +11 -0
  95. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  96. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  97. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  98. package/template/ios/HelloWorld/Info.plist +8 -2
  99. package/template/ios/HelloWorld/main.m +2 -1
  100. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +533 -17
  101. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  102. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  103. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  104. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  105. package/template/ios/HelloWorldTests/Info.plist +2 -2
  106. package/template/ios/Podfile +54 -20
  107. package/template/ios/Podfile.lock +809 -0
  108. package/template/ios/ScreenSharing/Info.plist +15 -0
  109. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  110. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  111. package/template/jest.config.js +4 -0
  112. package/template/metro.config.js +7 -32
  113. package/template/package.json +53 -39
  114. package/template/react-native-toast-message/index.d.ts +3 -1
  115. package/template/react-native-toast-message/index.js +1 -0
  116. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  117. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  118. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  119. package/template/react-native-toast-message/src/index.js +3 -1
  120. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  121. package/template/src/App.tsx +53 -69
  122. package/template/src/AppRoutes.tsx +90 -0
  123. package/template/src/AppWrapper.tsx +42 -25
  124. package/template/src/SDKAppWrapper.tsx +90 -57
  125. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  126. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  127. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  128. package/template/src/app-state/useVideoQuality.tsx +39 -0
  129. package/template/src/assets/font-styles.css +175 -3
  130. package/template/src/assets/fonts/icomoon.ttf +0 -0
  131. package/template/src/assets/selection.json +1 -1
  132. package/template/src/atoms/ActionMenu.tsx +50 -11
  133. package/template/src/atoms/Avatar.tsx +51 -0
  134. package/template/src/atoms/Card.tsx +21 -8
  135. package/template/src/atoms/Carousel.native.tsx +105 -0
  136. package/template/src/atoms/Carousel.tsx +103 -0
  137. package/template/src/atoms/Checkbox.tsx +98 -0
  138. package/template/src/atoms/CircularProgress.tsx +0 -1
  139. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  140. package/template/src/atoms/CustomIcon.tsx +46 -0
  141. package/template/src/atoms/DropDownMulti.tsx +349 -0
  142. package/template/src/atoms/Dropdown.tsx +3 -3
  143. package/template/src/atoms/IconButton.tsx +52 -9
  144. package/template/src/atoms/ImageIcon.tsx +18 -5
  145. package/template/src/atoms/InlineNotification.tsx +81 -0
  146. package/template/src/atoms/InviteInfo.tsx +4 -4
  147. package/template/src/atoms/MeetingLink.tsx +160 -0
  148. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  149. package/template/src/atoms/Popup.tsx +49 -27
  150. package/template/src/atoms/PrimaryButton.tsx +19 -5
  151. package/template/src/atoms/RecordingInfo.tsx +8 -5
  152. package/template/src/atoms/SecondaryButton.tsx +2 -0
  153. package/template/src/atoms/Spacer.tsx +1 -0
  154. package/template/src/atoms/TertiaryButton.tsx +35 -5
  155. package/template/src/atoms/TextInput.tsx +2 -1
  156. package/template/src/atoms/Toolbar.tsx +102 -0
  157. package/template/src/atoms/ToolbarItem.tsx +85 -0
  158. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  159. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  160. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  161. package/template/src/atoms/Tooltip.tsx +30 -13
  162. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  163. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  164. package/template/src/auth/AuthProvider.tsx +500 -0
  165. package/template/src/auth/AuthRoute.tsx +94 -0
  166. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  167. package/template/src/auth/IDPAuth.tsx +67 -0
  168. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  169. package/template/src/auth/UserCancelPopup.tsx +115 -0
  170. package/template/src/auth/config.ts +52 -0
  171. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  172. package/template/src/auth/openIDPURL.native.tsx +51 -0
  173. package/template/src/auth/openIDPURL.tsx +20 -0
  174. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  175. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  176. package/template/src/auth/useIDPAuth.tsx +63 -0
  177. package/template/src/auth/useTokenAuth.tsx +194 -0
  178. package/template/src/components/Chat.tsx +92 -72
  179. package/template/src/components/ChatContext.ts +2 -0
  180. package/template/src/components/ColorConfigure.tsx +0 -1
  181. package/template/src/components/CommonStyles.ts +9 -2
  182. package/template/src/components/Controls.tsx +914 -182
  183. package/template/src/components/Controls1.native.tsx +9 -5
  184. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  185. package/template/src/components/DeviceConfigure.tsx +400 -149
  186. package/template/src/components/DeviceContext.tsx +2 -0
  187. package/template/src/components/EventsConfigure.tsx +722 -82
  188. package/template/src/components/GraphQLProvider.tsx +82 -39
  189. package/template/src/components/GridVideo.tsx +30 -16
  190. package/template/src/components/HostControlView.tsx +11 -14
  191. package/template/src/components/JoinPhrase.tsx +0 -1
  192. package/template/src/components/Leftbar.tsx +110 -0
  193. package/template/src/components/Navbar.tsx +305 -147
  194. package/template/src/components/NavbarMobile.tsx +119 -0
  195. package/template/src/components/Navigation.native.tsx +1 -15
  196. package/template/src/components/{Settings.native.tsx → Navigation.sdk.tsx} +17 -6
  197. package/template/src/components/NetworkQualityContext.tsx +12 -6
  198. package/template/src/components/ParticipantsView.tsx +63 -56
  199. package/template/src/components/PinnedVideo.tsx +191 -119
  200. package/template/src/components/Precall.native.tsx +177 -72
  201. package/template/src/components/Precall.tsx +247 -78
  202. package/template/src/components/RTMConfigure.tsx +205 -67
  203. package/template/src/components/Rightbar.tsx +112 -0
  204. package/template/src/components/Router.electron.ts +1 -0
  205. package/template/src/components/Router.native.ts +1 -0
  206. package/template/src/components/Router.sdk.ts +1 -0
  207. package/template/src/components/Router.ts +1 -0
  208. package/template/src/components/SdkApiContext.tsx +313 -0
  209. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  210. package/template/src/components/SessionContext.tsx +0 -1
  211. package/template/src/components/Settings.tsx +33 -4
  212. package/template/src/components/SettingsView.tsx +44 -9
  213. package/template/src/components/Share.tsx +152 -74
  214. package/template/src/components/StorageContext.tsx +23 -6
  215. package/template/src/components/ToastComponent.tsx +10 -1
  216. package/template/src/components/WhiteboardLayout.tsx +291 -0
  217. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  218. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  219. package/template/src/components/common/Error.tsx +2 -0
  220. package/template/src/components/common/Logo.tsx +2 -2
  221. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  222. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  223. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  224. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  225. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  226. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  227. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  228. package/template/src/components/livestream/Types.ts +36 -20
  229. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  230. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  231. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  232. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  233. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  234. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  235. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  236. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  237. package/template/src/components/participants/Participant.tsx +45 -16
  238. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  239. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  240. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  241. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  242. package/template/src/components/popups/InvitePopup.tsx +110 -45
  243. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  244. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  245. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  246. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  247. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  248. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  249. package/template/src/components/precall/LocalMute.tsx +69 -45
  250. package/template/src/components/precall/PermissionHelper.tsx +56 -28
  251. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  252. package/template/src/components/precall/VideoFallback.tsx +173 -0
  253. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  254. package/template/src/components/precall/VideoPreview.tsx +29 -164
  255. package/template/src/components/precall/index.tsx +2 -0
  256. package/template/src/components/precall/joinCallBtn.native.tsx +12 -5
  257. package/template/src/components/precall/joinCallBtn.tsx +13 -4
  258. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  259. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  260. package/template/src/components/precall/meetingTitle.tsx +37 -11
  261. package/template/src/components/precall/selectDevice.tsx +5 -5
  262. package/template/src/components/precall/textInput.tsx +17 -19
  263. package/template/src/components/precall/usePreCall.tsx +33 -1
  264. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  265. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  266. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  267. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  268. package/template/src/components/recordings/recording-table.tsx +154 -0
  269. package/template/src/components/recordings/style.ts +183 -0
  270. package/template/src/components/recordings/utils.ts +80 -0
  271. package/template/src/components/room-info/useRoomInfo.tsx +128 -0
  272. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  273. package/template/src/components/useShareLink.tsx +28 -63
  274. package/template/src/components/useUserPreference.tsx +82 -16
  275. package/template/src/components/useVideoCall.tsx +93 -1
  276. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  277. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  278. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  279. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  280. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  281. package/template/src/components/virtual-background/VButils.ts +104 -0
  282. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  283. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  284. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  285. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  286. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  287. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  288. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  289. package/template/src/components/virtual-background/images/index.ts +37 -0
  290. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  291. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  292. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  293. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  294. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  295. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  296. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  297. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  298. package/template/src/components/virtual-background/useVB.tsx +267 -0
  299. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  300. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  301. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  302. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  303. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  304. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  305. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  306. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  307. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  308. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  309. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  310. package/template/src/language/default-labels/commonLabels.ts +51 -14
  311. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  312. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  313. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  314. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  315. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  316. package/template/src/pages/Create.tsx +136 -106
  317. package/template/src/pages/Endcall.tsx +2 -2
  318. package/template/src/pages/Join.tsx +82 -40
  319. package/template/src/pages/Login.tsx +26 -0
  320. package/template/src/pages/VideoCall.tsx +329 -127
  321. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -6
  322. package/template/src/pages/video-call/ActionSheet.tsx +55 -15
  323. package/template/src/pages/video-call/ActionSheetContent.tsx +498 -308
  324. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  325. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  326. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  327. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  328. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  329. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  330. package/template/src/pages/video-call/VideoCallMobileView.tsx +231 -89
  331. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  332. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -84
  333. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  334. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  335. package/template/src/pages/video-call/VideoRenderer.tsx +343 -57
  336. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  337. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  338. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  339. package/template/src/pages/video-call/index.ts +42 -8
  340. package/template/src/rtm/RTMEngine.ts +17 -4
  341. package/template/src/rtm-events/constants.ts +21 -3
  342. package/template/src/rtm-events-api/Events.ts +7 -4
  343. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  344. package/template/src/rtm-events-api/types.ts +5 -5
  345. package/template/src/selection.json +1 -0
  346. package/template/src/subComponents/ChatBubble.tsx +87 -67
  347. package/template/src/subComponents/ChatContainer.tsx +70 -49
  348. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  349. package/template/src/subComponents/ChatInput.tsx +31 -80
  350. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  351. package/template/src/subComponents/Checkbox.tsx +7 -6
  352. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  353. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  354. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  355. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  356. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  357. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  358. package/template/src/subComponents/Loading.tsx +60 -0
  359. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  360. package/template/src/subComponents/LocalEndCall.tsx +61 -24
  361. package/template/src/subComponents/LocalSwitchCamera.tsx +57 -13
  362. package/template/src/subComponents/LocalVideoMute.tsx +105 -36
  363. package/template/src/subComponents/LogoutButton.tsx +1 -1
  364. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  365. package/template/src/subComponents/Recording.tsx +29 -9
  366. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  367. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  368. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  369. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  370. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  371. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  372. package/template/src/subComponents/SelectDevice.tsx +103 -34
  373. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  374. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  375. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  376. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  377. package/template/src/subComponents/ToastConfig.tsx +70 -61
  378. package/template/src/subComponents/caption/Caption.tsx +132 -0
  379. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  380. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  381. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  382. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  383. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  384. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  385. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  386. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  387. package/template/src/subComponents/caption/index.ts +3 -0
  388. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  389. package/template/src/subComponents/caption/proto/test.proto +23 -0
  390. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  391. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  392. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  393. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  394. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  395. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  396. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  397. package/template/src/subComponents/caption/utils.ts +126 -0
  398. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  399. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  400. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  401. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  402. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  403. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  404. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  405. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  406. package/template/src/subComponents/recording/useRecording.tsx +251 -138
  407. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  408. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +39 -15
  409. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +275 -69
  410. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +193 -124
  411. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  412. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  413. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  414. package/template/src/theme/index.ts +13 -0
  415. package/template/src/utils/SdkEvents.ts +37 -14
  416. package/template/src/utils/SdkMethodEvents.ts +101 -0
  417. package/template/src/utils/axiomLogger.ts +117 -0
  418. package/template/src/utils/book.jpg +0 -0
  419. package/template/src/utils/common.tsx +118 -6
  420. package/template/src/utils/constants.ts +4 -0
  421. package/template/src/utils/getCustomRoute.ts +7 -0
  422. package/template/src/utils/index.tsx +34 -0
  423. package/template/src/utils/useActionSheet.tsx +50 -0
  424. package/template/src/utils/useActiveSpeaker.ts +38 -0
  425. package/template/src/utils/useAppState.ts +17 -0
  426. package/template/src/utils/useAsyncEffect.ts +138 -0
  427. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +27 -26
  428. package/template/src/utils/useEndCall.ts +65 -0
  429. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  430. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  431. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  432. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  433. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  434. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  435. package/template/src/utils/useIsPSTN.ts +3 -3
  436. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  437. package/template/src/utils/useJoinRoom.ts +199 -0
  438. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  439. package/template/src/{components/OAuth.tsx → utils/useMenu.tsx} +16 -15
  440. package/template/src/utils/useModal.tsx +8 -0
  441. package/template/src/utils/useMutePSTN.ts +2 -2
  442. package/template/src/utils/useMuteToggleLocal.ts +121 -96
  443. package/template/src/utils/useRemoteEndCall.ts +4 -4
  444. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  445. package/template/src/utils/useRemoteMute.ts +7 -7
  446. package/template/src/utils/useRemoteRequest.ts +7 -7
  447. package/template/src/utils/useSearchParams.tsx +28 -0
  448. package/template/src/utils/useString.ts +13 -3
  449. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  450. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → utils/useSwitchCamera.tsx} +12 -11
  451. package/template/src/utils/useToolbar.tsx +59 -0
  452. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  453. package/template/static.d.ts +42 -0
  454. package/template/tsconfig_rsdk_index.json +3 -3
  455. package/template/tsconfig_wsdk_index.json +1 -1
  456. package/template/web/index.html +20 -0
  457. package/template/webpack.commons.js +21 -10
  458. package/template/webpack.rsdk.config.js +1 -2
  459. package/template/webpack.web.config.js +7 -3
  460. package/template/_buckconfig +0 -6
  461. package/template/_gitattributes +0 -1
  462. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  463. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  464. package/template/android/app/_BUCK +0 -55
  465. package/template/android/app/build_defs.bzl +0 -19
  466. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  467. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  468. package/template/src/components/OAuth.electron.tsx +0 -41
  469. package/template/src/components/OAuth.native.tsx +0 -55
  470. package/template/src/components/OAuthConfig.ts +0 -77
  471. package/template/src/components/StoreToken.tsx +0 -39
  472. package/template/src/components/meeting-info/useMeetingInfo.tsx +0 -70
  473. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  474. package/template/src/utils/useButtonTemplate.tsx +0 -44
  475. package/template/src/utils/useJoinMeeting.ts +0 -132
@@ -1,41 +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';
38
-
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';
35
+ import ScreenshareButton from '../../subComponents/screenshare/ScreenshareButton';
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';
39
52
  //Icon for expanding Action Sheet
40
53
  interface ShowMoreIconProps {
41
54
  isExpanded: boolean;
@@ -45,7 +58,7 @@ interface ShowMoreIconProps {
45
58
  const ShowMoreIcon = (props: ShowMoreIconProps) => {
46
59
  const {isExpanded, onPress, showNotification} = props;
47
60
  return (
48
- <View style={styles.iconWithText}>
61
+ <ToolbarItem>
49
62
  <View style={styles.iconContainer}>
50
63
  <TouchableOpacity onPress={onPress}>
51
64
  <ImageIcon
@@ -55,267 +68,298 @@ const ShowMoreIcon = (props: ShowMoreIconProps) => {
55
68
  </TouchableOpacity>
56
69
  {showNotification && <View style={styles.notification} />}
57
70
  </View>
58
- </View>
71
+ </ToolbarItem>
59
72
  );
60
73
  };
61
74
 
62
75
  //Icon for Live Streaming Controls
63
- interface LiveStreamIconProps {
64
- isHandRaised: boolean;
65
- showLabel?: boolean;
66
- }
67
- const LiveStreamIcon = (props: LiveStreamIconProps) => {
68
- const {isHandRaised, showLabel = $config.ICON_TEXT} = props;
69
- return (
70
- <View style={styles.iconWithText}>
71
- <View style={styles.iconContainer}>
72
- <LiveStreamControls
73
- showControls={true}
74
- isDesktop={false}
75
- showLabel={false}
76
- />
77
- </View>
78
- {showLabel && (
79
- <Text style={styles.iconText}>
80
- {isHandRaised ? 'Lower\nHand' : 'Raise\nHand'}
81
- </Text>
82
- )}
83
- </View>
84
- );
76
+ const LiveStreamIcon = () => {
77
+ //toolbaritem wrapped in the LiveStreamControls
78
+ return <LiveStreamControls showControls={true} />;
85
79
  };
86
80
 
87
81
  //Icon for Chat
88
- interface ChatIconProps {
89
- showLabel?: boolean;
90
- }
91
- const ChatIcon = (props: ChatIconProps) => {
92
- const {showLabel = $config.ICON_TEXT} = props;
82
+ const ChatIcon = () => {
93
83
  return (
94
- <View style={styles.iconWithText}>
95
- <View style={styles.iconContainer}>
96
- <ChatIconButton isOnActionSheet={true} />
97
- </View>
98
- {showLabel && <Text style={styles.iconText}>Chat</Text>}
99
- </View>
84
+ <ToolbarItem>
85
+ <ChatIconButton />
86
+ </ToolbarItem>
100
87
  );
101
88
  };
102
89
 
103
90
  //Icon for Participants
104
- interface ParticipantsIconProps {
105
- showNotification: boolean;
106
- }
107
- const ParticipantsIcon = (props: ParticipantsIconProps) => {
108
- const {showNotification} = props;
91
+ const ParticipantsIcon = () => {
109
92
  return (
110
- <View style={styles.iconWithText}>
111
- <View style={styles.iconContainer}>
112
- <ParticipantsIconButton isOnActionSheet={true} />
113
- </View>
114
- {$config.ICON_TEXT && <Text style={styles.iconText}>People</Text>}
115
- {/* {showNotification && <View style={styles.notification} />} */}
116
- </View>
93
+ <ToolbarItem>
94
+ <ParticipantsIconButton />
95
+ </ToolbarItem>
117
96
  );
118
97
  };
119
98
 
120
99
  //Icon for Recording
121
- interface RecordingIconProps {
122
- showLabel?: boolean;
123
- }
124
- const RecordingIcon = (props: RecordingIconProps) => {
125
- const {showLabel = $config.ICON_TEXT} = props;
100
+
101
+ const RecordingIcon = () => {
126
102
  return (
127
- <View style={styles.iconWithText}>
128
- <View style={styles.iconContainer}>
129
- <Recording showLabel={false} isOnActionSheet={true} />
130
- </View>
131
- {showLabel && <Text style={styles.iconText}>Record</Text>}
132
- </View>
103
+ <ToolbarItem>
104
+ <Recording />
105
+ </ToolbarItem>
133
106
  );
134
107
  };
135
108
 
136
- interface SwitchCameraIconProps {
137
- disabled: boolean;
138
- }
139
- const SwitchCameraIcon = (props: SwitchCameraIconProps) => {
140
- const {disabled} = props;
109
+ const VBIcon = () => {
110
+ const {isVBActive, setIsVBActive} = useVB();
141
111
  return (
142
- <View style={styles.iconWithText}>
143
- <View style={styles.iconContainer}>
144
- <LocalSwitchCamera showLabel={false} disabled={disabled} />
145
- </View>
146
- {$config.ICON_TEXT && (
147
- <View>
148
- <Text
149
- style={[
150
- styles.iconText,
151
- {
152
- color: disabled ? $config.SEMANTIC_NEUTRAL : $config.FONT_COLOR,
153
- },
154
- ]}>
155
- Switch
156
- </Text>
157
- <Text
158
- style={[
159
- styles.iconText,
160
- {
161
- color: disabled ? $config.SEMANTIC_NEUTRAL : $config.FONT_COLOR,
162
- marginTop: 0,
163
- },
164
- ]}>
165
- Camera
166
- </Text>
167
- </View>
168
- )}
169
- </View>
112
+ <ToolbarItem>
113
+ <VBButton
114
+ isVBOpen={isVBActive}
115
+ setIsVBOpen={setIsVBActive}
116
+ showLabel={true}
117
+ />
118
+ </ToolbarItem>
170
119
  );
171
120
  };
172
121
 
173
- interface SettingsIconProps {
174
- onPress: () => void;
175
- }
176
- const SettingsIcon = (props: SettingsIconProps) => {
177
- const {onPress} = props;
122
+ const SwitchCameraIcon = () => {
178
123
  return (
179
- <View style={styles.iconWithText}>
180
- <TouchableOpacity style={styles.iconContainer} onPress={onPress}>
181
- <ImageIcon
182
- name={'settings'}
183
- tintColor={$config.SECONDARY_ACTION_COLOR}
184
- />
185
- </TouchableOpacity>
186
- {$config.ICON_TEXT && <Text style={styles.iconText}>Settings</Text>}
187
- </View>
124
+ <ToolbarItem>
125
+ <LocalSwitchCamera />
126
+ </ToolbarItem>
127
+ );
128
+ };
129
+
130
+ const SettingsIcon = () => {
131
+ return (
132
+ <ToolbarItem>
133
+ <Settings />
134
+ </ToolbarItem>
188
135
  );
189
136
  };
190
137
 
191
138
  const ShareIcon = () => {
139
+ return (
140
+ <ToolbarItem>
141
+ <CopyJoinInfo />
142
+ </ToolbarItem>
143
+ );
144
+ };
145
+ const ScreenshareIcon = () => {
192
146
  return (
193
147
  <View style={styles.iconWithText}>
194
148
  <View style={styles.iconContainer}>
195
- <CopyJoinInfo showLabel={false} isOnActionSheet={true} />
149
+ <ScreenshareButton showLabel={false} isOnActionSheet={true} />
196
150
  </View>
197
- {$config.ICON_TEXT && <Text style={styles.iconText}>Invite</Text>}
151
+ {$config.ICON_TEXT && <Text style={styles.iconText}>Screen Share</Text>}
198
152
  </View>
199
153
  );
200
154
  };
201
155
 
202
- interface AudioIconProps {
203
- isMobileView: boolean;
204
- isOnActionSheet: boolean;
205
- showLabel: boolean;
206
- disabled: boolean;
207
- }
208
- const AudioIcon = (props: AudioIconProps) => {
156
+ const AudioIcon = () => {
209
157
  return (
210
- <View style={styles.iconWithText}>
211
- <View style={styles.iconContainer}>
212
- <LocalAudioMute {...props} />
213
- </View>
214
- </View>
158
+ <ToolbarItem>
159
+ <LocalAudioMute />
160
+ </ToolbarItem>
215
161
  );
216
162
  };
217
163
 
218
- interface CamIconProps {
219
- isMobileView: boolean;
220
- isOnActionSheet: boolean;
221
- showLabel: boolean;
222
- disabled: boolean;
223
- }
224
- const CamIcon = (props: CamIconProps) => {
164
+ const CamIcon = () => {
225
165
  return (
226
- <View style={styles.iconWithText}>
227
- <View style={styles.iconContainer}>
228
- <LocalVideoMute {...props} />
229
- </View>
230
- </View>
166
+ <ToolbarItem>
167
+ <LocalVideoMute />
168
+ </ToolbarItem>
169
+ );
170
+ };
171
+
172
+ const EndCallIcon = () => {
173
+ return (
174
+ <ToolbarItem>
175
+ <LocalEndcall />
176
+ </ToolbarItem>
231
177
  );
232
178
  };
233
179
 
234
- interface EndCallIconProps {
235
- showLabel: boolean;
236
- 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;
237
191
  }
238
- 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
+ );
239
203
  return (
240
- <View style={styles.iconWithText}>
241
- <View
242
- style={[
243
- styles.iconContainer,
244
- {backgroundColor: $config.SEMANTIC_ERROR},
245
- ]}>
246
- <LocalEndcall {...props} />
247
- </View>
248
- </View>
204
+ <ToolbarItem>
205
+ <CaptionIcon
206
+ isOnActionSheet={true}
207
+ showLabel={true}
208
+ closeActionSheet={onPress}
209
+ />
210
+ </ToolbarItem>
249
211
  );
250
212
  };
251
213
 
252
- interface LayoutIconProps {
214
+ interface TranscriptIconProps {
253
215
  showLabel?: boolean;
254
216
  }
255
- const LayoutIcon = (props: LayoutIconProps) => {
217
+
218
+ const TranscriptIconBtn = (props: TranscriptIconProps) => {
256
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
+ );
257
230
  return (
258
- <View style={styles.iconWithText}>
259
- <View style={styles.iconContainer}>
260
- <LayoutIconButton showLabel={false} />
261
- </View>
262
- {showLabel && <Text style={styles.iconText}>Layout</Text>}
263
- </View>
231
+ <ToolbarItem>
232
+ <TranscriptIcon isOnActionSheet={true} showLabel={true} />
233
+ </ToolbarItem>
264
234
  );
265
235
  };
266
236
 
267
- type ActionSheetComponentsProps = [
268
- (props: AudioIconProps) => JSX.Element,
269
- (props: CamIconProps) => JSX.Element,
270
- (props: EndCallIconProps) => JSX.Element,
271
- (props: ShowMoreIconProps) => JSX.Element,
272
- (props: ChatIconProps) => JSX.Element,
273
- (props: ParticipantsIconProps) => JSX.Element,
274
- (props) => JSX.Element,
275
- (props: SwitchCameraIconProps) => JSX.Element,
276
- (props: LayoutIconProps) => JSX.Element,
277
- (props: SettingsIconProps) => JSX.Element,
278
- (props) => JSX.Element,
279
- ];
280
-
281
- export const ActionSheetComponentsArray: ActionSheetComponentsProps = [
282
- AudioIcon,
283
- CamIcon,
284
- EndCallIcon,
285
- ShowMoreIcon,
286
- ChatIcon,
287
- ParticipantsIcon,
288
- RecordingIcon,
289
- SwitchCameraIcon,
290
- LayoutIcon,
291
- SettingsIcon,
292
- ShareIcon,
293
- ];
294
-
295
- const ActionSheetContent = (props) => {
296
- const {handleSheetChanges, isExpanded} = props;
297
- const {onlineUsersCount, localUid} = useContext(ChatContext);
298
- const layouts = useLayoutsData();
299
- const {currentLayout} = useLayout();
300
- const changeLayout = useChangeDefaultLayout();
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);
263
+ const {isScreenshareActive} = useScreenshare();
301
264
  const {rtcProps} = useContext(PropsContext);
302
- const {sidePanel, setSidePanel} = useSidePanel();
265
+ const {setSidePanel} = useSidePanel();
266
+ const {setRoomInfo} = useSetRoomInfo();
303
267
  const {
304
268
  data: {isHost},
305
- } = useMeetingInfo();
269
+ sttLanguage,
270
+ isSTTActive,
271
+ } = useRoomInfo();
306
272
  const {isPendingRequestToReview, raiseHandList} =
307
273
  useContext(LiveStreamContext);
308
274
  const {totalUnreadCount} = useChatNotification();
309
- const layout = layouts.findIndex((item) => item.name === currentLayout);
310
- const isLiveStream = $config.EVENT_MODE;
311
- const isAudience = rtcProps?.role == ClientRole.Audience;
312
- 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;
313
361
  const isHandRaised = raiseHandList[localUid]?.raised === RaiseHandValue.TRUE;
314
362
 
315
- const handleLayoutChange = () => {
316
- changeLayout();
317
- };
318
-
319
363
  const isAudioRoom = $config.AUDIO_ROOM;
320
364
  const isVoiceChatHost = !$config.EVENT_MODE && $config.AUDIO_ROOM && isHost;
321
365
  const isVoiceChatAudience =
@@ -326,111 +370,257 @@ const ActionSheetContent = (props) => {
326
370
 
327
371
  const isAudioVideoControlsDisabled =
328
372
  isAudience && $config.EVENT_MODE && !$config.RAISE_HAND;
329
- const isVideoDisabled = useLocalUserInfo().video === ToggleState.disabled;
330
- return (
331
- <View>
332
- {/* Row Always Visible */}
333
- <View
334
- style={[
335
- styles.row,
336
- {borderBottomWidth: 1, paddingTop: 4, justifyContent: 'center'},
337
- ]}>
338
- {isAudioVideoControlsDisabled ? null : (
339
- <AudioIcon
340
- isMobileView={true}
341
- isOnActionSheet={true}
342
- showLabel={false}
343
- disabled={isLiveStream && isAudience && !isBroadCasting}
344
- />
345
- )}
346
373
 
347
- {/*For AudioCast Host:Chat ,Attendee:Raise Hand
348
- For VoiceChat Host:Chat, Attendee:Chat
349
- */}
350
-
351
- {(isAudioCastHost || isVoiceChatHost || isVoiceChatAudience) && (
352
- <ChatIcon showLabel={false} />
353
- )}
354
- {(isAudioCastAudience && isLiveStream && isAudience) ||
374
+ const isConferencing = !$config.EVENT_MODE && !$config.AUDIO_ROOM;
375
+
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) ||
355
412
  (isBroadCasting && !isHost) ? (
356
413
  $config.RAISE_HAND && isAudioRoom ? (
357
- <LiveStreamIcon isHandRaised={isHandRaised} showLabel={false} />
414
+ <LiveStreamIcon />
358
415
  ) : null
359
- ) : null}
360
-
361
- {!isAudioRoom &&
362
- (isAudioVideoControlsDisabled ? null : (
363
- <CamIcon
364
- isOnActionSheet={true}
365
- isMobileView={true}
366
- showLabel={false}
367
- disabled={isLiveStream && isAudience && !isBroadCasting}
368
- />
369
- ))}
370
-
371
- <EndCallIcon showLabel={false} isOnActionSheet={true} />
372
-
373
- <ShowMoreIcon
374
- isExpanded={isExpanded}
375
- showNotification={
376
- (!isExpanded && totalUnreadCount !== 0) ||
377
- ($config.EVENT_MODE && isPendingRequestToReview)
378
- }
379
- onPress={() => handleSheetChanges(isExpanded ? 0 : 1)}
380
- />
381
- </View>
382
-
383
- {/* Rest Of Controls */}
384
- <View style={styles.row}>
385
- {/**
386
- * In event mode when raise hand feature is active
387
- * and audience is promoted to host, the audience can also
388
- * demote himself
389
- */}
390
- {(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) ? (
391
441
  $config.RAISE_HAND && !isAudioRoom ? (
392
- <LiveStreamIcon isHandRaised={isHandRaised} />
442
+ <LiveStreamIcon />
393
443
  ) : null
394
- ) : null}
395
-
396
- {/* Layout view */}
397
- <LayoutIcon />
398
-
399
- {/* chat */}
400
- {!(isAudioCastHost || isVoiceChatHost || isVoiceChatAudience) && (
401
- <ChatIcon />
402
- )}
403
- {/* participants */}
404
- <ParticipantsIcon
405
- 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)}
406
520
  />
407
- {/* record */}
408
- {isHost && $config.CLOUD_RECORDING ? <RecordingIcon /> : null}
409
-
410
- {/* switch camera */}
411
- {!isAudioRoom &&
412
- (isAudioVideoControlsDisabled ? null : (
413
- <SwitchCameraIcon
414
- disabled={
415
- (isLiveStream && isAudience && !isBroadCasting) ||
416
- 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;
417
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
573
+ }
574
+ onPress={() => handleSheetChanges(isExpanded ? 0 : 1)}
418
575
  />
419
- ))}
420
-
421
- {/* settings */}
422
- <SettingsIcon
423
- onPress={() => {
424
- setSidePanel(SidePanelType.Settings);
425
- }}
426
- />
576
+ ) : (
577
+ <></>
578
+ )}
579
+ </View>
580
+ </ActionSheetProvider>
427
581
 
428
- {/* invite */}
429
- <ShareIcon />
430
- </View>
582
+ <CarouselWrapper data={combinedItems?.slice(3, combinedItems?.length)} />
431
583
  </View>
432
584
  );
433
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
+ };
611
+
612
+ const slides = createSlides();
613
+
614
+ const isPaginationRequired = slides.length > 1;
615
+
616
+ if (isPaginationRequired)
617
+ return (
618
+ <View style={{flexDirection: 'row'}}>
619
+ <Carousel data={slides} />
620
+ </View>
621
+ );
622
+ return <View style={styles.row}>{slides[0].component}</View>;
623
+ };
434
624
 
435
625
  export default ActionSheetContent;
436
626