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

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 +50 -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 +106 -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 +126 -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} 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,20 +52,49 @@ 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
+
68
+ useEffect(() => {
69
+ events.on(controlMessageEnum.disableButton, async ({payload}) => {
70
+ try {
71
+ const data = JSON.parse(payload);
72
+ if (data && data?.button === MUTE_REMOTE_TYPE.video) {
73
+ if (data?.action === true) {
74
+ isWebInternal()
75
+ ? await RtcEngineUnsafe.muteLocalVideoStream(true)
76
+ : //@ts-ignore
77
+ await RtcEngineUnsafe.enableLocalVideo(false);
78
+ dispatch({
79
+ type: 'LocalMuteVideo',
80
+ value: [0, true],
81
+ });
82
+ } else {
83
+ dispatch({
84
+ type: 'LocalMuteVideo',
85
+ value: [0, false],
86
+ });
87
+ }
88
+ }
89
+ } catch (error) {
90
+ console.log('debugging error on disableButton');
91
+ }
92
+ });
93
+ }, []);
94
+
50
95
  const {rtcProps} = useContext(PropsContext);
96
+ const {isScreenshareActive} = useScreenshare();
97
+ const {setShowStopScreenSharePopup} = useVideoCall();
51
98
  const {isToolbarMenuItem} = useToolbarMenu();
52
99
  const {
53
100
  data: {isHost},
@@ -55,31 +102,44 @@ function LocalVideoMute(props: LocalVideoMuteProps) {
55
102
  const local = useLocalUserInfo();
56
103
  const isHandRaised = useIsHandRaised();
57
104
  const localMute = useMuteToggleLocal();
105
+ const {showToolTip = false, disabled = false, showWarningIcon = true} = props;
106
+ const {isOnActionSheet, isOnFirstRow, showLabel} = useActionSheet();
107
+ const {position} = useToolbar();
58
108
  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')();
109
+ rtcProps: {callActive},
110
+ } = useContext(PropsContext);
68
111
 
112
+ const videoButtonLabel = useString<I18nDeviceStatus>(toolbarItemCameraText);
113
+ const videoButtonTooltip = useString<I18nDeviceStatus>(
114
+ toolbarItemCameraTooltipText,
115
+ );
116
+
117
+ const lstooltip = useString<boolean>(livestreamingCameraTooltipText);
69
118
  const onPress = () => {
70
- localMute(MUTE_LOCAL_TYPE.video);
119
+ //if screensharing is going on native - to turn on video screenshare should be turn off
120
+ //show confirm popup to stop the screenshare
121
+ if ((isAndroid() || isIOS()) && isScreenshareActive) {
122
+ setShowStopScreenSharePopup(true);
123
+ } else {
124
+ localMute(MUTE_LOCAL_TYPE.video);
125
+ }
71
126
  };
72
- const isVideoEnabled = local.video === ToggleState.enabled;
127
+ //native screen share uses same local uid to publish the screenshare steam
128
+ //so if screenshare active on native then its means local video is turned off
129
+ const isVideoEnabled =
130
+ (isAndroid() || isIOS()) && isScreenshareActive
131
+ ? false
132
+ : local.video === ToggleState.enabled;
73
133
 
74
134
  const permissionDenied =
75
135
  local.permissionStatus === PermissionState.REJECTED ||
76
136
  local.permissionStatus === PermissionState.GRANTED_FOR_MIC_ONLY;
77
137
 
78
138
  const videoLabel = permissionDenied
79
- ? 'Video'
139
+ ? videoButtonLabel(I18nDeviceStatus.PERMISSION_DENIED)
80
140
  : isVideoEnabled
81
- ? 'Video On'
82
- : 'Video Off';
141
+ ? videoButtonLabel(I18nDeviceStatus.ON)
142
+ : videoButtonLabel(I18nDeviceStatus.OFF);
83
143
 
84
144
  let iconProps: IconButtonProps['iconProps'] = {
85
145
  showWarningIcon: permissionDenied && showWarningIcon ? true : false,
@@ -111,21 +171,55 @@ function LocalVideoMute(props: LocalVideoMuteProps) {
111
171
  onPress,
112
172
  iconProps,
113
173
  btnTextProps: {
114
- text: showLabel ? videoLabel : '',
174
+ text: showLabel && callActive && !isMobileUA() ? videoLabel : '',
115
175
  textColor: $config.FONT_COLOR,
116
176
  },
117
177
  disabled: permissionDenied || disabled ? true : false,
118
178
  };
119
179
 
180
+ if (isOnActionSheet) {
181
+ // iconButtonProps.containerStyle = {
182
+ // backgroundColor: $config.CARD_LAYER_2_COLOR,
183
+ // width: 52,
184
+ // height: 52,
185
+ // borderRadius: 26,
186
+ // justifyContent: 'center',
187
+ // alignItems: 'center',
188
+ // };
189
+ const isAudience = rtcProps?.role == ClientRole.Audience;
190
+ const isBroadCasting = rtcProps?.role == ClientRole.Broadcaster;
191
+
192
+ iconButtonProps.disabled =
193
+ permissionDenied || ($config.EVENT_MODE && isAudience && !isBroadCasting)
194
+ ? true
195
+ : false;
196
+ iconButtonProps.btnTextProps.textStyle = {
197
+ color: $config.FONT_COLOR,
198
+ marginTop: 8,
199
+ fontSize: 12,
200
+ fontWeight: '400',
201
+ fontFamily: 'Source Sans Pro',
202
+ textAlign: 'center',
203
+ };
204
+ }
205
+
120
206
  iconButtonProps.isOnActionSheet = isOnActionSheet;
121
- if (!isMobileView) {
207
+ if (!isOnActionSheet) {
122
208
  iconButtonProps.toolTipMessage = showToolTip
123
209
  ? permissionDenied
124
- ? 'Give Permissions'
210
+ ? videoButtonTooltip(I18nDeviceStatus.PERMISSION_DENIED)
125
211
  : isVideoEnabled
126
- ? 'Disable Camera'
127
- : 'Enable Camera'
212
+ ? videoButtonTooltip(I18nDeviceStatus.ON)
213
+ : videoButtonTooltip(I18nDeviceStatus.OFF)
128
214
  : '';
215
+ if (
216
+ //precall mobile/mobile web UI - mute button should not show the label
217
+ (!callActive && isMobileUA()) ||
218
+ //sidepanel mute button should not show the label
219
+ (callActive && !position)
220
+ ) {
221
+ iconButtonProps.btnTextProps.text = '';
222
+ }
129
223
  }
130
224
 
131
225
  if (
@@ -137,21 +231,21 @@ function LocalVideoMute(props: LocalVideoMuteProps) {
137
231
  }
138
232
 
139
233
  if (
140
- rtcProps.role == ClientRole.Audience &&
141
- $config.EVENT_MODE &&
142
- $config.RAISE_HAND &&
143
- !isHost
234
+ (rtcProps.role == ClientRole.Audience &&
235
+ $config.EVENT_MODE &&
236
+ $config.RAISE_HAND &&
237
+ !isHost) ||
238
+ local.localVideoForceDisabled
144
239
  ) {
145
240
  iconButtonProps.iconProps = {
146
241
  ...iconButtonProps.iconProps,
147
242
  name: 'video-off',
148
243
  tintColor: $config.SEMANTIC_NEUTRAL,
149
244
  };
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
- : '';
245
+ iconButtonProps.toolTipMessage =
246
+ showToolTip && !local.localVideoForceDisabled
247
+ ? lstooltip(isHandRaised(local.uid))
248
+ : '';
155
249
  iconButtonProps.disabled = true;
156
250
  }
157
251
  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}}>