agora-appbuilder-core 4.0.0-api.5 → 4.0.0-api.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/package.json +2 -2
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +29 -29
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +26471 -22749
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +30 -10
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +19 -0
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  12. package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  14. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +1 -0
  16. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +1 -0
  17. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +1 -0
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +1 -0
  21. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +3 -1
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +3 -1
  24. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +1 -1
  25. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +3 -3
  26. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +5 -4
  27. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -1
  28. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +8 -5
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -1
  30. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -1
  31. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -1
  32. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +18 -1
  33. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  34. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  35. package/template/agora-rn-uikit/src/Rtc/Create.tsx +47 -21
  36. package/template/agora-rn-uikit/src/Rtc/Join.tsx +37 -15
  37. package/template/agora-rn-uikit/src/RtcConfigure.tsx +122 -12
  38. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +32 -4
  39. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +21 -2
  40. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -0
  41. package/template/android/app/build.gradle +59 -156
  42. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  43. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  44. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  45. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  46. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  47. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +19 -36
  48. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  49. package/template/android/build.gradle +19 -33
  50. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  51. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  52. package/template/android/gradle.properties +18 -4
  53. package/template/android/gradlew +165 -104
  54. package/template/android/gradlew.bat +12 -23
  55. package/template/android/settings.gradle +1 -0
  56. package/template/bridge/rtc/webNg/RtcEngine.ts +131 -16
  57. package/template/bridge/rtc/webNg/index.ts +72 -1
  58. package/template/bridge/rtm/web/index.ts +5 -3
  59. package/template/configTransform.js +16 -1
  60. package/template/customization-api/action-library.ts +0 -8
  61. package/template/customization-api/app-state.ts +11 -2
  62. package/template/customization-api/customEvents.ts +6 -1
  63. package/template/customization-api/index.ts +4 -0
  64. package/template/customization-api/sub-components.ts +6 -3
  65. package/template/customization-api/temp.ts +52 -0
  66. package/template/customization-api/typeDefinition.ts +26 -14
  67. package/template/customization-api/types.ts +26 -0
  68. package/template/customization-api/utils.ts +2 -0
  69. package/template/customization-implementation/index.ts +0 -1
  70. package/template/defaultConfig.js +72 -0
  71. package/template/global.d.ts +13 -1
  72. package/template/index.js +0 -4
  73. package/template/index.web.js +0 -5
  74. package/template/index.wsdk.tsx +1 -19
  75. package/template/ios/.xcode.env +11 -0
  76. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  77. package/template/ios/HelloWorld/AppDelegate.mm +42 -0
  78. package/template/ios/HelloWorld/Info.plist +1 -1
  79. package/template/ios/HelloWorld/main.m +2 -1
  80. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +529 -17
  81. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  82. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  83. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  85. package/template/ios/HelloWorldTests/Info.plist +2 -2
  86. package/template/ios/Podfile +53 -20
  87. package/template/ios/Podfile.lock +873 -0
  88. package/template/ios/ScreenSharing/Info.plist +15 -0
  89. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  90. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  91. package/template/jest.config.js +4 -0
  92. package/template/metro.config.js +7 -32
  93. package/template/package.json +52 -39
  94. package/template/react-native-toast-message/index.d.ts +3 -1
  95. package/template/react-native-toast-message/index.js +1 -0
  96. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  97. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  98. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  99. package/template/react-native-toast-message/src/index.js +3 -1
  100. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  101. package/template/src/App.tsx +13 -85
  102. package/template/src/AppRoutes.tsx +77 -0
  103. package/template/src/AppWrapper.tsx +38 -33
  104. package/template/src/SDKAppWrapper.tsx +79 -43
  105. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  106. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  107. package/template/src/app-state/useVideoQuality.tsx +39 -0
  108. package/template/src/assets/font-styles.css +171 -3
  109. package/template/src/assets/fonts/icomoon.ttf +0 -0
  110. package/template/src/assets/selection.json +1 -1
  111. package/template/src/atoms/ActionMenu.tsx +50 -11
  112. package/template/src/atoms/Avatar.tsx +51 -0
  113. package/template/src/atoms/Card.tsx +21 -8
  114. package/template/src/atoms/Carousel.native.tsx +105 -0
  115. package/template/src/atoms/Carousel.tsx +103 -0
  116. package/template/src/atoms/Checkbox.tsx +98 -0
  117. package/template/src/atoms/CircularProgress.tsx +0 -1
  118. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  119. package/template/src/atoms/CustomIcon.tsx +45 -0
  120. package/template/src/atoms/DropDownMulti.tsx +349 -0
  121. package/template/src/atoms/Dropdown.tsx +3 -3
  122. package/template/src/atoms/IconButton.tsx +52 -9
  123. package/template/src/atoms/ImageIcon.tsx +6 -3
  124. package/template/src/atoms/InlineNotification.tsx +81 -0
  125. package/template/src/atoms/MeetingLink.tsx +160 -0
  126. package/template/src/atoms/ParticipantsCount.tsx +18 -7
  127. package/template/src/atoms/Popup.tsx +49 -27
  128. package/template/src/atoms/PrimaryButton.tsx +19 -5
  129. package/template/src/atoms/RecordingInfo.tsx +2 -2
  130. package/template/src/atoms/SecondaryButton.tsx +2 -0
  131. package/template/src/atoms/Spacer.tsx +1 -0
  132. package/template/src/atoms/TertiaryButton.tsx +35 -5
  133. package/template/src/atoms/TextInput.tsx +2 -1
  134. package/template/src/atoms/Toolbar.tsx +64 -30
  135. package/template/src/atoms/ToolbarItem.tsx +11 -5
  136. package/template/src/atoms/ToolbarPreset.tsx +13 -2
  137. package/template/src/atoms/Tooltip.tsx +26 -4
  138. package/template/src/auth/AuthProvider.tsx +500 -0
  139. package/template/src/auth/AuthRoute.tsx +94 -0
  140. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  141. package/template/src/auth/IDPAuth.tsx +67 -0
  142. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  143. package/template/src/auth/UserCancelPopup.tsx +115 -0
  144. package/template/src/auth/config.ts +52 -0
  145. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  146. package/template/src/auth/openIDPURL.native.tsx +51 -0
  147. package/template/src/auth/openIDPURL.tsx +20 -0
  148. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  149. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  150. package/template/src/auth/useIDPAuth.tsx +63 -0
  151. package/template/src/auth/useTokenAuth.tsx +194 -0
  152. package/template/src/components/Chat.tsx +5 -8
  153. package/template/src/components/ChatContext.ts +4 -0
  154. package/template/src/components/ColorConfigure.tsx +0 -1
  155. package/template/src/components/CommonStyles.ts +9 -2
  156. package/template/src/components/Controls.tsx +659 -52
  157. package/template/src/components/DeviceConfigure.tsx +362 -156
  158. package/template/src/components/DeviceContext.tsx +2 -0
  159. package/template/src/components/EventsConfigure.tsx +713 -109
  160. package/template/src/components/GraphQLProvider.tsx +62 -36
  161. package/template/src/components/GridVideo.tsx +23 -13
  162. package/template/src/components/HostControlView.tsx +11 -14
  163. package/template/src/components/JoinPhrase.tsx +0 -1
  164. package/template/src/components/Leftbar.tsx +4 -3
  165. package/template/src/components/Navbar.tsx +110 -42
  166. package/template/src/components/NavbarMobile.tsx +47 -36
  167. package/template/src/components/Navigation.native.tsx +1 -15
  168. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → components/Navigation.sdk.tsx} +17 -3
  169. package/template/src/components/Navigation.tsx +1 -15
  170. package/template/src/components/ParticipantsView.tsx +56 -48
  171. package/template/src/components/PinnedVideo.tsx +188 -114
  172. package/template/src/components/Precall.native.tsx +169 -67
  173. package/template/src/components/Precall.tsx +237 -71
  174. package/template/src/components/RTMConfigure.tsx +167 -55
  175. package/template/src/components/Rightbar.tsx +4 -3
  176. package/template/src/components/Router.electron.ts +1 -0
  177. package/template/src/components/Router.native.ts +1 -0
  178. package/template/src/components/Router.sdk.ts +1 -0
  179. package/template/src/components/Router.ts +1 -0
  180. package/template/src/components/SdkApiContext.tsx +179 -27
  181. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  182. package/template/src/components/SessionContext.tsx +0 -1
  183. package/template/src/components/Settings.tsx +25 -3
  184. package/template/src/components/SettingsView.tsx +44 -9
  185. package/template/src/components/Share.tsx +149 -71
  186. package/template/src/components/StorageContext.tsx +19 -5
  187. package/template/src/components/ToastComponent.tsx +3 -0
  188. package/template/src/components/WhiteboardLayout.tsx +291 -0
  189. package/template/src/components/chat-messages/useChatMessages.tsx +420 -207
  190. package/template/src/components/common/Error.tsx +2 -0
  191. package/template/src/components/common/Logo.tsx +2 -2
  192. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -4
  193. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  194. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  195. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  196. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  197. package/template/src/components/livestream/LiveStreamContext.tsx +262 -177
  198. package/template/src/components/livestream/Types.ts +34 -18
  199. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  200. package/template/src/components/livestream/views/LiveStreamControls.tsx +2 -4
  201. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  202. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  203. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  204. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  205. package/template/src/components/participants/AllAudienceParticipants.tsx +4 -5
  206. package/template/src/components/participants/AllHostParticipants.tsx +5 -6
  207. package/template/src/components/participants/Participant.tsx +40 -9
  208. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  209. package/template/src/components/participants/ScreenshareParticipants.tsx +15 -17
  210. package/template/src/components/participants/UserActionMenuOptions.tsx +157 -49
  211. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  212. package/template/src/components/popups/InvitePopup.tsx +110 -45
  213. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  214. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  215. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  216. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  217. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  218. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  219. package/template/src/components/precall/LocalMute.tsx +69 -45
  220. package/template/src/components/precall/PermissionHelper.tsx +52 -24
  221. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  222. package/template/src/components/precall/VideoFallback.tsx +173 -0
  223. package/template/src/components/precall/VideoPreview.native.tsx +16 -50
  224. package/template/src/components/precall/VideoPreview.tsx +27 -162
  225. package/template/src/components/precall/index.tsx +2 -0
  226. package/template/src/components/precall/joinCallBtn.native.tsx +10 -3
  227. package/template/src/components/precall/joinCallBtn.tsx +11 -2
  228. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  229. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  230. package/template/src/components/precall/meetingTitle.tsx +35 -9
  231. package/template/src/components/precall/selectDevice.tsx +5 -5
  232. package/template/src/components/precall/textInput.tsx +16 -18
  233. package/template/src/components/precall/usePreCall.tsx +14 -4
  234. package/template/src/components/room-info/useRoomInfo.tsx +34 -0
  235. package/template/src/components/useShareLink.tsx +24 -59
  236. package/template/src/components/useUserPreference.tsx +73 -10
  237. package/template/src/components/useVideoCall.tsx +76 -3
  238. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  239. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  240. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  241. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  242. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  243. package/template/src/components/virtual-background/VButils.ts +104 -0
  244. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  245. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  246. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  247. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  248. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  249. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  250. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  251. package/template/src/components/virtual-background/images/index.ts +37 -0
  252. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  253. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  254. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  255. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  256. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  257. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  258. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  259. package/template/src/components/virtual-background/useVB.native.tsx +188 -0
  260. package/template/src/components/virtual-background/useVB.tsx +267 -0
  261. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  262. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  263. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  264. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +137 -0
  265. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +441 -0
  266. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  267. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  268. package/template/src/components/whiteboard/WhiteboardView.native.tsx +109 -0
  269. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  270. package/template/src/components/whiteboard/WhiteboardWidget.tsx +674 -0
  271. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  272. package/template/src/language/default-labels/commonLabels.ts +51 -14
  273. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  274. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  275. package/template/src/language/default-labels/precallScreenLabels.ts +145 -23
  276. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  277. package/template/src/language/default-labels/videoCallScreenLabels.ts +1137 -158
  278. package/template/src/pages/Create.tsx +125 -80
  279. package/template/src/pages/Join.tsx +76 -34
  280. package/template/src/pages/Login.tsx +26 -0
  281. package/template/src/pages/VideoCall.tsx +229 -114
  282. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -7
  283. package/template/src/pages/video-call/ActionSheet.tsx +55 -16
  284. package/template/src/pages/video-call/ActionSheetContent.tsx +366 -291
  285. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  286. package/template/src/pages/video-call/DefaultLayouts.ts +11 -5
  287. package/template/src/pages/video-call/NameWithMicIcon.tsx +17 -9
  288. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  289. package/template/src/pages/video-call/RenderComponent.tsx +12 -3
  290. package/template/src/pages/video-call/SidePanelHeader.tsx +208 -6
  291. package/template/src/pages/video-call/VideoCallMobileView.tsx +140 -106
  292. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  293. package/template/src/pages/video-call/VideoCallScreen.tsx +113 -66
  294. package/template/src/pages/video-call/VideoComponent.tsx +53 -5
  295. package/template/src/pages/video-call/VideoRenderer.tsx +309 -52
  296. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  297. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  298. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  299. package/template/src/pages/video-call/index.ts +2 -0
  300. package/template/src/rtm/RTMEngine.ts +9 -4
  301. package/template/src/rtm-events/constants.ts +20 -0
  302. package/template/src/rtm-events-api/Events.ts +2 -0
  303. package/template/src/rtm-events-api/LocalEvents.ts +8 -0
  304. package/template/src/selection.json +1 -0
  305. package/template/src/subComponents/ChatBubble.tsx +81 -64
  306. package/template/src/subComponents/ChatContainer.tsx +20 -13
  307. package/template/src/subComponents/ChatInput.ios.tsx +11 -2
  308. package/template/src/subComponents/ChatInput.tsx +12 -3
  309. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  310. package/template/src/subComponents/Checkbox.tsx +7 -6
  311. package/template/src/subComponents/CopyJoinInfo.tsx +26 -11
  312. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  313. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  314. package/template/src/subComponents/LayoutIconButton.tsx +30 -8
  315. package/template/src/subComponents/LayoutIconDropdown.tsx +19 -3
  316. package/template/src/subComponents/Loading.tsx +60 -0
  317. package/template/src/subComponents/LocalAudioMute.tsx +116 -30
  318. package/template/src/subComponents/LocalEndCall.tsx +91 -15
  319. package/template/src/subComponents/LocalSwitchCamera.tsx +50 -11
  320. package/template/src/subComponents/LocalVideoMute.tsx +137 -32
  321. package/template/src/subComponents/LogoutButton.tsx +1 -1
  322. package/template/src/subComponents/NetworkQualityPill.tsx +14 -31
  323. package/template/src/subComponents/Recording.tsx +23 -6
  324. package/template/src/subComponents/RemoteAudioMute.tsx +3 -3
  325. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  326. package/template/src/subComponents/RemoteVideoMute.tsx +3 -3
  327. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  328. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  329. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  330. package/template/src/subComponents/SelectDevice.tsx +98 -32
  331. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  332. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  333. package/template/src/subComponents/ToastConfig.tsx +70 -61
  334. package/template/src/subComponents/caption/Caption.tsx +130 -0
  335. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  336. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  337. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  338. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  339. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  340. package/template/src/subComponents/caption/Transcript.tsx +449 -0
  341. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  342. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  343. package/template/src/subComponents/caption/index.ts +3 -0
  344. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  345. package/template/src/subComponents/caption/proto/test.proto +23 -0
  346. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  347. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  348. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  349. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  350. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  351. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +68 -0
  352. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  353. package/template/src/subComponents/caption/utils.ts +125 -0
  354. package/template/src/subComponents/chat/ChatParticipants.tsx +53 -17
  355. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +11 -13
  356. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -9
  357. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +1 -0
  358. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  359. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  360. package/template/src/subComponents/recording/useRecording.tsx +49 -20
  361. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  362. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +29 -10
  363. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +270 -66
  364. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +182 -95
  365. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  366. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  367. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  368. package/template/src/theme/index.ts +9 -0
  369. package/template/src/utils/SdkEvents.ts +14 -0
  370. package/template/src/utils/SdkMethodEvents.ts +23 -3
  371. package/template/src/utils/axiomLogger.ts +117 -0
  372. package/template/src/utils/book.jpg +0 -0
  373. package/template/src/utils/common.tsx +118 -6
  374. package/template/src/utils/endCallEveryOne.ts +7 -0
  375. package/template/src/utils/getCustomRoute.ts +7 -0
  376. package/template/src/utils/index.tsx +23 -0
  377. package/template/src/utils/useActionSheet.tsx +50 -0
  378. package/template/src/utils/useActiveSpeaker.ts +3 -7
  379. package/template/src/utils/useAppState.ts +17 -0
  380. package/template/src/utils/useAsyncEffect.ts +138 -0
  381. package/template/src/utils/useCreateRoom.ts +8 -12
  382. package/template/src/utils/useDisableButton.tsx +37 -0
  383. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  384. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  385. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  386. package/template/src/utils/useIsLocalUserSpeaking.ts +98 -0
  387. package/template/src/utils/useJoinRoom.ts +97 -36
  388. package/template/src/utils/useMuteToggleLocal.ts +114 -96
  389. package/template/src/utils/useString.ts +13 -3
  390. package/template/static.d.ts +42 -0
  391. package/template/tsconfig_rsdk_index.json +3 -3
  392. package/template/tsconfig_wsdk_index.json +1 -1
  393. package/template/web/index.html +20 -0
  394. package/template/webpack.commons.js +21 -10
  395. package/template/webpack.web.config.js +7 -3
  396. package/template/_buckconfig +0 -6
  397. package/template/_gitattributes +0 -1
  398. package/template/android/app/_BUCK +0 -55
  399. package/template/android/app/build_defs.bzl +0 -19
  400. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  401. package/template/src/components/OAuth.electron.tsx +0 -41
  402. package/template/src/components/OAuth.native.tsx +0 -55
  403. package/template/src/components/OAuth.tsx +0 -30
  404. package/template/src/components/OAuthConfig.ts +0 -77
  405. package/template/src/components/Settings.native.tsx +0 -21
  406. package/template/src/components/StoreToken.tsx +0 -39
@@ -9,13 +9,15 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useContext} from 'react';
12
+ import React, {useContext, useEffect, useRef} from 'react';
13
13
  import {
14
14
  ToggleState,
15
15
  PermissionState,
16
16
  ImageIcon as UIKitImageIcon,
17
17
  ClientRole,
18
18
  PropsContext,
19
+ RtcContext,
20
+ DispatchContext,
19
21
  } from '../../agora-rn-uikit';
20
22
  import useMuteToggleLocal, {MUTE_LOCAL_TYPE} from '../utils/useMuteToggleLocal';
21
23
  import Styles from '../components/styles';
@@ -25,8 +27,24 @@ import IconButton, {IconButtonProps} from '../atoms/IconButton';
25
27
  import ThemeConfig from '../theme';
26
28
  import {ImageIconProps} from '../atoms/ImageIcon';
27
29
  import useIsHandRaised from '../utils/useIsHandRaised';
30
+ import {useScreenshare} from './screenshare/useScreenshare';
31
+ import {isAndroid, isWebInternal} from '../utils/common';
32
+ import {isIOS} from '../utils/common';
33
+ import {useVideoCall} from '../components/useVideoCall';
28
34
  import {useToolbarMenu} from '../utils/useMenu';
29
35
  import ToolbarMenuItem from '../atoms/ToolbarMenuItem';
36
+ import {useActionSheet} from '../utils/useActionSheet';
37
+ import {isMobileUA} from '../utils/common';
38
+ import {useToolbar} from '../utils/useToolbar';
39
+ import {
40
+ I18nDeviceStatus,
41
+ livestreamingCameraTooltipText,
42
+ toolbarItemCameraText,
43
+ toolbarItemCameraTooltipText,
44
+ } from '../language/default-labels/videoCallScreenLabels';
45
+ import events from '../rtm-events-api';
46
+ import {controlMessageEnum} from '../components/ChatContext';
47
+ import {MUTE_REMOTE_TYPE} from '../utils/useRemoteMute';
30
48
 
31
49
  /**
32
50
  * A component to mute / unmute the local video
@@ -34,52 +52,105 @@ import ToolbarMenuItem from '../atoms/ToolbarMenuItem';
34
52
  export interface LocalVideoMuteProps {
35
53
  plainIconHoverEffect?: boolean;
36
54
  showToolTip?: boolean;
37
- showLabel?: boolean;
38
55
  render?: (onPress: () => void, isVideoEnabled: boolean) => JSX.Element;
39
56
  disabled?: boolean;
40
- isOnActionSheet?: boolean;
41
57
  iconProps?: (
42
58
  isVideoEnabled: boolean,
43
59
  isPermissionDenied: boolean,
44
60
  ) => Partial<ImageIconProps>;
45
61
  showWarningIcon?: boolean;
46
- isMobileView?: boolean;
47
62
  }
48
63
 
49
64
  function LocalVideoMute(props: LocalVideoMuteProps) {
65
+ const {dispatch} = useContext(DispatchContext);
66
+ const {RtcEngineUnsafe} = useContext(RtcContext);
67
+
50
68
  const {rtcProps} = useContext(PropsContext);
69
+ const {isScreenshareActive} = useScreenshare();
70
+ const {setShowStopScreenSharePopup} = useVideoCall();
51
71
  const {isToolbarMenuItem} = useToolbarMenu();
52
72
  const {
53
73
  data: {isHost},
54
74
  } = useRoomInfo();
75
+
76
+ const isHostRef = useRef(isHost);
77
+ useEffect(() => {
78
+ isHostRef.current = isHost;
79
+ }, [isHost]);
80
+
55
81
  const local = useLocalUserInfo();
56
82
  const isHandRaised = useIsHandRaised();
57
83
  const localMute = useMuteToggleLocal();
84
+ const {showToolTip = false, disabled = false, showWarningIcon = true} = props;
85
+
86
+ useEffect(() => {
87
+ events.on(controlMessageEnum.disableButton, async ({payload}) => {
88
+ try {
89
+ const data = JSON.parse(payload);
90
+ if (
91
+ data &&
92
+ data?.button === MUTE_REMOTE_TYPE.video &&
93
+ !isHostRef.current
94
+ ) {
95
+ if (data?.action === true) {
96
+ isWebInternal()
97
+ ? await RtcEngineUnsafe.muteLocalVideoStream(true)
98
+ : //@ts-ignore
99
+ await RtcEngineUnsafe.enableLocalVideo(false);
100
+ dispatch({
101
+ type: 'LocalMuteVideo',
102
+ value: [0, true],
103
+ });
104
+ } else {
105
+ dispatch({
106
+ type: 'LocalMuteVideo',
107
+ value: [0, false],
108
+ });
109
+ }
110
+ }
111
+ } catch (error) {
112
+ console.log('debugging error on disableButton');
113
+ }
114
+ });
115
+ }, []);
116
+
117
+ const {isOnActionSheet, isOnFirstRow, showLabel} = useActionSheet();
118
+ const {position} = useToolbar();
58
119
  const {
59
- showToolTip = false,
60
- showLabel = $config.ICON_TEXT,
61
- disabled = false,
62
- isOnActionSheet = false,
63
- showWarningIcon = true,
64
- isMobileView = false,
65
- } = props;
66
- //commented for v1 release
67
- //const videoLabel = useString('toggleVideoButton')();
120
+ rtcProps: {callActive},
121
+ } = useContext(PropsContext);
122
+
123
+ const videoButtonLabel = useString<I18nDeviceStatus>(toolbarItemCameraText);
124
+ const videoButtonTooltip = useString<I18nDeviceStatus>(
125
+ toolbarItemCameraTooltipText,
126
+ );
68
127
 
128
+ const lstooltip = useString<boolean>(livestreamingCameraTooltipText);
69
129
  const onPress = () => {
70
- localMute(MUTE_LOCAL_TYPE.video);
130
+ //if screensharing is going on native - to turn on video screenshare should be turn off
131
+ //show confirm popup to stop the screenshare
132
+ if ((isAndroid() || isIOS()) && isScreenshareActive) {
133
+ setShowStopScreenSharePopup(true);
134
+ } else {
135
+ localMute(MUTE_LOCAL_TYPE.video);
136
+ }
71
137
  };
72
- const isVideoEnabled = local.video === ToggleState.enabled;
138
+ //native screen share uses same local uid to publish the screenshare steam
139
+ //so if screenshare active on native then its means local video is turned off
140
+ const isVideoEnabled =
141
+ (isAndroid() || isIOS()) && isScreenshareActive
142
+ ? false
143
+ : local.video === ToggleState.enabled;
73
144
 
74
145
  const permissionDenied =
75
146
  local.permissionStatus === PermissionState.REJECTED ||
76
147
  local.permissionStatus === PermissionState.GRANTED_FOR_MIC_ONLY;
77
148
 
78
149
  const videoLabel = permissionDenied
79
- ? 'Video'
150
+ ? videoButtonLabel(I18nDeviceStatus.PERMISSION_DENIED)
80
151
  : isVideoEnabled
81
- ? 'Video On'
82
- : 'Video Off';
152
+ ? videoButtonLabel(I18nDeviceStatus.ON)
153
+ : videoButtonLabel(I18nDeviceStatus.OFF);
83
154
 
84
155
  let iconProps: IconButtonProps['iconProps'] = {
85
156
  showWarningIcon: permissionDenied && showWarningIcon ? true : false,
@@ -111,21 +182,55 @@ function LocalVideoMute(props: LocalVideoMuteProps) {
111
182
  onPress,
112
183
  iconProps,
113
184
  btnTextProps: {
114
- text: showLabel ? videoLabel : '',
185
+ text: showLabel && callActive && !isMobileUA() ? videoLabel : '',
115
186
  textColor: $config.FONT_COLOR,
116
187
  },
117
188
  disabled: permissionDenied || disabled ? true : false,
118
189
  };
119
190
 
191
+ if (isOnActionSheet) {
192
+ // iconButtonProps.containerStyle = {
193
+ // backgroundColor: $config.CARD_LAYER_2_COLOR,
194
+ // width: 52,
195
+ // height: 52,
196
+ // borderRadius: 26,
197
+ // justifyContent: 'center',
198
+ // alignItems: 'center',
199
+ // };
200
+ const isAudience = rtcProps?.role == ClientRole.Audience;
201
+ const isBroadCasting = rtcProps?.role == ClientRole.Broadcaster;
202
+
203
+ iconButtonProps.disabled =
204
+ permissionDenied || ($config.EVENT_MODE && isAudience && !isBroadCasting)
205
+ ? true
206
+ : false;
207
+ iconButtonProps.btnTextProps.textStyle = {
208
+ color: $config.FONT_COLOR,
209
+ marginTop: 8,
210
+ fontSize: 12,
211
+ fontWeight: '400',
212
+ fontFamily: 'Source Sans Pro',
213
+ textAlign: 'center',
214
+ };
215
+ }
216
+
120
217
  iconButtonProps.isOnActionSheet = isOnActionSheet;
121
- if (!isMobileView) {
218
+ if (!isOnActionSheet) {
122
219
  iconButtonProps.toolTipMessage = showToolTip
123
220
  ? permissionDenied
124
- ? 'Give Permissions'
221
+ ? videoButtonTooltip(I18nDeviceStatus.PERMISSION_DENIED)
125
222
  : isVideoEnabled
126
- ? 'Disable Camera'
127
- : 'Enable Camera'
223
+ ? videoButtonTooltip(I18nDeviceStatus.ON)
224
+ : videoButtonTooltip(I18nDeviceStatus.OFF)
128
225
  : '';
226
+ if (
227
+ //precall mobile/mobile web UI - mute button should not show the label
228
+ (!callActive && isMobileUA()) ||
229
+ //sidepanel mute button should not show the label
230
+ (callActive && !position)
231
+ ) {
232
+ iconButtonProps.btnTextProps.text = '';
233
+ }
129
234
  }
130
235
 
131
236
  if (
@@ -137,21 +242,21 @@ function LocalVideoMute(props: LocalVideoMuteProps) {
137
242
  }
138
243
 
139
244
  if (
140
- rtcProps.role == ClientRole.Audience &&
141
- $config.EVENT_MODE &&
142
- $config.RAISE_HAND &&
143
- !isHost
245
+ (rtcProps.role == ClientRole.Audience &&
246
+ $config.EVENT_MODE &&
247
+ $config.RAISE_HAND &&
248
+ !isHost) ||
249
+ local.localVideoForceDisabled
144
250
  ) {
145
251
  iconButtonProps.iconProps = {
146
252
  ...iconButtonProps.iconProps,
147
253
  name: 'video-off',
148
254
  tintColor: $config.SEMANTIC_NEUTRAL,
149
255
  };
150
- iconButtonProps.toolTipMessage = showToolTip
151
- ? isHandRaised(local.uid)
152
- ? 'Waiting for host to appove the request'
153
- : 'Raise Hand in order to turn video on'
154
- : '';
256
+ iconButtonProps.toolTipMessage =
257
+ showToolTip && !local.localVideoForceDisabled
258
+ ? lstooltip(isHandRaised(local.uid))
259
+ : '';
155
260
  iconButtonProps.disabled = true;
156
261
  }
157
262
  return props?.render ? (
@@ -54,7 +54,7 @@ const LogoutButton = () => {
54
54
  };
55
55
 
56
56
  const login = () => {
57
- history.push('/authenticate');
57
+ history.push('/login');
58
58
  };
59
59
 
60
60
  return (
@@ -20,6 +20,10 @@ import ImageIcon from '../atoms/ImageIcon';
20
20
  import hexadecimalTransparency from '../utils/hexadecimalTransparency';
21
21
  import {useLayout, useContent} from 'customization-api';
22
22
  import {getGridLayoutName} from '../pages/video-call/DefaultLayouts';
23
+ import {
24
+ NetworkQualities,
25
+ videoTileNetworkQuailtyLabel,
26
+ } from '../language/default-labels/videoCallScreenLabels';
23
27
 
24
28
  /**
25
29
  *
@@ -38,40 +42,19 @@ const NetworkQualityPill = (props: NetworkQualityPillProps) => {
38
42
  const {uid} = props;
39
43
  const {defaultContent} = useContent();
40
44
  const [networkTextVisible, setNetworkTextVisible] = useState(false);
41
- //commented for v1 release
42
- //const getLabel = useString<NetworkQualities>('networkQualityLabel');
43
- const getLabel = (quality: string) => {
44
- switch (quality) {
45
- case 'unknown':
46
- return 'Network Unsupported';
47
- case 'excellent':
48
- return 'Excellent Network';
49
- case 'good':
50
- return 'Good Network';
51
- case 'bad':
52
- return 'Bad Network';
53
- case 'veryBad':
54
- return 'Very Bad Network';
55
- case 'unpublished':
56
- return 'Network Unpublished';
57
- case 'loading':
58
- return 'Network Loading';
59
- default:
60
- return 'Loading';
61
- }
62
- };
45
+ const getLabel = useString<NetworkQualities>(videoTileNetworkQuailtyLabel);
46
+
63
47
  const networkQualityStat = useContext(NetworkQualityContext);
64
48
  const networkStat = networkQualityStat[uid]
65
49
  ? networkQualityStat[uid]
66
50
  : defaultContent[uid]?.audio || defaultContent[uid]?.video
67
51
  ? 8
68
52
  : 7;
69
- const {activeUids} = useContent();
53
+ const {activeUids, customContent} = useContent();
54
+ const activeUidsLen = activeUids?.filter(i => !customContent[i])?.length;
70
55
  const {currentLayout} = useLayout();
71
56
  const reduceSpace =
72
- isMobileUA() &&
73
- activeUids.length > 4 &&
74
- currentLayout === getGridLayoutName();
57
+ isMobileUA() && activeUidsLen > 4 && currentLayout === getGridLayoutName();
75
58
  return (
76
59
  <View
77
60
  testID="videocall-networkpill"
@@ -91,7 +74,7 @@ const NetworkQualityPill = (props: NetworkQualityPillProps) => {
91
74
  networkTextVisible,
92
75
  setNetworkTextVisible,
93
76
  reduceSpace,
94
- activeUids,
77
+ activeUidsLen,
95
78
  }}>
96
79
  <View>
97
80
  <ImageIcon
@@ -121,7 +104,7 @@ const PlatformSpecificWrapper = ({
121
104
  setNetworkTextVisible,
122
105
  children,
123
106
  reduceSpace,
124
- activeUids,
107
+ activeUidsLen,
125
108
  }: any) => {
126
109
  return !isWebInternal() ? (
127
110
  <Pressable
@@ -130,7 +113,7 @@ const PlatformSpecificWrapper = ({
130
113
  display: 'flex',
131
114
  flexDirection: 'row',
132
115
  alignItems: 'center',
133
- padding: reduceSpace && activeUids.length > 12 ? 2 : 8,
116
+ padding: reduceSpace && activeUidsLen > 12 ? 2 : 8,
134
117
  }}
135
118
  onPress={() => {
136
119
  setNetworkTextVisible((visible: boolean) => !visible);
@@ -144,9 +127,9 @@ const PlatformSpecificWrapper = ({
144
127
  display: 'flex',
145
128
  flexDirection: 'row',
146
129
  alignItems: 'center',
147
- padding: reduceSpace && activeUids.length > 12 ? 2 : 8,
130
+ padding: reduceSpace && activeUidsLen > 12 ? 2 : 8,
148
131
  }}
149
- onClick={(e) => {
132
+ onClick={e => {
150
133
  e.preventDefault();
151
134
  setNetworkTextVisible((visible: boolean) => !visible);
152
135
  }}
@@ -15,21 +15,20 @@ import IconButton, {IconButtonProps} from '../atoms/IconButton';
15
15
  import {useVideoCall} from '../components/useVideoCall';
16
16
  import {useToolbarMenu} from '../utils/useMenu';
17
17
  import ToolbarMenuItem from '../atoms/ToolbarMenuItem';
18
+ import {useActionSheet} from '../utils/useActionSheet';
19
+ import {useString} from '../utils/useString';
20
+ import {toolbarItemRecordingText} from '../language/default-labels/videoCallScreenLabels';
18
21
 
19
22
  export interface RecordingButtonProps {
20
23
  showLabel?: boolean;
21
24
  render?: (onPress: () => void, isRecordingActive: boolean) => JSX.Element;
22
- isOnActionSheet?: boolean;
23
25
  }
24
26
 
25
27
  const Recording = (props: RecordingButtonProps) => {
26
28
  const {isToolbarMenuItem} = useToolbarMenu();
27
29
  const {startRecording, inProgress, isRecordingActive} = useRecording();
28
- //commented for v1 release
29
- //const recordingButton = useString<boolean>('recordingButton');
30
- const recordingButton = (recording: boolean) =>
31
- recording ? 'Stop Rec' : 'Record';
32
- const {showLabel = $config.ICON_TEXT, isOnActionSheet = false} = props;
30
+ const recordingButton = useString<boolean>(toolbarItemRecordingText);
31
+ const {isOnActionSheet, showLabel} = useActionSheet();
33
32
  const {setShowStopRecordingPopup} = useVideoCall();
34
33
  const onPress = () => {
35
34
  if (!isRecordingActive) {
@@ -54,6 +53,24 @@ const Recording = (props: RecordingButtonProps) => {
54
53
  containerStyle: inProgress ? {opacity: 0.6} : {},
55
54
  };
56
55
 
56
+ if (isOnActionSheet) {
57
+ // iconButtonProps.containerStyle = {
58
+ // backgroundColor: $config.CARD_LAYER_2_COLOR,
59
+ // width: 52,
60
+ // height: 52,
61
+ // borderRadius: 26,
62
+ // justifyContent: 'center',
63
+ // alignItems: 'center',
64
+ // };
65
+ iconButtonProps.btnTextProps.textStyle = {
66
+ color: $config.FONT_COLOR,
67
+ marginTop: 8,
68
+ fontSize: 12,
69
+ fontWeight: '400',
70
+ fontFamily: 'Source Sans Pro',
71
+ textAlign: 'center',
72
+ };
73
+ }
57
74
  iconButtonProps.isOnActionSheet = isOnActionSheet;
58
75
 
59
76
  return props?.render ? (
@@ -18,7 +18,7 @@ import Styles from '../components/styles';
18
18
  import useRemoteMute, {MUTE_REMOTE_TYPE} from '../utils/useRemoteMute';
19
19
  import IconButton from '../atoms/IconButton';
20
20
  import RemoteMutePopup from './RemoteMutePopup';
21
- import {useContent} from 'customization-api';
21
+ import {I18nMuteType, useContent} from 'customization-api';
22
22
  import {calculatePosition} from '../utils/common';
23
23
  import useRemoteRequest, {REQUEST_REMOTE_TYPE} from '../utils/useRemoteRequest';
24
24
  export interface RemoteAudioMuteProps {
@@ -61,7 +61,7 @@ const RemoteAudioMute = (props: RemoteAudioMuteProps) => {
61
61
  <>
62
62
  <RemoteMutePopup
63
63
  action={props?.audio ? 'mute' : 'request'}
64
- type="audio"
64
+ type={I18nMuteType.audio}
65
65
  actionMenuVisible={showModal}
66
66
  setActionMenuVisible={setShowModal}
67
67
  name={defaultContent[props.uid]?.name}
@@ -69,7 +69,7 @@ const RemoteAudioMute = (props: RemoteAudioMuteProps) => {
69
69
  onMutePress={onPress}
70
70
  />
71
71
  <IconButton
72
- setRef={(ref) => (btnRef.current = ref)}
72
+ setRef={ref => (btnRef.current = ref)}
73
73
  disabled={!isHost}
74
74
  onPress={() => {
75
75
  btnRef?.current?.measure(
@@ -13,8 +13,21 @@ import Spacer from '../atoms/Spacer';
13
13
  import PlatformWrapper from '../utils/PlatformWrapper';
14
14
  import {isMobileOrTablet} from 'customization-api';
15
15
  import hexadecimalTransparency from '../utils/hexadecimalTransparency';
16
+ import {useString} from '../utils/useString';
17
+ import {
18
+ I18nMuteConfirmation,
19
+ I18nMuteType,
20
+ I18nRequestConfirmation,
21
+ muteAllConfirmationPopoverContent,
22
+ muteAllConfirmationPopoverPrimaryBtnText,
23
+ muteConfirmationPopoverContent,
24
+ muteConfirmationPopoverPrimaryBtnText,
25
+ requestConfirmationPopoverContent,
26
+ requestConfirmationPopoverPrimaryBtnText,
27
+ } from '../language/default-labels/videoCallScreenLabels';
28
+ import {cancelText} from '../language/default-labels/commonLabels';
16
29
 
17
- export interface ActionMenuProps {
30
+ export interface RemoteMutePopupProps {
18
31
  actionMenuVisible: boolean;
19
32
  setActionMenuVisible: React.Dispatch<SetStateAction<boolean>>;
20
33
  modalPosition?: {
@@ -25,11 +38,26 @@ export interface ActionMenuProps {
25
38
  };
26
39
  name: string;
27
40
  onMutePress: () => void;
28
- type: 'video' | 'audio';
41
+ type: I18nMuteType;
29
42
  action?: 'mute' | 'request';
30
43
  }
31
44
 
32
- const RemoteMutePopup = (props: ActionMenuProps) => {
45
+ const RemoteMutePopup = (props: RemoteMutePopupProps) => {
46
+ const cancelLabel = useString(cancelText)();
47
+ const muteLabel = useString(muteConfirmationPopoverPrimaryBtnText)();
48
+ const muteAllLabel = useString(muteAllConfirmationPopoverPrimaryBtnText)();
49
+ const requestLabel = useString(requestConfirmationPopoverPrimaryBtnText)();
50
+
51
+ const muteAllConfirmation = useString<I18nMuteType>(
52
+ muteAllConfirmationPopoverContent,
53
+ );
54
+ const requestConfirmation = useString<I18nRequestConfirmation>(
55
+ requestConfirmationPopoverContent,
56
+ );
57
+ const muteConfirmation = useString<I18nMuteConfirmation>(
58
+ muteConfirmationPopoverContent,
59
+ );
60
+
33
61
  const {height} = useWindowDimensions();
34
62
  const {
35
63
  actionMenuVisible,
@@ -38,22 +66,35 @@ const RemoteMutePopup = (props: ActionMenuProps) => {
38
66
  action = 'mute',
39
67
  } = props;
40
68
  let message = '';
69
+ let btnLabel = '';
41
70
 
42
71
  if (props.name) {
43
72
  //mute action
44
73
  if (action === 'mute') {
45
- message = `Mute ${props.name}'s ${props.type} for everyone on the call? Only ${props.name} can unmute themselves.`;
74
+ message = muteConfirmation({
75
+ name: props?.name,
76
+ type: props.type,
77
+ });
78
+ btnLabel = muteLabel;
79
+ //message = `Mute ${props.name}'s ${props.type} for everyone on the call? Only ${props.name} can unmute themselves.`;
46
80
  }
47
81
  //request action
48
82
  else {
49
- if (props?.type === 'audio') {
50
- message = `Request ${props.name} to turn on their microphone?`;
51
- } else {
52
- message = `Request ${props.name} to turn on their camera?`;
53
- }
83
+ message = requestConfirmation({
84
+ name: props?.name,
85
+ type: props?.type,
86
+ });
87
+ btnLabel = requestLabel;
88
+ // if (props?.type === 'audio') {
89
+ // //message = `Request ${props.name} to turn on their microphone?`;
90
+ // } else {
91
+ // //message = `Request ${props.name} to turn on their camera?`;
92
+ // }
54
93
  }
55
94
  } else {
56
- message = `Mute everyone's ${props.type} on the call?`;
95
+ message = muteAllConfirmation(props?.type);
96
+ btnLabel = muteAllLabel;
97
+ //message = `Mute everyone's ${props.type} on the call?`;
57
98
  }
58
99
 
59
100
  return (
@@ -95,7 +136,9 @@ const RemoteMutePopup = (props: ActionMenuProps) => {
95
136
  <TouchableOpacity
96
137
  style={isHovered ? styles.onHoverBtnStyle : {}}
97
138
  onPress={() => props.setActionMenuVisible(false)}>
98
- <Text style={styles.btnText}>Cancel</Text>
139
+ <Text style={styles.btnText}>
140
+ {cancelLabel?.toLowerCase()}
141
+ </Text>
99
142
  </TouchableOpacity>
100
143
  );
101
144
  }}
@@ -107,9 +150,7 @@ const RemoteMutePopup = (props: ActionMenuProps) => {
107
150
  <TouchableOpacity
108
151
  style={isHovered ? styles.onHoverBtnStyle : {}}
109
152
  onPress={() => props.onMutePress()}>
110
- <Text style={styles.btnText}>
111
- {action === 'mute' ? 'Mute' : 'Request'}
112
- </Text>
153
+ <Text style={styles.btnText}>{btnLabel}</Text>
113
154
  </TouchableOpacity>
114
155
  );
115
156
  }}
@@ -15,7 +15,7 @@ import {UidType} from '../../agora-rn-uikit';
15
15
  import useRemoteMute, {MUTE_REMOTE_TYPE} from '../utils/useRemoteMute';
16
16
  import IconButton from '../atoms/IconButton';
17
17
  import RemoteMutePopup from './RemoteMutePopup';
18
- import {useContent} from 'customization-api';
18
+ import {I18nMuteType, useContent} from 'customization-api';
19
19
  import {calculatePosition} from '../utils/common';
20
20
  import useRemoteRequest, {REQUEST_REMOTE_TYPE} from '../utils/useRemoteRequest';
21
21
  /**
@@ -48,7 +48,7 @@ const RemoteVideoMute = (props: RemoteVideoMuteProps) => {
48
48
  <>
49
49
  <RemoteMutePopup
50
50
  action={props?.video ? 'mute' : 'request'}
51
- type="video"
51
+ type={I18nMuteType.video}
52
52
  actionMenuVisible={showModal}
53
53
  setActionMenuVisible={setShowModal}
54
54
  name={defaultContent[props.uid]?.name}
@@ -61,7 +61,7 @@ const RemoteVideoMute = (props: RemoteVideoMuteProps) => {
61
61
  backgroundColor: $config.ICON_BG_COLOR,
62
62
  borderRadius: 20,
63
63
  }}
64
- setRef={(ref) => (btnRef.current = ref)}
64
+ setRef={ref => (btnRef.current = ref)}
65
65
  disabled={!isHost}
66
66
  onPress={() => {
67
67
  btnRef?.current?.measure(
@@ -6,6 +6,13 @@ import TertiaryButton from '../atoms/TertiaryButton';
6
6
  import PrimaryButton from '../atoms/PrimaryButton';
7
7
  import ThemeConfig from '../theme';
8
8
  import {useIsDesktop} from '../utils/common';
9
+ import {useString} from '../utils/useString';
10
+ import {
11
+ removeUserFromRoomPopupHeading,
12
+ removeUserFromRoomPopupPrimaryBtnText,
13
+ removeUserFromRoomPopupSubHeading,
14
+ } from '../language/default-labels/videoCallScreenLabels';
15
+ import {cancelText} from '../language/default-labels/commonLabels';
9
16
 
10
17
  interface RemoveMeetingPopupProps {
11
18
  modalVisible: boolean;
@@ -15,20 +22,26 @@ interface RemoveMeetingPopupProps {
15
22
  }
16
23
  const RemoveMeetingPopup = (props: RemoveMeetingPopupProps) => {
17
24
  const isDesktop = useIsDesktop()('popup');
18
- const removeMeetingLabelHeading = 'Remove ' + props.username + '?';
19
- const removeMeetingLabelSubHeading = `Once removed, ${props.username} will still be able to rejoin the room later.`;
25
+ const removeMeetingLabelHeading = useString(removeUserFromRoomPopupHeading);
26
+ const removeMeetingLabelSubHeading = useString(
27
+ removeUserFromRoomPopupSubHeading,
28
+ );
20
29
 
21
- const cancelBtnLabel = 'CANCEL';
22
- const removeBtnLabel = 'REMOVE';
30
+ const cancelBtnLabel = useString(cancelText)();
31
+ const removeBtnLabel = useString(removeUserFromRoomPopupPrimaryBtnText)();
23
32
  return (
24
33
  <Popup
25
34
  modalVisible={props.modalVisible}
26
35
  setModalVisible={props.setModalVisible}
27
36
  showCloseIcon={false}
28
37
  contentContainerStyle={styles.contentContainer}>
29
- <Text style={styles.heading}>{removeMeetingLabelHeading}</Text>
38
+ <Text style={styles.heading}>
39
+ {removeMeetingLabelHeading(props?.username)}
40
+ </Text>
30
41
  <Spacer size={8} />
31
- <Text style={styles.subHeading}>{removeMeetingLabelSubHeading}</Text>
42
+ <Text style={styles.subHeading}>
43
+ {removeMeetingLabelSubHeading(props?.username)}
44
+ </Text>
32
45
  <Spacer size={32} />
33
46
  <View style={isDesktop ? styles.btnContainer : styles.btnContainerMobile}>
34
47
  <View style={isDesktop && {flex: 1}}>
@@ -6,6 +6,13 @@ import TertiaryButton from '../atoms/TertiaryButton';
6
6
  import PrimaryButton from '../atoms/PrimaryButton';
7
7
  import ThemeConfig from '../theme';
8
8
  import {useIsDesktop} from '../utils/common';
9
+ import {useString} from '../utils/useString';
10
+ import {
11
+ removeScreenshareFromRoomPopupHeading,
12
+ removeScreenshareFromRoomPopupPrimaryBtnText,
13
+ removeScreenshareFromRoomPopupSubHeading,
14
+ } from '../language/default-labels/videoCallScreenLabels';
15
+ import {cancelText} from '../language/default-labels/commonLabels';
9
16
 
10
17
  interface RemoveScreensharePopupProps {
11
18
  modalVisible: boolean;
@@ -15,11 +22,17 @@ interface RemoveScreensharePopupProps {
15
22
  }
16
23
  const RemoveScreensharePopup = (props: RemoveScreensharePopupProps) => {
17
24
  const isDesktop = useIsDesktop()('popup');
18
- const removeMeetingLabelHeading = 'Remove Screenshare?';
19
- const removeMeetingLabelSubHeading = `Once removed, ${props.username} will still be able to screen share later.`;
25
+ const removeMeetingLabelHeading = useString(
26
+ removeScreenshareFromRoomPopupHeading,
27
+ )();
28
+ const removeMeetingLabelSubHeading = useString(
29
+ removeScreenshareFromRoomPopupSubHeading,
30
+ );
20
31
 
21
- const cancelBtnLabel = 'CANCEL';
22
- const removeBtnLabel = 'REMOVE';
32
+ const cancelBtnLabel = useString(cancelText)();
33
+ const removeBtnLabel = useString(
34
+ removeScreenshareFromRoomPopupPrimaryBtnText,
35
+ )();
23
36
  return (
24
37
  <Popup
25
38
  modalVisible={props.modalVisible}
@@ -28,7 +41,9 @@ const RemoveScreensharePopup = (props: RemoveScreensharePopupProps) => {
28
41
  contentContainerStyle={styles.contentContainer}>
29
42
  <Text style={styles.heading}>{removeMeetingLabelHeading}</Text>
30
43
  <Spacer size={8} />
31
- <Text style={styles.subHeading}>{removeMeetingLabelSubHeading}</Text>
44
+ <Text style={styles.subHeading}>
45
+ {removeMeetingLabelSubHeading(props?.username)}
46
+ </Text>
32
47
  <Spacer size={32} />
33
48
  <View style={isDesktop ? styles.btnContainer : styles.btnContainerMobile}>
34
49
  <View style={isDesktop && {flex: 1}}>