agora-appbuilder-core 4.0.0 → 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 (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 +89 -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 +18 -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
@@ -13,7 +13,7 @@ import React, {useContext, useRef, useState} from 'react';
13
13
  import {View, StyleSheet, Text, TouchableOpacity} from 'react-native';
14
14
  import RemoteAudioMute from '../../subComponents/RemoteAudioMute';
15
15
  import RemoteVideoMute from '../../subComponents/RemoteVideoMute';
16
- import {ClientRole, RenderInterface} from '../../../agora-rn-uikit';
16
+ import {ContentInterface, UidType} from '../../../agora-rn-uikit';
17
17
  import UserAvatar from '../../atoms/UserAvatar';
18
18
  import {isMobileUA, isWebInternal} from '../../utils/common';
19
19
  import ActionMenu, {ActionMenuItem} from '../../atoms/ActionMenu';
@@ -21,16 +21,15 @@ import Spacer from '../../atoms/Spacer';
21
21
  import useRemoteEndCall from '../../utils/useRemoteEndCall';
22
22
  import {useChatMessages} from '../chat-messages/useChatMessages';
23
23
  import LocalVideoMute from '../../subComponents/LocalVideoMute';
24
- import {ButtonTemplateName} from '../../utils/useButtonTemplate';
25
24
  import LocalAudioMute from '../../subComponents/LocalAudioMute';
26
25
  import RemoveMeetingPopup from '../../subComponents/RemoveMeetingPopup';
27
- import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
26
+ import {useRoomInfo} from '../room-info/useRoomInfo';
28
27
  import {
29
28
  RaiseHandValue,
30
29
  LiveStreamContext,
31
30
  LiveStreamControlMessageEnum,
32
31
  } from '../livestream';
33
- import events, {EventPersistLevel} from '../../rtm-events-api';
32
+ import events, {PersistanceLevel} from '../../rtm-events-api';
34
33
  import IconButton from '../../atoms/IconButton';
35
34
  import ThemeConfig from '../../theme';
36
35
  import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
@@ -42,25 +41,36 @@ import {useLiveStreamDataContext} from '../contexts/LiveStreamDataContext';
42
41
  import {
43
42
  SidePanelType,
44
43
  useLayout,
45
- useRender,
46
- useRtc,
44
+ useContent,
47
45
  useSidePanel,
48
46
  } from 'customization-api';
49
47
  import {getPinnedLayoutName} from '../../pages/video-call/DefaultLayouts';
50
48
  import UserActionMenuOptionsOptions from './UserActionMenuOptions';
49
+
50
+ import WaitingRoomButton from '../../subComponents/waiting-rooms/WaitingRoomControls';
51
+ import {useString} from '../../utils/useString';
52
+ import {
53
+ peoplePanelMeText,
54
+ peoplePanelPresenterText,
55
+ } from '../../language/default-labels/videoCallScreenLabels';
51
56
  interface ParticipantInterface {
52
57
  isLocal: boolean;
53
58
  name: string;
54
- user: RenderInterface;
59
+ user: ContentInterface;
55
60
  showControls: boolean;
56
61
  isHostUser: boolean;
57
62
  isAudienceUser: boolean;
58
63
  isMobile?: boolean;
64
+ waitingRoomUser?: boolean;
59
65
  handleClose: () => {};
60
66
  updateActionSheet: (screenName: 'chat' | 'participants' | 'settings') => {};
67
+ uid?: UidType;
68
+ screenUid?: UidType;
61
69
  }
62
70
 
63
71
  const Participant = (props: ParticipantInterface) => {
72
+ const metext = useString(peoplePanelMeText)();
73
+ const presentertext = useString(peoplePanelPresenterText)();
64
74
  const {coHostUids} = useContext(LiveStreamContext);
65
75
  const [isHovered, setIsHovered] = React.useState(false);
66
76
  const [actionMenuVisible, setActionMenuVisible] = React.useState(false);
@@ -76,14 +86,18 @@ const Participant = (props: ParticipantInterface) => {
76
86
  isMobile = false,
77
87
  handleClose,
78
88
  updateActionSheet,
89
+ waitingRoomUser = false,
90
+ uid,
91
+ screenUid,
79
92
  } = props;
80
93
  const {
81
94
  data: {isHost},
82
- } = useMeetingInfo();
95
+ } = useRoomInfo();
83
96
 
84
97
  const showModal = () => {
85
- setActionMenuVisible((state) => !state);
98
+ setActionMenuVisible(state => !state);
86
99
  };
100
+
87
101
  return (
88
102
  <>
89
103
  <UserActionMenuOptionsOptions
@@ -106,17 +120,18 @@ const Participant = (props: ParticipantInterface) => {
106
120
  <Text style={styles.participantNameText} numberOfLines={1}>
107
121
  {name}
108
122
  </Text>
109
- {isLocal && <Text style={styles.subText}>{'Me'}</Text>}
123
+ {isLocal && <Text style={styles.subText}>{metext}</Text>}
110
124
  {!isLocal &&
111
125
  $config.EVENT_MODE &&
112
126
  coHostUids.indexOf(user.uid) !== -1 ? (
113
- <Text style={styles.subText}>{'Presenter'}</Text>
127
+ <Text style={styles.subText}>{presentertext}</Text>
114
128
  ) : (
115
129
  <></>
116
130
  )}
117
131
  </View>
118
132
  <View style={styles.iconContainer}>
119
- {isHovered || actionMenuVisible || isMobileUA() ? (
133
+ {(isHovered || actionMenuVisible || isMobileUA()) &&
134
+ !waitingRoomUser ? (
120
135
  <View
121
136
  ref={moreIconRef}
122
137
  collapsable={false}
@@ -151,6 +166,23 @@ const Participant = (props: ParticipantInterface) => {
151
166
  ) : (
152
167
  <Spacer size={24} horizontal={true} />
153
168
  )}
169
+ {waitingRoomUser ? (
170
+ <>
171
+ <WaitingRoomButton
172
+ uid={uid}
173
+ screenUid={screenUid}
174
+ isAccept={false}
175
+ />
176
+ <Spacer horizontal={true} size={8} />
177
+ <WaitingRoomButton
178
+ uid={uid}
179
+ screenUid={screenUid}
180
+ isAccept={true}
181
+ />
182
+ </>
183
+ ) : (
184
+ <></>
185
+ )}
154
186
  {showControls ? (
155
187
  <>
156
188
  <Spacer horizontal={true} size={8} />
@@ -173,8 +205,6 @@ const Participant = (props: ParticipantInterface) => {
173
205
  : $config.SEMANTIC_ERROR,
174
206
  };
175
207
  }}
176
- showLabel={false}
177
- isMobileView={isMobile}
178
208
  />
179
209
  </View>
180
210
  )
@@ -206,8 +236,6 @@ const Participant = (props: ParticipantInterface) => {
206
236
  : $config.SEMANTIC_ERROR,
207
237
  };
208
238
  }}
209
- showLabel={false}
210
- isMobileView={isMobile}
211
239
  />
212
240
  </View>
213
241
  )
@@ -287,6 +315,7 @@ const styles = StyleSheet.create({
287
315
  container: {
288
316
  flexDirection: 'row',
289
317
  justifyContent: 'space-between',
318
+ alignItems: 'center',
290
319
  paddingHorizontal: 20,
291
320
  paddingVertical: 8,
292
321
  },
@@ -12,6 +12,9 @@ interface PropsInterface {
12
12
 
13
13
  export default function ParticipantSectionTitle(props: PropsInterface) {
14
14
  const {title, count = 0} = props;
15
+ if (!count) {
16
+ return null;
17
+ }
15
18
  return (
16
19
  <TouchableOpacity
17
20
  style={style.container}
@@ -43,8 +46,8 @@ const style = StyleSheet.create({
43
46
  fontSize: 12,
44
47
  fontFamily: 'Source Sans Pro',
45
48
  fontWeight: '700',
46
- color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.medium,
47
- paddingVertical: 12,
49
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.disabled,
50
+ paddingVertical: 8,
48
51
  alignSelf: 'center',
49
52
  },
50
53
  iconView: {
@@ -14,18 +14,18 @@ import {View, Text, StyleSheet, TouchableOpacity} from 'react-native';
14
14
  import ThemeConfig from '../../theme';
15
15
  import UserAvatar from '../../atoms/UserAvatar';
16
16
  import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
17
- import {RenderInterface} from 'customization-api';
17
+ import {ContentInterface} from 'customization-api';
18
18
  import {isWebInternal, isMobileUA} from '../../utils/common';
19
19
  import IconButton from '../../atoms/IconButton';
20
20
  import UserActionMenuOptionsOptions from './UserActionMenuOptions';
21
21
 
22
- const ScreenshareParticipants = (props: {user: RenderInterface}) => {
22
+ const ScreenshareParticipants = (props: {user: ContentInterface}) => {
23
23
  const screenshareRef = useRef();
24
24
  const [isHovered, setIsHovered] = useState(false);
25
25
  const [actionMenuVisible, setActionMenuVisible] = useState(false);
26
26
 
27
27
  const showModal = () => {
28
- setActionMenuVisible((state) => !state);
28
+ setActionMenuVisible(state => !state);
29
29
  };
30
30
  return (
31
31
  <>
@@ -39,17 +39,17 @@ const ScreenshareParticipants = (props: {user: RenderInterface}) => {
39
39
  />
40
40
  <PlatformWrapper showModal={showModal} setIsHovered={setIsHovered}>
41
41
  <View style={styles.container}>
42
- <View style={styles.userInfoContainer}>
43
- <View style={styles.bgContainerStyle}>
44
- <UserAvatar
45
- name={props.user.name}
46
- containerStyle={styles.containerStyle}
47
- textStyle={styles.textStyle}
48
- />
49
- </View>
50
- <View style={{alignSelf: 'center'}}>
51
- <Text style={styles.participantNameText}>{props.user.name}</Text>
52
- </View>
42
+ <View style={styles.bgContainerStyle}>
43
+ <UserAvatar
44
+ name={props.user.name}
45
+ containerStyle={styles.containerStyle}
46
+ textStyle={styles.textStyle}
47
+ />
48
+ </View>
49
+ <View style={{flex: 1, marginHorizontal: 8, alignSelf: 'center'}}>
50
+ <Text style={styles.participantNameText} numberOfLines={1}>
51
+ {props.user.name}
52
+ </Text>
53
53
  </View>
54
54
  {true ? (
55
55
  <View
@@ -88,11 +88,11 @@ const ScreenshareParticipants = (props: {user: RenderInterface}) => {
88
88
  />
89
89
  </View>
90
90
  ) : (
91
- <></>
91
+ <View style={{width: 24, height: 24, opacity: 0}} />
92
92
  )}
93
93
  </View>
94
94
  ) : (
95
- <></>
95
+ <View style={{width: 24, height: 24, opacity: 0}} />
96
96
  )}
97
97
  </View>
98
98
  </PlatformWrapper>
@@ -123,7 +123,6 @@ const styles = StyleSheet.create({
123
123
  width: 36,
124
124
  height: 36,
125
125
  borderRadius: 18,
126
- marginRight: 8,
127
126
  },
128
127
  containerStyle: {
129
128
  width: 36,
@@ -132,14 +131,13 @@ const styles = StyleSheet.create({
132
131
  },
133
132
  textStyle: {
134
133
  fontSize: ThemeConfig.FontSize.tiny,
135
- lineHeight: 10,
134
+ lineHeight: 12,
136
135
  fontWeight: '400',
137
136
  color: $config.CARD_LAYER_1_COLOR,
138
137
  },
139
138
  participantNameText: {
140
139
  fontWeight: '400',
141
140
  fontSize: 12,
142
- lineHeight: 15,
143
141
  fontFamily: ThemeConfig.FontFamily.sansPro,
144
142
  flexDirection: 'row',
145
143
  color: $config.FONT_COLOR,
@@ -1,17 +1,18 @@
1
1
  import React, {useContext, useEffect, useRef, useState} from 'react';
2
+ import useRemoteMute, {MUTE_REMOTE_TYPE} from '../../utils/useRemoteMute';
2
3
  import {
3
- MUTE_REMOTE_TYPE,
4
- RenderInterface,
4
+ ContentInterface,
5
5
  SidePanelType,
6
6
  useLayout,
7
7
  useLocalUid,
8
- useMeetingInfo,
9
- useRemoteMute,
10
- useRender,
11
- useRtc,
8
+ useRoomInfo,
9
+ useContent,
12
10
  useSidePanel,
13
11
  } from 'customization-api';
14
- import {getPinnedLayoutName} from '../../pages/video-call/DefaultLayouts';
12
+ import {
13
+ DefaultLayouts,
14
+ getPinnedLayoutName,
15
+ } from '../../pages/video-call/DefaultLayouts';
15
16
  import useRemoteRequest, {
16
17
  REQUEST_REMOTE_TYPE,
17
18
  } from '../../utils/useRemoteRequest';
@@ -20,13 +21,17 @@ import {useChatMessages} from '../chat-messages/useChatMessages';
20
21
  import {useLiveStreamDataContext} from '../contexts/LiveStreamDataContext';
21
22
  import useRemoteEndCall from '../../utils/useRemoteEndCall';
22
23
  import LiveStreamContext from '../livestream/LiveStreamContext';
23
- import {ClientRole, UidType} from '../../../agora-rn-uikit';
24
+ import {
25
+ ClientRoleType,
26
+ DispatchContext,
27
+ UidType,
28
+ } from '../../../agora-rn-uikit';
24
29
  import {useWindowDimensions} from 'react-native';
25
30
  import {
26
31
  LiveStreamControlMessageEnum,
27
32
  RaiseHandValue,
28
33
  } from '../livestream/Types';
29
- import events, {EventPersistLevel} from '../../rtm-events-api';
34
+ import events, {PersistanceLevel} from '../../rtm-events-api';
30
35
  import RemoveMeetingPopup from '../../subComponents/RemoveMeetingPopup';
31
36
  import RemoveScreensharePopup from '../../subComponents/RemoveScreensharePopup';
32
37
  import useRemoteEndScreenshare from '../../utils/useRemoteEndScreenshare';
@@ -35,9 +40,32 @@ import {useFocus} from '../../utils/useFocus';
35
40
  import Toast from '../../../react-native-toast-message';
36
41
  import RemoteMutePopup from '../../subComponents/RemoteMutePopup';
37
42
  import {calculatePosition, trimText} from '../../utils/common';
43
+ import {useVideoCall} from '../useVideoCall';
44
+ import {customEvents} from 'customization-api';
45
+ import {useDisableChat} from '../disable-chat/useDisableChat';
46
+ import {useWhiteboard} from '../../components/whiteboard/WhiteboardConfigure';
47
+ import {useString} from '../../utils/useString';
48
+ import {
49
+ I18nMuteType,
50
+ moreBtnAddAsPresenter,
51
+ moreBtnAudio,
52
+ moreBtnChangeName,
53
+ moreBtnMessagePrivately,
54
+ moreBtnPinToTop,
55
+ moreBtnRemoveAsPresenter,
56
+ moreBtnRemoveFromLarge,
57
+ moreBtnRemoveFromRoom,
58
+ moreBtnRemoveFromTop,
59
+ moreBtnRemoveScreenShare,
60
+ moreBtnStopScreenShare,
61
+ moreBtnVideo,
62
+ moreBtnViewInLarge,
63
+ moreBtnViewWhiteboard,
64
+ userRemovedFromTheRoomToastHeading,
65
+ } from '../../language/default-labels/videoCallScreenLabels';
38
66
 
39
67
  interface UserActionMenuOptionsOptionsProps {
40
- user: RenderInterface;
68
+ user: ContentInterface;
41
69
  actionMenuVisible: boolean;
42
70
  setActionMenuVisible: (actionMenuVisible: boolean) => void;
43
71
  btnRef: any;
@@ -57,15 +85,17 @@ export default function UserActionMenuOptionsOptions(
57
85
  const [actionMenuitems, setActionMenuitems] = useState<ActionMenuItem[]>([]);
58
86
  const {setSidePanel} = useSidePanel();
59
87
  const {user, actionMenuVisible, setActionMenuVisible} = props;
60
- const {pinnedUid, activeUids} = useRender();
61
- const {dispatch} = useRtc();
88
+ const {currentLayout} = useLayout();
89
+ const {pinnedUid, activeUids, customContent, secondaryPinnedUid} =
90
+ useContent();
91
+ const {dispatch} = useContext(DispatchContext);
62
92
  const {setLayout} = useLayout();
63
93
  const localuid = useLocalUid();
64
94
  const {openPrivateChat} = useChatMessages();
65
95
  const {hostUids, audienceUids} = useLiveStreamDataContext();
66
96
  const {
67
97
  data: {isHost},
68
- } = useMeetingInfo();
98
+ } = useRoomInfo();
69
99
  const remoteRequest = useRemoteRequest();
70
100
  const remoteMute = useRemoteMute();
71
101
  const endRemoteCall = useRemoteEndCall();
@@ -73,6 +103,40 @@ export default function UserActionMenuOptionsOptions(
73
103
  useContext(LiveStreamContext);
74
104
  const [removeMeetingPopupVisible, setRemoveMeetingPopupVisible] =
75
105
  useState(false);
106
+ const {enablePinForMe} = useVideoCall();
107
+ const {setDisableChatUids, disableChatUids} = useDisableChat();
108
+ const {getWhiteboardUid = () => 0} = useWhiteboard();
109
+
110
+ const viewWhiteboardLabel = useString(moreBtnViewWhiteboard)();
111
+ const removeFromLargeLabel = useString(moreBtnRemoveFromLarge)();
112
+ const viewInLargeLabel = useString(moreBtnViewInLarge)();
113
+ const pinToTopLabel = useString(moreBtnPinToTop)();
114
+ const removeFromTopLabel = useString(moreBtnRemoveFromTop)();
115
+ const messagePrivatelyLabel = useString(moreBtnMessagePrivately)();
116
+ const audioLabel = useString<boolean>(moreBtnAudio);
117
+ const videoLabel = useString<boolean>(moreBtnVideo);
118
+ const addAsPresenterLabel = useString(moreBtnAddAsPresenter)();
119
+ const removeAsPresenterLabel = useString(moreBtnRemoveAsPresenter)();
120
+ const changeNameLabel = useString(moreBtnChangeName)();
121
+ const stopScreenShareLabel = useString(moreBtnStopScreenShare)();
122
+ const removeScreenShareLabel = useString(moreBtnRemoveScreenShare)();
123
+ const removeFromRoomLabel = useString(moreBtnRemoveFromRoom)();
124
+
125
+ useEffect(() => {
126
+ customEvents.on('DisableChat', data => {
127
+ // for other users
128
+ const {disableChatUid, disableChat} = JSON.parse(data?.payload);
129
+ setDisableChatUids(prevState => {
130
+ // upate disable uids
131
+ return {
132
+ ...prevState,
133
+ [disableChatUid]: {
134
+ disableChat,
135
+ },
136
+ };
137
+ });
138
+ });
139
+ }, []);
76
140
 
77
141
  useEffect(() => {
78
142
  const items: ActionMenuItem[] = [];
@@ -89,26 +153,62 @@ export default function UserActionMenuOptionsOptions(
89
153
  audienceUids.indexOf(user.uid) !== -1
90
154
  )
91
155
  ) {
92
- items.push({
93
- disabled: activeUids.length === 1,
94
- icon: pinnedUid ? 'unpin-outlined' : 'pin-outlined',
95
- onHoverIcon: pinnedUid ? 'unpin-outlined' : 'pin-filled',
96
- iconColor: $config.SECONDARY_ACTION_COLOR,
97
- textColor: $config.SECONDARY_ACTION_COLOR,
98
- title: pinnedUid
99
- ? user.uid === pinnedUid
100
- ? 'Unpin'
101
- : 'Replace Pin'
102
- : 'Pin for me',
103
- callback: () => {
104
- setActionMenuVisible(false);
105
- dispatch({
106
- type: 'UserPin',
107
- value: [pinnedUid && user.uid === pinnedUid ? 0 : user.uid],
156
+ if (enablePinForMe) {
157
+ //if (pinnedUid !== user.uid) {
158
+ items.push({
159
+ //disabled: activeUids?.filter(i => !customContent[i])?.length === 1,
160
+ disabled: activeUids?.length === 1,
161
+ icon: pinnedUid ? 'unpin-outlined' : 'pin-outlined',
162
+ onHoverIcon: pinnedUid ? 'unpin-outlined' : 'pin-filled',
163
+ iconColor: $config.SECONDARY_ACTION_COLOR,
164
+ textColor: $config.SECONDARY_ACTION_COLOR,
165
+ title: pinnedUid
166
+ ? user.uid === pinnedUid
167
+ ? removeFromLargeLabel
168
+ : user.uid === getWhiteboardUid()
169
+ ? viewWhiteboardLabel
170
+ : viewInLargeLabel
171
+ : user.uid === getWhiteboardUid()
172
+ ? viewWhiteboardLabel
173
+ : viewInLargeLabel,
174
+ callback: () => {
175
+ setActionMenuVisible(false);
176
+ dispatch({
177
+ type: 'UserPin',
178
+ value: [pinnedUid && user.uid === pinnedUid ? 0 : user.uid],
179
+ });
180
+ setLayout(getPinnedLayoutName());
181
+ },
182
+ });
183
+ if (currentLayout === DefaultLayouts[1].name) {
184
+ items.push({
185
+ // disabled:
186
+ // activeUids?.filter(i => !customContent[i])?.length === 1,
187
+ disabled: activeUids?.length === 1,
188
+ icon: secondaryPinnedUid ? 'unpin-outlined' : 'pin-outlined',
189
+ onHoverIcon: secondaryPinnedUid ? 'unpin-outlined' : 'pin-filled',
190
+ iconColor: $config.SECONDARY_ACTION_COLOR,
191
+ textColor: $config.SECONDARY_ACTION_COLOR,
192
+ title: secondaryPinnedUid
193
+ ? user.uid === secondaryPinnedUid
194
+ ? removeFromTopLabel
195
+ : pinToTopLabel
196
+ : pinToTopLabel,
197
+ callback: () => {
198
+ setActionMenuVisible(false);
199
+ dispatch({
200
+ type: 'UserSecondaryPin',
201
+ value: [
202
+ secondaryPinnedUid && user.uid === secondaryPinnedUid
203
+ ? 0
204
+ : user.uid,
205
+ ],
206
+ });
207
+ },
108
208
  });
109
- setLayout(getPinnedLayoutName());
110
- },
111
- });
209
+ }
210
+ //}
211
+ }
112
212
  }
113
213
 
114
214
  /**
@@ -118,18 +218,19 @@ export default function UserActionMenuOptionsOptions(
118
218
  /**
119
219
  * Chat menu
120
220
  */
121
- items.push({
122
- icon: 'chat-outlined',
123
- onHoverIcon: 'chat-filled',
124
- iconColor: $config.SECONDARY_ACTION_COLOR,
125
- textColor: $config.SECONDARY_ACTION_COLOR,
126
- title: 'Message Privately',
127
- callback: () => {
128
- setActionMenuVisible(false);
129
- openPrivateChat(user.uid);
130
- },
131
- });
132
-
221
+ if ($config.CHAT) {
222
+ items.push({
223
+ icon: 'chat-outlined',
224
+ onHoverIcon: 'chat-filled',
225
+ iconColor: $config.SECONDARY_ACTION_COLOR,
226
+ textColor: $config.SECONDARY_ACTION_COLOR,
227
+ title: messagePrivatelyLabel,
228
+ callback: () => {
229
+ setActionMenuVisible(false);
230
+ openPrivateChat(user.uid);
231
+ },
232
+ });
233
+ }
133
234
  /**
134
235
  * Only host can see this menu item - request/mute - video/audio, promote to co host,demote to audience,remove form meeting
135
236
  */
@@ -154,7 +255,7 @@ export default function UserActionMenuOptionsOptions(
154
255
  onHoverIcon: user.audio ? 'mic-off-filled' : 'mic-on-filled',
155
256
  iconColor: $config.SECONDARY_ACTION_COLOR,
156
257
  textColor: $config.SECONDARY_ACTION_COLOR,
157
- title: user.audio ? 'Mute Audio' : 'Request Audio',
258
+ title: audioLabel(user.audio),
158
259
  callback: () => {
159
260
  setActionMenuVisible(false);
160
261
  user.audio
@@ -168,7 +269,7 @@ export default function UserActionMenuOptionsOptions(
168
269
  onHoverIcon: user.video ? 'video-off-filled' : 'video-on-filled',
169
270
  iconColor: $config.SECONDARY_ACTION_COLOR,
170
271
  textColor: $config.SECONDARY_ACTION_COLOR,
171
- title: user.video ? 'Mute Video' : 'Request Video',
272
+ title: videoLabel(user.video),
172
273
  callback: () => {
173
274
  setActionMenuVisible(false);
174
275
  user.video
@@ -192,7 +293,7 @@ export default function UserActionMenuOptionsOptions(
192
293
  onHoverIcon: 'promote-filled',
193
294
  iconColor: $config.SECONDARY_ACTION_COLOR,
194
295
  textColor: $config.SECONDARY_ACTION_COLOR,
195
- title: 'Add as Presenter',
296
+ title: addAsPresenterLabel,
196
297
  callback: () => {
197
298
  setActionMenuVisible(false);
198
299
  promoteAudienceAsCoHost(user.uid);
@@ -202,7 +303,8 @@ export default function UserActionMenuOptionsOptions(
202
303
  if ($config.EVENT_MODE) {
203
304
  if (
204
305
  raiseHandList[user.uid]?.raised === RaiseHandValue.TRUE &&
205
- raiseHandList[user.uid]?.role == ClientRole.Broadcaster
306
+ raiseHandList[user.uid]?.role ==
307
+ ClientRoleType.ClientRoleBroadcaster
206
308
  ) {
207
309
  items.push({
208
310
  isBase64Icon: true,
@@ -210,13 +312,13 @@ export default function UserActionMenuOptionsOptions(
210
312
  onHoverIcon: 'demote-filled',
211
313
  iconColor: $config.SECONDARY_ACTION_COLOR,
212
314
  textColor: $config.SECONDARY_ACTION_COLOR,
213
- title: 'Remove as Presenter',
315
+ title: removeAsPresenterLabel,
214
316
  callback: () => {
215
317
  setActionMenuVisible(false);
216
318
  events.send(
217
319
  LiveStreamControlMessageEnum.raiseHandRequestRejected,
218
320
  '',
219
- EventPersistLevel.LEVEL1,
321
+ PersistanceLevel.None,
220
322
  user.uid,
221
323
  );
222
324
  },
@@ -228,7 +330,7 @@ export default function UserActionMenuOptionsOptions(
228
330
  icon: 'remove-meeting',
229
331
  iconColor: $config.SEMANTIC_ERROR,
230
332
  textColor: $config.SEMANTIC_ERROR,
231
- title: 'Remove From Meeting',
333
+ title: removeFromRoomLabel,
232
334
  callback: () => {
233
335
  setActionMenuVisible(false);
234
336
  setRemoveMeetingPopupVisible(true);
@@ -246,9 +348,9 @@ export default function UserActionMenuOptionsOptions(
246
348
  onHoverIcon: 'pencil-filled',
247
349
  iconColor: $config.SECONDARY_ACTION_COLOR,
248
350
  textColor: $config.SECONDARY_ACTION_COLOR,
249
- title: 'Change Name',
351
+ title: changeNameLabel,
250
352
  callback: () => {
251
- setFocus((prevState) => {
353
+ setFocus(prevState => {
252
354
  return {
253
355
  ...prevState,
254
356
  editName: true,
@@ -271,8 +373,8 @@ export default function UserActionMenuOptionsOptions(
271
373
  textColor: $config.SEMANTIC_ERROR,
272
374
  title:
273
375
  localuid === user?.parentUid
274
- ? 'Stop Screenshare'
275
- : 'Remove Screenshare',
376
+ ? stopScreenShareLabel
377
+ : removeScreenShareLabel,
276
378
  callback: () => {
277
379
  setActionMenuVisible(false);
278
380
  //for local user directly stop the screenshare
@@ -287,11 +389,20 @@ export default function UserActionMenuOptionsOptions(
287
389
  });
288
390
  }
289
391
  setActionMenuitems(items);
290
- }, [pinnedUid, isHost, raiseHandList, hostUids, user]);
392
+ }, [
393
+ pinnedUid,
394
+ isHost,
395
+ raiseHandList,
396
+ hostUids,
397
+ user,
398
+ disableChatUids,
399
+ secondaryPinnedUid,
400
+ currentLayout,
401
+ ]);
291
402
 
292
403
  const {width: globalWidth, height: globalHeight} = useWindowDimensions();
293
404
  const [modalPosition, setModalPosition] = useState({});
294
-
405
+ const toastlabel = useString(userRemovedFromTheRoomToastHeading);
295
406
  useEffect(() => {
296
407
  if (actionMenuVisible) {
297
408
  //getting btnRef x,y
@@ -323,7 +434,7 @@ export default function UserActionMenuOptionsOptions(
323
434
  <>
324
435
  {isHost ? (
325
436
  <RemoteMutePopup
326
- type="audio"
437
+ type={I18nMuteType.audio}
327
438
  actionMenuVisible={showAudioMuteModal}
328
439
  setActionMenuVisible={setShowAudioMuteModal}
329
440
  name={props?.user.name}
@@ -338,7 +449,7 @@ export default function UserActionMenuOptionsOptions(
338
449
  )}
339
450
  {isHost ? (
340
451
  <RemoteMutePopup
341
- type="video"
452
+ type={I18nMuteType.video}
342
453
  actionMenuVisible={showVideoMuteModal}
343
454
  setActionMenuVisible={setShowVideoMuteModal}
344
455
  name={props?.user.name}
@@ -372,13 +483,13 @@ export default function UserActionMenuOptionsOptions(
372
483
  username={user.name}
373
484
  removeUserFromMeeting={() => {
374
485
  Toast.show({
486
+ leadingIconName: 'info',
375
487
  type: 'info',
376
- text1: `The system will remove ${trimText(
377
- user.name,
378
- )} from this call after 5 secs.`,
488
+ text1: toastlabel(trimText(user.name)),
379
489
  visibilityTime: 5000,
380
490
  primaryBtn: null,
381
491
  secondaryBtn: null,
492
+ leadingIcon: null,
382
493
  });
383
494
  endRemoteCall(user.uid);
384
495
  }}