agora-appbuilder-core 4.0.0-api.4 → 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 +3 -3
  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 +48 -26
  136. package/template/src/atoms/ToolbarPreset.tsx +38 -6
  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 +664 -56
  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 +9 -7
  165. package/template/src/components/Navbar.tsx +115 -46
  166. package/template/src/components/NavbarMobile.tsx +119 -0
  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 +9 -7
  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 -6
  283. package/template/src/pages/video-call/ActionSheet.tsx +55 -15
  284. package/template/src/pages/video-call/ActionSheetContent.tsx +495 -306
  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 +201 -82
  292. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  293. package/template/src/pages/video-call/VideoCallScreen.tsx +116 -41
  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
@@ -21,10 +21,14 @@ const Create = ({
21
21
  children,
22
22
  }: {
23
23
  dispatch: DispatchType;
24
- children: (engine: React.MutableRefObject<RtcEngine>) => JSX.Element;
24
+ children: (
25
+ engine: React.MutableRefObject<RtcEngine>,
26
+ tracksReady: boolean,
27
+ ) => JSX.Element;
25
28
  }) => {
26
29
  const mutexLock = useRef(false);
27
30
  const [ready, setReady] = useState(false);
31
+ const [tracksReady, setTracksReady] = useState(false);
28
32
  const {callbacks, rtcProps, mode} = useContext(PropsContext);
29
33
  const {
30
34
  geoFencing = true,
@@ -213,13 +217,19 @@ const Create = ({
213
217
  geoFencing === true &&
214
218
  (Platform.OS === 'android' || Platform.OS === 'ios')
215
219
  ) {
216
- engine.current = await RtcEngine.createWithAreaCode(
217
- rtcProps.appId,
218
- // eslint-disable-next-line no-bitwise
219
- AreaCode.GLOB ^ AreaCode.CN,
220
- );
220
+ if (rtcProps?.appId) {
221
+ //@ts-ignore
222
+ engine.current = await RtcEngine.createWithAreaCode(
223
+ rtcProps?.appId,
224
+ // eslint-disable-next-line no-bitwise
225
+ //@ts-ignore
226
+ AreaCode.GLOB ^ AreaCode.CN,
227
+ );
228
+ }
221
229
  } else {
222
- engine.current = await RtcEngine.create(rtcProps.appId);
230
+ if (rtcProps?.appId) {
231
+ engine.current = await RtcEngine.create(rtcProps.appId);
232
+ }
223
233
  }
224
234
  /* Live Streaming */
225
235
  if (mode == ChannelProfile.LiveBroadcasting) {
@@ -235,27 +245,31 @@ const Create = ({
235
245
  await engine.current.setChannelProfile(ChannelProfile.Communication);
236
246
  }
237
247
  if (activeSpeaker) {
238
- await engine.current.enableAudioVolumeIndication(500, 3, true);
248
+ await engine.current.enableAudioVolumeIndication(100, 3, true);
239
249
  }
240
250
  if (!audioRoom) {
241
- if (rtcProps.profile) {
251
+ if (rtcProps && rtcProps.profile) {
242
252
  if (Platform.OS === 'web') {
243
253
  // move this to bridge?
244
254
  // @ts-ignore
245
255
  await engine.current.setVideoProfile(rtcProps.profile);
246
256
  } else {
247
- const config: VideoEncoderConfiguration =
248
- quality[rtcProps.profile];
249
- await engine.current.setVideoEncoderConfiguration({
250
- ...config,
251
- bitrate: 0,
252
- });
257
+ if (rtcProps && rtcProps?.profile) {
258
+ const config: VideoEncoderConfiguration =
259
+ quality[rtcProps.profile];
260
+ //@ts-ignore
261
+ await engine.current.setVideoEncoderConfiguration({
262
+ ...config,
263
+ bitrate: 0,
264
+ });
265
+ }
253
266
  }
254
267
  }
255
268
  } else {
256
269
  //web will work even without audio profile
257
270
  //but native need to set audio profile otherwise user will experience low audio issue
258
271
  if (Platform.OS === 'android' || Platform.OS === 'ios') {
272
+ //@ts-ignore
259
273
  await engine.current.setAudioProfile(
260
274
  AudioProfile.Default,
261
275
  AudioScenario.Default,
@@ -265,6 +279,7 @@ const Create = ({
265
279
  //ref - https://docs.agora.io/en/help/integration-issues/profile_difference/#audio-route
266
280
  //so setting into phone speaker manually as requested
267
281
  if (mode == ChannelProfile.Communication) {
282
+ //@ts-ignore
268
283
  await engine.current.setEnableSpeakerphone(true);
269
284
  }
270
285
  }
@@ -285,16 +300,18 @@ const Create = ({
285
300
  Platform.OS === 'web'
286
301
  )
287
302
  ) {
288
- await enableVideoAndAudioWithInitialStates();
289
- isVideoEnabledRef.current = true;
303
+ enableVideoAndAudioWithInitialStates().then(() => {
304
+ setTracksReady(true);
305
+ isVideoEnabledRef.current = true;
306
+ });
290
307
  }
291
308
 
292
309
  engine.current.addListener(
293
310
  'JoinChannelSuccess',
294
311
  async (channel, uid, elapsed) => {
295
312
  //Invoke the callback
296
- console.log('UIkit enabling dual stream', rtcProps.dual);
297
- if (rtcProps.dual) {
313
+ console.log('UIkit enabling dual stream', rtcProps?.dual);
314
+ if (rtcProps?.dual) {
298
315
  console.log('UIkit enabled dual stream');
299
316
  await engine.current!.enableDualStreamMode(rtcProps.dual);
300
317
  // await engine.current.setRemoteSubscribeFallbackOption(1);
@@ -304,10 +321,16 @@ const Create = ({
304
321
  },
305
322
  );
306
323
 
307
- engine.current.addListener('UserJoined', (...args) => {
324
+ engine.current.addListener('UserJoined', async (...args) => {
325
+ // preventing STT pusher bot in renderlist
326
+ //@ts-ignore
327
+ if (args[0] === 111111) {
328
+ return;
329
+ }
308
330
  //Get current peer IDs
309
331
  dispatch({
310
332
  type: 'UserJoined',
333
+ //@ts-ignore
311
334
  value: args,
312
335
  });
313
336
  });
@@ -316,6 +339,7 @@ const Create = ({
316
339
  //If user leaves
317
340
  dispatch({
318
341
  type: 'UserOffline',
342
+ //@ts-ignore
319
343
  value: args,
320
344
  });
321
345
  });
@@ -323,6 +347,7 @@ const Create = ({
323
347
  engine.current.addListener('RemoteAudioStateChanged', (...args) => {
324
348
  dispatch({
325
349
  type: 'RemoteAudioStateChanged',
350
+ //@ts-ignore
326
351
  value: args,
327
352
  });
328
353
  });
@@ -334,6 +359,7 @@ const Create = ({
334
359
  engine.current.addListener('RemoteVideoStateChanged', (...args) => {
335
360
  dispatch({
336
361
  type: 'RemoteVideoStateChanged',
362
+ //@ts-ignore
337
363
  value: args,
338
364
  });
339
365
  });
@@ -426,7 +452,7 @@ const Create = ({
426
452
  <>
427
453
  {
428
454
  // Render children once RTCEngine has been initialized
429
- ready && engine ? children(engine) : <></>
455
+ ready && engine ? children(engine, tracksReady) : <></>
430
456
  }
431
457
  </>
432
458
  );
@@ -11,7 +11,9 @@ const Join: React.FC<{
11
11
  engineRef: React.MutableRefObject<RtcEngine>;
12
12
  uidState: ContentStateInterface;
13
13
  dispatch: DispatchType;
14
- }> = ({children, precall, engineRef, uidState, dispatch}) => {
14
+ tracksReady: boolean;
15
+ preventJoin?: boolean;
16
+ }> = ({children, precall, engineRef, uidState, dispatch, tracksReady}) => {
15
17
  let joinState = useRef(false);
16
18
  const {rtcProps} = useContext(PropsContext);
17
19
  const {audioRoom = false} = rtcProps;
@@ -21,6 +23,16 @@ const Join: React.FC<{
21
23
  // : null;
22
24
 
23
25
  useEffect(() => {
26
+ if (joinState.current && tracksReady && Platform.OS === 'web') {
27
+ //@ts-ignore
28
+ engineRef.current.publish();
29
+ }
30
+ }, [tracksReady]);
31
+
32
+ useEffect(() => {
33
+ if (rtcProps?.preventJoin) {
34
+ return;
35
+ }
24
36
  const engine = engineRef.current;
25
37
  async function leave() {
26
38
  try {
@@ -36,15 +48,21 @@ const Join: React.FC<{
36
48
  const videoState = defaultContent[maxUid].video;
37
49
  async function join() {
38
50
  if (
39
- rtcProps.encryption &&
51
+ rtcProps?.encryption &&
40
52
  rtcProps.encryption.key &&
41
- rtcProps.encryption.mode
53
+ rtcProps.encryption.mode &&
54
+ rtcProps.encryption.salt
42
55
  ) {
43
- console.log('using channel encryption', rtcProps.encryption);
44
- await engine.enableEncryption(true, {
45
- encryptionKey: rtcProps.encryption.key,
46
- encryptionMode: rtcProps.encryption.mode,
47
- });
56
+ console.log('using channel encryption', rtcProps?.encryption);
57
+ try {
58
+ await engine.enableEncryption(true, {
59
+ encryptionKey: rtcProps?.encryption.key,
60
+ encryptionMode: rtcProps?.encryption.mode,
61
+ encryptionKdfSalt: rtcProps?.encryption.salt,
62
+ });
63
+ } catch (error) {
64
+ console.warn('encryption error', error);
65
+ }
48
66
  }
49
67
  if (
50
68
  !audioRoom &&
@@ -69,13 +87,16 @@ const Join: React.FC<{
69
87
  // } catch (error) {
70
88
  // console.error('FPE:Error on executing useBeforeJoin', error);
71
89
  // }
72
-
73
- await engine.joinChannel(
74
- rtcProps.token || null,
75
- rtcProps.channel,
76
- null,
77
- rtcProps.uid || 0,
78
- );
90
+ try {
91
+ await engine.joinChannel(
92
+ rtcProps.token || null,
93
+ rtcProps.channel,
94
+ null,
95
+ rtcProps.uid || 0,
96
+ );
97
+ } catch (error) {
98
+ console.error('RTC joinChannel error', error);
99
+ }
79
100
  if (
80
101
  !audioRoom &&
81
102
  videoState === ToggleState.enabled &&
@@ -118,6 +139,7 @@ const Join: React.FC<{
118
139
  rtcProps.token,
119
140
  precall,
120
141
  rtcProps.encryption,
142
+ rtcProps.preventJoin,
121
143
  ]);
122
144
 
123
145
  return <>{children}</>;
@@ -4,6 +4,8 @@ import {
4
4
  ContentStateInterface,
5
5
  ActionType,
6
6
  UidType,
7
+ CustomContentObjects,
8
+ CustomContentInferface,
7
9
  } from './Contexts/RtcContext';
8
10
  import {DispatchType} from './Contexts/DispatchContext';
9
11
  import PropsContext, {
@@ -30,6 +32,8 @@ import {
30
32
  UserMuteRemoteVideo,
31
33
  UserOffline,
32
34
  UserPin,
35
+ UserSecondaryPin,
36
+ ActiveSpeaker,
33
37
  } from './Reducer';
34
38
  import Create from './Rtc/Create';
35
39
  import Join from './Rtc/Join';
@@ -42,7 +46,9 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
42
46
  rtcProps?.initialDualStreamMode || DualStreamMode.DYNAMIC,
43
47
  );
44
48
  const localUid = useLocalUid();
45
- const initialLocalState: ContentStateInterface = {
49
+
50
+ const initialLocalState: Partial<ContentStateInterface> = {
51
+ customContent: {},
46
52
  defaultContent: {
47
53
  [localUid]: {
48
54
  uid: localUid,
@@ -51,10 +57,13 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
51
57
  streamType: 'high',
52
58
  type: 'rtc',
53
59
  permissionStatus: PermissionState.NOT_REQUESTED,
60
+ audioForceDisabled: false,
61
+ videoForceDisabled: false,
54
62
  },
55
63
  },
56
64
  activeUids: [localUid],
57
65
  pinnedUid: undefined,
66
+ secondaryPinnedUid: undefined,
58
67
  lastJoinedUid: 0,
59
68
  };
60
69
 
@@ -100,23 +109,60 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
100
109
  *
101
110
  * AddCustomContent use to add new data into render position and render list
102
111
  */
112
+ // const AddCustomContent = (
113
+ // state: ContentStateInterface,
114
+ // action: ActionType<'AddCustomContent'>,
115
+ // ) => {
116
+ // const newState = {
117
+ // ...state,
118
+ // activeUids: [...state.activeUids, action.value[0]],
119
+ // defaultContent: {
120
+ // ...state.defaultContent,
121
+ // [action.value[0]]: {
122
+ // ...state.defaultContent[action.value[0]],
123
+ // ...action.value[1],
124
+ // },
125
+ // },
126
+ // };
127
+ // return newState;
128
+ // };
129
+
103
130
  const AddCustomContent = (
104
131
  state: ContentStateInterface,
105
132
  action: ActionType<'AddCustomContent'>,
106
133
  ) => {
107
134
  const newState = {
108
135
  ...state,
109
- activeUids: [...state.activeUids, action.value[0]],
110
- defaultContent: {
111
- ...state.defaultContent,
136
+ activeUids: state.activeUids.filter((i) => i === action.value[0])?.length
137
+ ? [...state.activeUids]
138
+ : [...state.activeUids, action.value[0]],
139
+ customContent: {
140
+ ...state.customContent,
112
141
  [action.value[0]]: {
113
- ...state.defaultContent[action.value[0]],
114
- ...action.value[1],
142
+ uid: action.value[0],
143
+ component: action.value[1]?.component,
144
+ props: action.value[1]?.props,
145
+ onStage: action.value[1]?.onStage,
115
146
  },
116
147
  },
117
148
  };
118
149
  return newState;
119
150
  };
151
+ const RemoveCustomContent = (
152
+ state: ContentStateInterface,
153
+ action: ActionType<'RemoveCustomContent'>,
154
+ ) => {
155
+ const customContent = state.customContent;
156
+ if (customContent && customContent[action.value[0]]) {
157
+ delete customContent[action.value[0]];
158
+ }
159
+ const newState = {
160
+ ...state,
161
+ activeUids: [...state.activeUids.filter((i) => i !== action.value[0])],
162
+ ...customContent,
163
+ };
164
+ return newState;
165
+ };
120
166
 
121
167
  const reducer = (
122
168
  state: ContentStateInterface,
@@ -130,6 +176,11 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
130
176
  stateUpdate = AddCustomContent(state, action);
131
177
  }
132
178
  break;
179
+ case 'RemoveCustomContent':
180
+ if (actionTypeGuard(action, action.type)) {
181
+ stateUpdate = RemoveCustomContent(state, action);
182
+ }
183
+ break;
133
184
  case 'UpdateRenderList':
134
185
  if (actionTypeGuard(action, action.type)) {
135
186
  stateUpdate = UpdateRenderList(state, action);
@@ -200,6 +251,16 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
200
251
  stateUpdate = UserPin(state, action);
201
252
  }
202
253
  break;
254
+ case 'UserSecondaryPin':
255
+ if (actionTypeGuard(action, action.type)) {
256
+ stateUpdate = UserSecondaryPin(state, action);
257
+ }
258
+ break;
259
+ case 'ActiveSpeaker':
260
+ if (actionTypeGuard(action, action.type)) {
261
+ stateUpdate = ActiveSpeaker(state, action);
262
+ }
263
+ break;
203
264
  }
204
265
 
205
266
  // TODO: remove Handle event listeners
@@ -248,8 +309,12 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
248
309
  }
249
310
 
250
311
  if (dualStreamMode === DualStreamMode.DYNAMIC) {
251
- defaultContent[currentMaxUid].streamType = 'low';
252
- defaultContent[newMaxUid].streamType = 'high';
312
+ defaultContent[currentMaxUid]
313
+ ? (defaultContent[currentMaxUid].streamType = 'low')
314
+ : null;
315
+ defaultContent[newMaxUid]
316
+ ? (defaultContent[newMaxUid].streamType = 'high')
317
+ : null;
253
318
  // No need to modify the streamType if the mode is not dynamic
254
319
  }
255
320
 
@@ -320,14 +385,42 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
320
385
  const [uidState, dispatch]: [ContentStateInterface, DispatchType] =
321
386
  useReducer(reducer, initialState);
322
387
 
388
+ const setCustomContent = (
389
+ uid: CustomContentInferface['uid'],
390
+ component: CustomContentInferface['component'],
391
+ props?: CustomContentInferface['props'],
392
+ onStage?: CustomContentInferface['onStage'],
393
+ ) => {
394
+ if (!uid) {
395
+ console.log('debugging UID is not given');
396
+ return;
397
+ } else {
398
+ if (!component) {
399
+ dispatch({
400
+ type: 'RemoveCustomContent',
401
+ value: [uid],
402
+ });
403
+ } else {
404
+ dispatch({
405
+ type: 'AddCustomContent',
406
+ value: [
407
+ uid,
408
+ {component, props, onStage: onStage === undefined ? true : onStage},
409
+ ],
410
+ });
411
+ }
412
+ }
413
+ };
323
414
  return (
324
415
  <Create dispatch={dispatch}>
325
- {(engineRef) => (
416
+ {(engineRef, tracksReady) => (
326
417
  <Join
327
418
  precall={!rtcProps.callActive}
419
+ preventJoin={rtcProps?.preventJoin}
328
420
  engineRef={engineRef}
329
421
  uidState={uidState}
330
- dispatch={dispatch}>
422
+ dispatch={dispatch}
423
+ tracksReady={tracksReady}>
331
424
  <DispatchProvider value={{dispatch}}>
332
425
  <RtcProvider
333
426
  value={{
@@ -336,18 +429,35 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
336
429
  }}>
337
430
  <ContentProvider
338
431
  value={{
432
+ customContent: uidState.customContent,
433
+ setCustomContent: setCustomContent,
339
434
  defaultContent: uidState.defaultContent,
340
435
  activeUids:
341
436
  //In livestreaming mode ->audience should not see their local video tile
342
437
  mode == ChannelProfile.LiveBroadcasting &&
343
438
  rtcProps?.role == ClientRole.Audience
344
- ? uidState.activeUids.filter((i) => i !== localUid)
345
- : uidState.activeUids,
439
+ ? [
440
+ ...new Set(
441
+ uidState.activeUids.filter((i) => i !== localUid),
442
+ ),
443
+ ]
444
+ : [
445
+ ...new Set(
446
+ uidState.activeUids.filter((i) => i !== undefined),
447
+ ),
448
+ ],
346
449
  pinnedUid:
347
450
  uidState?.pinnedUid &&
348
451
  uidState?.activeUids?.indexOf(uidState.pinnedUid) !== -1
349
452
  ? uidState.pinnedUid
350
453
  : undefined,
454
+ secondaryPinnedUid:
455
+ uidState?.secondaryPinnedUid &&
456
+ uidState?.activeUids?.indexOf(
457
+ uidState.secondaryPinnedUid,
458
+ ) !== -1
459
+ ? uidState.secondaryPinnedUid
460
+ : undefined,
351
461
  lastJoinedUid: uidState.lastJoinedUid,
352
462
  }}>
353
463
  {props.children}
@@ -2,24 +2,51 @@ import React, {useContext} from 'react';
2
2
  import {RtcLocalView, RtcRemoteView, VideoRenderMode} from 'react-native-agora';
3
3
  import styles from '../Style';
4
4
  import PropsContext, {ContentInterface} from '../Contexts/PropsContext';
5
- import {View, ViewStyle} from 'react-native';
5
+ import {
6
+ View,
7
+ ViewStyle,
8
+ useWindowDimensions,
9
+ Platform,
10
+ ViewProps,
11
+ } from 'react-native';
6
12
  import useLocalUid from '../Utils/useLocalUid';
7
13
 
8
14
  const LocalView = RtcLocalView.SurfaceView;
9
- const RemoteView = RtcRemoteView.SurfaceView;
15
+ let RemoteView = RtcRemoteView.SurfaceView;
10
16
 
11
17
  interface MaxViewInterface {
12
18
  user: ContentInterface;
13
19
  fallback?: React.ComponentType;
14
20
  containerStyle?: ViewStyle;
21
+ landscapeMode?: boolean;
22
+ isFullView?: boolean;
15
23
  }
16
24
 
17
25
  const MaxVideoView: React.FC<MaxViewInterface> = (props) => {
18
26
  const {styleProps, rtcProps} = useContext(PropsContext);
19
27
  const {maxViewStyles} = styleProps || {};
20
- const {containerStyle = {}} = props;
28
+ const {
29
+ containerStyle = {},
30
+ landscapeMode = false,
31
+ isFullView = false,
32
+ } = props;
33
+ let landscapeModeStyle: ViewProps['style'] = {};
34
+ if (landscapeMode) {
35
+ //SurfaceView does not support transform
36
+ //TextureView only applicable to android
37
+ if (Platform.OS === 'android') {
38
+ RemoteView = RtcRemoteView.TextureView;
39
+ }
40
+ landscapeModeStyle = {
41
+ flex: 1,
42
+ alignSelf: 'center',
43
+ alignItems: 'center',
44
+ transform: [{rotate: '90deg'}],
45
+ };
46
+ }
21
47
  const Fallback = props.fallback;
22
48
  const localUid = useLocalUid();
49
+ //@ts-ignore
23
50
  const uid = props.user.uid === rtcProps?.screenShareUid ? 1 : props.user.uid;
24
51
  return uid === localUid ? (
25
52
  props.user.video ? (
@@ -29,7 +56,7 @@ const MaxVideoView: React.FC<MaxViewInterface> = (props) => {
29
56
  ...(maxViewStyles as object),
30
57
  ...containerStyle,
31
58
  }}
32
- renderMode={VideoRenderMode.Fit}
59
+ renderMode={isFullView ? VideoRenderMode.FILL : VideoRenderMode.Fit}
33
60
  />
34
61
  ) : Fallback ? (
35
62
  <Fallback />
@@ -42,6 +69,7 @@ const MaxVideoView: React.FC<MaxViewInterface> = (props) => {
42
69
  ...styles.fullView,
43
70
  ...(maxViewStyles as object),
44
71
  ...containerStyle,
72
+ ...landscapeModeStyle,
45
73
  }}
46
74
  uid={uid as number}
47
75
  renderMode={VideoRenderMode.Fit}
@@ -12,18 +12,36 @@ interface MaxViewInterface {
12
12
  user: ContentInterface;
13
13
  fallback?: React.ComponentType;
14
14
  containerStyle?: ViewStyle;
15
+ landscapeMode?: boolean;
16
+ isFullView?: boolean;
15
17
  }
16
18
 
17
19
  const MaxVideoView: React.FC<MaxViewInterface> = (props) => {
18
20
  const {styleProps, rtcProps} = useContext(PropsContext);
19
21
  const {maxViewStyles} = styleProps || {};
20
22
  const Fallback = props.fallback;
21
- const {containerStyle = {}} = props;
23
+ const {
24
+ containerStyle = {},
25
+ landscapeMode = false,
26
+ isFullView = false,
27
+ } = props;
22
28
  const localUid = useLocalUid();
29
+ //@ts-ignore
23
30
  const uid = props.user.uid === rtcProps?.screenShareUid ? 1 : props.user.uid;
31
+ let landscapeModeStyle = {};
32
+ if (landscapeMode) {
33
+ landscapeModeStyle = {
34
+ transform: 'rotate(90deg)',
35
+ alignSelf: 'center',
36
+ alignItems: 'center',
37
+ };
38
+ }
24
39
  return uid === localUid ? (
25
40
  props.user.video ? (
26
- <LocalView style={containerStyle} renderMode={VideoRenderMode.Fit} />
41
+ <LocalView
42
+ style={containerStyle}
43
+ renderMode={isFullView ? VideoRenderMode.FILL : VideoRenderMode.Fit}
44
+ />
27
45
  ) : Fallback ? (
28
46
  <Fallback />
29
47
  ) : (
@@ -36,6 +54,7 @@ const MaxVideoView: React.FC<MaxViewInterface> = (props) => {
36
54
  flex: 1,
37
55
  overflow: 'hidden',
38
56
  display: props.user.video ? 'flex' : 'none',
57
+ ...landscapeModeStyle,
39
58
  }}>
40
59
  <RemoteView
41
60
  style={containerStyle}
@@ -23,6 +23,7 @@ const MinVideoView: React.FC<MinViewInterface> = (props) => {
23
23
  const {minCloseBtnStyles} = remoteBtnStyles || {};
24
24
  const {showOverlay} = props || {};
25
25
  const localUid = useLocalUid();
26
+ //@ts-ignore
26
27
  const uid = props.user.uid === rtcProps?.screenShareUid ? 1 : props.user.uid;
27
28
  return (
28
29
  <View style={{margin: 5}}>
@@ -80,6 +81,7 @@ const MinVideoView: React.FC<MinViewInterface> = (props) => {
80
81
  height: 25,
81
82
  tintColor: theme || props.color || '#fff',
82
83
  }}
84
+ //@ts-ignore
83
85
  source={{uri: icons.close}}
84
86
  />
85
87
  </TouchableOpacity>