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
@@ -36,8 +36,21 @@ import LinkButton from '../atoms/LinkButton';
36
36
  import ImageIcon from '../atoms/ImageIcon';
37
37
  import ThemeConfig from '../theme';
38
38
  import Tooltip from '../atoms/Tooltip';
39
-
40
- const isLiveStream = $config.EVENT_MODE;
39
+ import IDPLogoutComponent from '../auth/IDPLogoutComponent';
40
+ import Clipboard from '../subComponents/Clipboard';
41
+ import {
42
+ shareRoomAttendeeLinkLabel,
43
+ shareRoomAttendeeLinkSubText,
44
+ shareRoomCopyBtnText,
45
+ shareRoomCopyBtnTooltipText,
46
+ shareRoomHostLinkLabel,
47
+ shareRoomHostLinkSubText,
48
+ shareRoomPSTNLabel,
49
+ shareRoomPSTNNumberLabel,
50
+ shareRoomPSTNPinLabel,
51
+ shareRoomPSTNSubText,
52
+ shareRoomStartBtnText,
53
+ } from '../language/default-labels/shareLinkScreenLabels';
41
54
 
42
55
  export interface CopyMeetingInfoProps {
43
56
  showSubLabel?: boolean;
@@ -45,62 +58,34 @@ export interface CopyMeetingInfoProps {
45
58
  export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
46
59
  const {copyShareLinkToClipboard, getShareLink} = useShareLink();
47
60
  const {
48
- data: {roomId, isHost, pstn, isSeparateHostLink, meetingTitle},
61
+ data: {roomId, isHost, pstn, isSeparateHostLink},
49
62
  } = useRoomInfo();
50
63
  const {showSubLabel = true} = props;
51
- //commented for v1 release
52
- // const meetingUrlText = useString('meetingUrlLabel')();
53
- // const meetingIdText = useString('meetingIdLabel')();
54
- // const hostIdText = useString('hostIdLabel')();
55
- // const attendeeUrlLabel = useString('attendeeUrlLabel')();
56
- // const attendeeIdLabel = useString('attendeeIdLabel')();
57
- // const hostUrlLabel = useString('hostUrlLabel')();
58
- // const pstnLabel = useString('pstnLabel')();
59
- // const pstnNumberLabel = useString('pstnNumberLabel')();
60
- // const pinLabel = useString('pin')();
61
- // const enterMeetingAfterCreateButton = useString(
62
- // 'enterMeetingAfterCreateButton',
63
- // )();
64
- // const copyInviteButton = useString('copyInviteButton')();
65
- const meetingUrlText = 'Room Link';
66
- const meetingIdText = 'Room ID';
67
- const hostIdText = 'Host ID';
68
- const attendeeUrlLabel = 'Attendee Link';
69
- const attendeeIdLabel = 'Attendee ID';
70
- const hostUrlLabel = 'Host Link';
71
- const pstnLabel = 'PSTN';
72
- const pstnNumberLabel = 'Number';
73
- const pinLabel = 'Pin';
74
- const enterMeetingAfterCreateButton = isLiveStream
75
- ? 'Start Stream (as host)'
76
- : 'Start Room (as host)';
77
- const copyInviteButton = 'Copy invite to clipboard';
78
- const history = useHistory();
79
- const enterMeeting = () => {
80
- if (roomId?.host) {
81
- history.push(roomId.host);
82
- }
83
- };
64
+
84
65
  const isSDK = isSDKCheck();
85
66
  const isWebCheck =
86
67
  $config.FRONTEND_ENDPOINT || (platform === 'web' && !isSDK);
87
68
 
88
- const getAttendeeLabel = () =>
89
- isWebCheck ? attendeeUrlLabel : attendeeIdLabel;
69
+ const shareRoomHostLink = useString<any>(shareRoomHostLinkLabel)(isWebCheck);
70
+ const shareRoomHostLinkSubTextLocal = useString<any>(
71
+ shareRoomHostLinkSubText,
72
+ )();
73
+ const shareRoomAttendeeLink = useString<any>(shareRoomAttendeeLinkLabel)(
74
+ isWebCheck,
75
+ );
76
+ const shareRoomAttendeeLinkSubTextLocal = useString<any>(
77
+ shareRoomAttendeeLinkSubText,
78
+ )();
79
+ const shareRoomPSTN = useString<any>(shareRoomPSTNLabel)();
80
+ const shareRoomPSTNNumber = useString<any>(shareRoomPSTNNumberLabel)();
81
+ const shareRoomPSTNPin = useString<any>(shareRoomPSTNPinLabel)();
82
+ const shareRoomPSTNSubTextLocal = useString<any>(shareRoomPSTNSubText)();
90
83
 
91
- const getHostLabel = () => {
92
- if (isSeparateHostLink) {
93
- if (isWebCheck) {
94
- return hostUrlLabel;
95
- }
96
- return hostIdText;
97
- } else {
98
- if (isWebCheck) {
99
- return meetingUrlText;
100
- }
101
- return meetingIdText;
102
- }
103
- };
84
+ const copiedToClipboard = useString(shareRoomCopyBtnTooltipText)();
85
+
86
+ const getAttendeeLabel = () => shareRoomAttendeeLink;
87
+
88
+ const getHostLabel = () => shareRoomHostLink;
104
89
 
105
90
  const clipboardIconButton = (type: SHARE_LINK_CONTENT_TYPE) => {
106
91
  return (
@@ -120,7 +105,7 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
120
105
  <Spacer size={8} horizontal={true} />
121
106
  </>
122
107
  }
123
- toolTipMessage="Copied to clipboard"
108
+ toolTipMessage={copiedToClipboard}
124
109
  renderContent={(isToolTipVisible, setToolTipVisible) => {
125
110
  return (
126
111
  <TouchableOpacity
@@ -169,7 +154,7 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
169
154
  <>
170
155
  <Spacer size={14} />
171
156
  <Text style={style.helpText}>
172
- Share this with attendees you want to invite.
157
+ {shareRoomAttendeeLinkSubTextLocal}
173
158
  </Text>
174
159
  </>
175
160
  )}
@@ -203,7 +188,7 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
203
188
  <>
204
189
  <Spacer size={14} />
205
190
  <Text style={style.helpText}>
206
- Share this with other co-hosts you want to invite.
191
+ {shareRoomHostLinkSubTextLocal}
207
192
  </Text>
208
193
  </>
209
194
  )}
@@ -212,9 +197,9 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
212
197
  ) : (
213
198
  <></>
214
199
  )}
215
- {pstn ? (
200
+ {$config.PSTN && pstn && pstn?.number && pstn?.pin ? (
216
201
  <>
217
- <Text style={style.urlTitle}>{pstnLabel}</Text>
202
+ <Text style={style.urlTitle}>{shareRoomPSTN}</Text>
218
203
  <Spacer size={11} />
219
204
  <View style={style.container}>
220
205
  <View style={[style.urlContainer, style.urlPadding]}>
@@ -225,8 +210,8 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
225
210
  //@ts-ignore
226
211
  isWebCheck ? urlWeb : {opacity: 1},
227
212
  ]}>
228
- {pstnNumberLabel} - {pstn?.number} {' | '} {pinLabel} -{' '}
229
- {pstn?.pin}
213
+ {shareRoomPSTNNumber} - {pstn?.number} {' | '}{' '}
214
+ {shareRoomPSTNPin} - {pstn?.pin}
230
215
  </Text>
231
216
  </View>
232
217
  </View>
@@ -236,9 +221,7 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
236
221
  {showSubLabel && (
237
222
  <>
238
223
  <Spacer size={14} />
239
- <Text style={style.helpText}>
240
- Share this phone number and pin to dial from phone.
241
- </Text>
224
+ <Text style={style.helpText}>{shareRoomPSTNSubTextLocal}</Text>
242
225
  </>
243
226
  )}
244
227
  {/* <Spacer size={25} /> */}
@@ -250,8 +233,86 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
250
233
  );
251
234
  };
252
235
 
236
+ const ClipboardIconButtonURL = ({url}) => {
237
+ const copiedToClipboard = useString(shareRoomCopyBtnTooltipText)();
238
+ return (
239
+ <View style={style.iconContainer}>
240
+ <Tooltip
241
+ isClickable
242
+ onPress={() => {
243
+ Clipboard.setString(url);
244
+ }}
245
+ toolTipIcon={
246
+ <>
247
+ <ImageIcon
248
+ iconType="plain"
249
+ name="tick-fill"
250
+ tintColor={$config.SEMANTIC_SUCCESS}
251
+ />
252
+ <Spacer size={8} horizontal={true} />
253
+ </>
254
+ }
255
+ toolTipMessage={copiedToClipboard}
256
+ renderContent={(isToolTipVisible, setToolTipVisible) => {
257
+ return (
258
+ <TouchableOpacity
259
+ onPress={() => {
260
+ Clipboard.setString(url);
261
+ setToolTipVisible(true);
262
+ }}>
263
+ <ImageIcon
264
+ iconType="plain"
265
+ name="clipboard"
266
+ tintColor={$config.PRIMARY_ACTION_BRAND_COLOR}
267
+ />
268
+ </TouchableOpacity>
269
+ );
270
+ }}
271
+ />
272
+ </View>
273
+ );
274
+ };
275
+ export interface ShowInputURLProps {
276
+ label: string;
277
+ url: string;
278
+ }
279
+ export const ShowInputURL = (props: ShowInputURLProps) => {
280
+ const {label, url} = props;
281
+ if (!url) {
282
+ return null;
283
+ }
284
+ return (
285
+ <>
286
+ {label ? (
287
+ <>
288
+ <Text style={style.urlTitle}>{label}</Text>
289
+ <Spacer size={11} />
290
+ </>
291
+ ) : (
292
+ <></>
293
+ )}
294
+ <View style={style.container}>
295
+ <View style={style.urlContainer}>
296
+ <Text
297
+ numberOfLines={1}
298
+ ellipsizeMode="tail"
299
+ style={[
300
+ style.url,
301
+ style.urlPadding,
302
+ //@ts-ignore
303
+ urlWeb,
304
+ ]}>
305
+ {url}
306
+ </Text>
307
+ </View>
308
+ <ClipboardIconButtonURL url={url} />
309
+ </View>
310
+ </>
311
+ );
312
+ };
313
+
253
314
  const Share = () => {
254
- const {FpeShareComponent} = useCustomization((data) => {
315
+ const {FpeShareComponent} = useCustomization(data => {
255
316
  let components: {
256
317
  FpeShareComponent?: React.ElementType;
257
318
  } = {};
@@ -274,28 +335,45 @@ const Share = () => {
274
335
  data: {roomId, meetingTitle},
275
336
  } = useRoomInfo();
276
337
 
277
- const enterMeetingAfterCreateButton = isLiveStream
278
- ? 'Start Stream (as host)'
279
- : 'Start Room (as host)';
280
- const copyInviteButton = 'Copy invite to clipboard';
338
+ const shareRoomStartBtnTextLocal = useString<any>(shareRoomStartBtnText)({
339
+ eventMode: $config.EVENT_MODE,
340
+ });
341
+
342
+ const copyInviteButton = useString(shareRoomCopyBtnText)();
281
343
  const history = useHistory();
282
344
  const enterMeeting = () => {
283
345
  if (roomId?.host) {
284
346
  history.push(roomId.host);
285
347
  }
286
348
  };
287
- const isSDK = isSDKCheck();
288
- const isWebCheck =
289
- $config.FRONTEND_ENDPOINT || (platform === 'web' && !isSDK);
290
349
 
291
350
  return FpeShareComponent ? (
292
351
  <FpeShareComponent />
293
352
  ) : (
294
353
  <View style={style.root}>
354
+ {!isMobileUA() ? (
355
+ <IDPLogoutComponent containerStyle={{marginBottom: -100}} />
356
+ ) : (
357
+ <></>
358
+ )}
295
359
  <ScrollView contentContainerStyle={style.scrollMain}>
296
360
  <Card>
297
361
  <View>
298
- <Logo />
362
+ <View
363
+ style={{
364
+ flexDirection: 'row',
365
+ justifyContent: 'space-between',
366
+ alignItems: 'center',
367
+ }}>
368
+ <Logo />
369
+ {isMobileUA() ? (
370
+ <IDPLogoutComponent
371
+ containerStyle={{marginTop: 0, marginRight: 0}}
372
+ />
373
+ ) : (
374
+ <></>
375
+ )}
376
+ </View>
299
377
  <Spacer size={20} />
300
378
  <Text style={style.heading} numberOfLines={1}>
301
379
  {trimText(meetingTitle)}
@@ -309,7 +387,7 @@ const Share = () => {
309
387
  iconName="video-on"
310
388
  onPress={() => enterMeeting()}
311
389
  containerStyle={isMobileUA() && {width: '100%'}}
312
- text={enterMeetingAfterCreateButton.toUpperCase()}
390
+ text={shareRoomStartBtnTextLocal}
313
391
  />
314
392
  <Spacer size={16} />
315
393
  <LinkButton
@@ -10,8 +10,9 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {createContext, ReactChildren, useEffect, useState} from 'react';
13
- import AsyncStorage from '@react-native-async-storage/async-storage'; // '@react-native-community/async-storage';
13
+ import AsyncStorage from '@react-native-async-storage/async-storage';
14
14
  import useMount from './useMount';
15
+ import {ENABLE_AUTH} from '../auth/config';
15
16
 
16
17
  type rememberedDevicesListEntries = Record<
17
18
  string,
@@ -78,13 +79,17 @@ export const StorageProvider = (props: {children: React.ReactNode}) => {
78
79
  } else {
79
80
  const storeFromStorage = JSON.parse(storeString);
80
81
  Object.keys(initStoreValue).forEach((key) => {
81
- if (!storeFromStorage[key])
82
+ if (!storeFromStorage[key]) {
82
83
  storeFromStorage[key] = initStoreValue[key];
84
+ }
83
85
  });
86
+ //unauth flow delete token from the localstoage if any
87
+ if (!ENABLE_AUTH) {
88
+ storeFromStorage['token'] = null;
89
+ }
84
90
  setStore(storeFromStorage);
85
91
  setReady(true);
86
92
  }
87
- console.log('store hydrated', storeString);
88
93
  setReady(true);
89
94
  } catch (e) {
90
95
  console.error('problem hydrating store', e);
@@ -97,14 +102,23 @@ export const StorageProvider = (props: {children: React.ReactNode}) => {
97
102
  useEffect(() => {
98
103
  const syncStore = async () => {
99
104
  try {
100
- await AsyncStorage.setItem('store', JSON.stringify(store));
101
- console.log('store synced with value', store);
105
+ /**
106
+ * if authentication is not enabled then store react state will have the token
107
+ * but it won't be saved in the localstorage
108
+ * Fix: if we duplicate browser tab and join the same meeting, we will create new session
109
+ */
110
+ let tempStore = JSON.parse(JSON.stringify(store));
111
+ if (!ENABLE_AUTH) {
112
+ tempStore['token'] = null;
113
+ }
114
+ await AsyncStorage.setItem('store', JSON.stringify(tempStore));
102
115
  } catch (e) {
103
116
  console.log('problem syncing the store', e);
104
117
  }
105
118
  };
106
119
  ready && syncStore();
107
120
  }, [store, ready]);
121
+
108
122
  return (
109
123
  <StorageContext.Provider value={{store, setStore}}>
110
124
  {ready ? props.children : <></>}
@@ -3,6 +3,9 @@ import Toast from '../../react-native-toast-message';
3
3
  import ToastConfig from '../subComponents/ToastConfig';
4
4
 
5
5
  const ToastComponent = () => {
6
+ // if ($config.TOAST_NOTIFICATIONS) {
7
+ // return <Toast ref={(ref) => Toast.setRef(ref)} config={ToastConfig} />;
8
+ // } else return <></>;
6
9
  return <Toast ref={(ref) => Toast.setRef(ref)} config={ToastConfig} />;
7
10
  };
8
11
  export default ToastComponent;
@@ -0,0 +1,291 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+ import React, {useContext, useEffect, useState} from 'react';
13
+ import {
14
+ ScrollView,
15
+ View,
16
+ StyleSheet,
17
+ Pressable,
18
+ FlatList,
19
+ useWindowDimensions,
20
+ Text,
21
+ } from 'react-native';
22
+ import {layoutProps} from '../../theme.json';
23
+ import {useLocalUid, useContent} from 'customization-api';
24
+ import RenderComponent from '../pages/video-call/RenderComponent';
25
+ import IconButton from '../atoms/IconButton';
26
+ import hexadecimalTransparency from '../utils/hexadecimalTransparency';
27
+ import {BREAKPOINTS, isMobileUA} from '../utils/common';
28
+ import {DispatchContext} from '../../agora-rn-uikit';
29
+ import WhiteboardConfigure, {
30
+ whiteboardContext,
31
+ } from './whiteboard/WhiteboardConfigure';
32
+ import WhiteboardView from './whiteboard/WhiteboardView';
33
+
34
+ const {topPinned} = layoutProps;
35
+
36
+ const WhiteboardLayout = ({renderData}) => {
37
+ const {pinnedUid, defaultContent, activeUids} = useContent();
38
+ const activeSpeaker = undefined;
39
+ const [collapse, setCollapse] = useState(false);
40
+ const localUid = useLocalUid();
41
+ const {width, height} = useWindowDimensions();
42
+ const isDesktop = width > BREAKPOINTS.xl;
43
+ const isSidePinnedlayout = topPinned === true ? false : isDesktop; // if either explicity set to false or auto evaluation
44
+ //const [maxUid, ...minUids] = renderData;
45
+ const {dispatch} = useContext(DispatchContext);
46
+ const [uids, setUids] = useState(renderData);
47
+
48
+ const [screenShareOn, setScreenShareOn] = useState(false);
49
+
50
+ useEffect(() => {
51
+ const nonPinnedUids = activeUids.filter(uid => uid !== pinnedUid);
52
+
53
+ const nonActiveSpeakerUids = nonPinnedUids.filter(
54
+ uid => uid !== activeSpeaker,
55
+ );
56
+
57
+ const remoteScreenShareUids = nonActiveSpeakerUids.filter(uid => {
58
+ return (
59
+ defaultContent[uid]?.type === 'screenshare' &&
60
+ defaultContent[uid]?.parentUid !== localUid
61
+ );
62
+ });
63
+
64
+ const localScreenShareUids = nonActiveSpeakerUids.filter(uid => {
65
+ return (
66
+ defaultContent[uid]?.type === 'screenshare' &&
67
+ defaultContent[uid]?.parentUid === localUid
68
+ );
69
+ });
70
+ if (remoteScreenShareUids?.length || localScreenShareUids?.length) {
71
+ setScreenShareOn(true);
72
+ }
73
+
74
+ const restOfTheUids = nonActiveSpeakerUids.filter(
75
+ uid => defaultContent[uid]?.type !== 'screenshare',
76
+ );
77
+
78
+ /**
79
+ * Order for pinned layout -
80
+ * - [1] means only one user
81
+ * - [N] means multiple users
82
+ * 1.Pinned User[1]
83
+ * 2.Remote screenshare users[N]
84
+ * 3.Active Speaker[1]
85
+ * 4.Local Screenshare[1]
86
+ * 5 and etc.Other Users[N]
87
+ */
88
+
89
+ const updatedOrder = [
90
+ pinnedUid,
91
+ ...remoteScreenShareUids,
92
+ pinnedUid !== activeSpeaker ? activeSpeaker : 0,
93
+ ...localScreenShareUids,
94
+ ...restOfTheUids,
95
+ ].filter(uid => uid !== undefined && uid !== 0);
96
+
97
+ setUids(updatedOrder);
98
+ }, [activeUids, defaultContent, activeSpeaker, pinnedUid]);
99
+
100
+ //whiteboard changes
101
+ const {whiteboardActive} = useContext(whiteboardContext);
102
+ //whiteboard changes
103
+
104
+ if (!whiteboardActive) {
105
+ return (
106
+ <View style={style.infoTextContainer}>
107
+ <Text style={style.infoTextStyle}>No Active Whiteboard.</Text>
108
+ </View>
109
+ );
110
+ }
111
+
112
+ return (
113
+ <View
114
+ style={{
115
+ flexDirection: isSidePinnedlayout ? 'row' : 'column',
116
+ flex: 1,
117
+ }}>
118
+ {!collapse && (
119
+ <ScrollView
120
+ horizontal={!isSidePinnedlayout}
121
+ showsHorizontalScrollIndicator={isMobileUA() ? false : true}
122
+ decelerationRate={0}
123
+ style={
124
+ isSidePinnedlayout
125
+ ? {
126
+ width: '20%',
127
+ paddingRight: 8,
128
+ }
129
+ : {
130
+ flex: 1,
131
+ minHeight: 160,
132
+ marginBottom: 8,
133
+ }
134
+ }>
135
+ {/* Pinned Video Top View(Desktop minimized and Mobile native and Mobile web) / Side View(Desktop maximized)*/}
136
+ {uids?.map((minUid, i) => {
137
+ //first item -> maximized view so returning null
138
+ if (i === 0 && !whiteboardActive) return null;
139
+ //remaining items -> minimized view
140
+ {
141
+ /**Rendering minimized views */
142
+ }
143
+ return (
144
+ <Pressable
145
+ //old
146
+ //if user pinned somebody then side panel items should not be clickable - swap video should be called
147
+ //instead we will show replace pin button on hovering the video tile
148
+ //old
149
+ disabled={
150
+ //old fix
151
+ //activeSpeaker || pinnedUid || screenShareOn ? true : false
152
+ //old fix
153
+
154
+ //latest fix : pinned video sidepanel layout should not be clickable
155
+ //if user hover on it we will show pin for me/replace pin(if someone already pinned) button
156
+ true
157
+ }
158
+ style={
159
+ isSidePinnedlayout
160
+ ? {
161
+ width: '100%',
162
+ height: width * 0.1125 + 2, // width * 20/100 * 9/16 + 2
163
+ zIndex: 40,
164
+ paddingBottom: 8,
165
+ }
166
+ : {
167
+ // width: ((height / 3) * 16) / 9 / 2 + 12, //dim[1] /4.3
168
+ width: 254,
169
+ height: '100%',
170
+ zIndex: 40,
171
+ marginRight: 8,
172
+ }
173
+ }
174
+ key={'minVideo' + i}
175
+ onPress={() => {}}>
176
+ <RenderComponent uid={minUid} />
177
+ </Pressable>
178
+ );
179
+ })}
180
+ </ScrollView>
181
+ )}
182
+ {uids && uids?.length && (
183
+ <View
184
+ style={
185
+ isSidePinnedlayout
186
+ ? collapse
187
+ ? style.width100
188
+ : style.width80
189
+ : style.flex8
190
+ }>
191
+ <View style={style.flex1} key={'maxVideo' + uids[0]}>
192
+ {isSidePinnedlayout && (
193
+ <IconButton
194
+ containerStyle={{
195
+ position: 'absolute',
196
+ top: 8,
197
+ left: 8,
198
+ zIndex: 999,
199
+ elevation: 999,
200
+ }}
201
+ onPress={() => setCollapse(!collapse)}
202
+ iconProps={{
203
+ iconContainerStyle: {
204
+ padding: 8,
205
+ backgroundColor:
206
+ $config.CARD_LAYER_5_COLOR +
207
+ hexadecimalTransparency['10%'],
208
+ },
209
+ name: collapse ? 'collapse' : 'expand',
210
+ tintColor: $config.SECONDARY_ACTION_COLOR,
211
+ iconSize: 24,
212
+ }}
213
+ />
214
+ )}
215
+ {pinnedUid ? (
216
+ <IconButton
217
+ containerStyle={{
218
+ paddingHorizontal: 8,
219
+ paddingVertical: 10,
220
+ backgroundColor: $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR,
221
+ borderRadius: 8,
222
+ flexDirection: 'row',
223
+ position: 'absolute',
224
+ top: 8,
225
+ left: 8 + (isSidePinnedlayout ? 32 + 12 + 8 : 0),
226
+ zIndex: 999,
227
+ elevation: 999,
228
+ }}
229
+ iconProps={{
230
+ iconType: 'plain',
231
+ iconContainerStyle: {
232
+ padding: 0,
233
+ },
234
+ name: 'unpin-filled',
235
+ iconSize: 20,
236
+ tintColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
237
+ }}
238
+ onPress={() => {
239
+ dispatch({type: 'UserPin', value: [0]});
240
+ }}
241
+ btnTextProps={{
242
+ text: 'Unpin',
243
+ textColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
244
+ textStyle: {
245
+ marginTop: 0,
246
+ marginLeft: 6,
247
+ marginRight: 2,
248
+ fontWeight: '700',
249
+ },
250
+ }}
251
+ />
252
+ ) : (
253
+ <></>
254
+ )}
255
+ {/** Render the maximized view */}
256
+ {whiteboardActive ? (
257
+ <WhiteboardView showToolbox={true} />
258
+ ) : (
259
+ <RenderComponent uid={uids[0]} isMax={true} />
260
+ )}
261
+ </View>
262
+ </View>
263
+ )}
264
+ </View>
265
+ );
266
+ };
267
+
268
+ const style = StyleSheet.create({
269
+ width80: {width: '80%'},
270
+ width100: {width: '100%'},
271
+ flex2: {flex: 2},
272
+ flex8: {flex: 8},
273
+ flex1: {flex: 1},
274
+ infoTextContainer: {
275
+ flex: 1,
276
+ backgroundColor: $config.VIDEO_AUDIO_TILE_COLOR,
277
+ justifyContent: 'center',
278
+ marginHorizontal: 'auto',
279
+ marginVertical: 4,
280
+ },
281
+ infoTextStyle: {
282
+ fontFamily: 'Source Sans Pro',
283
+ fontWeight: '600',
284
+ fontSize: 32,
285
+ color: $config.VIDEO_AUDIO_TILE_AVATAR_COLOR,
286
+ textAlign: 'center',
287
+ padding: 12,
288
+ },
289
+ });
290
+
291
+ export default WhiteboardLayout;