agora-appbuilder-core 3.0.8 → 4.0.0-api.0

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 (341) hide show
  1. package/Readme.md +6 -0
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +32828 -2777
  4. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  5. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  6. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  7. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +10 -6
  8. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +28 -8
  9. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +7 -15
  10. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
  11. package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
  12. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  13. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +4 -2
  14. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +4 -2
  15. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  16. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -6
  17. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +4 -4
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +4 -4
  20. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  21. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +6 -6
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +6 -6
  23. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +23 -0
  24. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +6 -6
  25. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +7 -7
  26. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -7
  27. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +10 -10
  28. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -6
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -6
  30. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -5
  31. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
  32. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  33. package/template/agora-rn-uikit/src/Rtc/Create.tsx +74 -7
  34. package/template/agora-rn-uikit/src/Rtc/Join.tsx +5 -4
  35. package/template/agora-rn-uikit/src/RtcConfigure.tsx +76 -49
  36. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +17 -7
  37. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +17 -11
  38. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -2
  39. package/template/agora-rn-uikit/src/index.ts +17 -9
  40. package/template/android/app/build.gradle +1 -0
  41. package/template/android/app/src/main/AndroidManifest.xml +22 -15
  42. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  43. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  44. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
  45. package/template/android/app/src/main/res/values/colors.xml +7 -0
  46. package/template/android/build.gradle +3 -3
  47. package/template/babel.config.js +1 -0
  48. package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
  49. package/template/customization-api/action-library.ts +10 -14
  50. package/template/customization-api/app-state.ts +4 -6
  51. package/template/customization-api/customEvents.ts +2 -2
  52. package/template/customization-api/customize.ts +1 -1
  53. package/template/customization-api/sub-components.ts +4 -12
  54. package/template/customization-api/typeDefinition.ts +15 -38
  55. package/template/customization-implementation/createHook.ts +24 -6
  56. package/template/customization-implementation/index.ts +1 -1
  57. package/template/customization-implementation/useCustomization.tsx +5 -7
  58. package/template/electron/index.html +27 -27
  59. package/template/electron/renderer/index.js +1 -0
  60. package/template/global.d.ts +26 -4
  61. package/template/index.rsdk.tsx +1 -0
  62. package/template/index.web.js +2 -1
  63. package/template/index.wsdk.tsx +9 -2
  64. package/template/ios/HelloWorld/Info.plist +14 -1
  65. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
  66. package/template/metro.config.js +1 -1
  67. package/template/package.json +18 -7
  68. package/template/react-native-toast-message/index.d.ts +43 -43
  69. package/template/react-native-toast-message/src/colors/index.js +3 -2
  70. package/template/react-native-toast-message/src/components/base/index.js +46 -59
  71. package/template/react-native-toast-message/src/components/base/styles.js +16 -32
  72. package/template/react-native-toast-message/src/components/checkbox.js +178 -0
  73. package/template/react-native-toast-message/src/components/error.js +3 -2
  74. package/template/react-native-toast-message/src/components/info.js +3 -2
  75. package/template/react-native-toast-message/src/components/success.js +3 -2
  76. package/template/react-native-toast-message/src/index.js +122 -31
  77. package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
  78. package/template/react-native-toast-message/src/styles.js +3 -4
  79. package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
  80. package/template/react-native.config.js +7 -0
  81. package/template/src/App.tsx +19 -14
  82. package/template/src/AppWrapper.tsx +74 -29
  83. package/template/src/SDKAppWrapper.tsx +60 -64
  84. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  85. package/template/src/assets/font-styles.css +329 -0
  86. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  87. package/template/src/assets/fonts/icomoon.ttf +0 -0
  88. package/template/src/assets/permission.png +0 -0
  89. package/template/src/assets/selection.json +1 -0
  90. package/template/src/atoms/ActionMenu.tsx +236 -0
  91. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
  92. package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
  93. package/template/src/atoms/AnimatedRings.native.tsx +68 -0
  94. package/template/src/atoms/AnimatedRings.tsx +70 -0
  95. package/template/src/atoms/Card.tsx +61 -0
  96. package/template/src/atoms/CircularProgress.native.tsx +121 -0
  97. package/template/src/atoms/CircularProgress.tsx +102 -0
  98. package/template/src/atoms/CustomIcon.tsx +88 -0
  99. package/template/src/atoms/CustomSwitch.tsx +287 -0
  100. package/template/src/atoms/Dropdown.tsx +306 -0
  101. package/template/src/atoms/HorizontalRule.tsx +3 -1
  102. package/template/src/atoms/IconButton.tsx +162 -0
  103. package/template/src/atoms/ImageIcon.tsx +98 -0
  104. package/template/src/atoms/InfoBubble.tsx +291 -0
  105. package/template/src/atoms/Input.tsx +87 -0
  106. package/template/src/atoms/InviteInfo.tsx +166 -0
  107. package/template/src/atoms/LinkButton.tsx +28 -0
  108. package/template/src/atoms/OutlineButton.tsx +61 -0
  109. package/template/src/atoms/ParticipantsCount.tsx +74 -0
  110. package/template/src/atoms/Popup.tsx +147 -0
  111. package/template/src/atoms/PrimaryButton.tsx +51 -26
  112. package/template/src/atoms/RecordingInfo.tsx +52 -0
  113. package/template/src/atoms/SecondaryButton.tsx +8 -5
  114. package/template/src/atoms/Spacer.tsx +22 -0
  115. package/template/src/atoms/TertiaryButton.tsx +78 -0
  116. package/template/src/atoms/TextInput.tsx +12 -14
  117. package/template/src/atoms/Toggle.tsx +47 -0
  118. package/template/src/atoms/Toolbar.tsx +68 -0
  119. package/template/src/atoms/ToolbarItem.tsx +63 -0
  120. package/template/src/atoms/Tooltip.native.tsx +65 -0
  121. package/template/src/atoms/Tooltip.tsx +94 -0
  122. package/template/src/atoms/UserAvatar.tsx +60 -0
  123. package/template/src/components/Chat.tsx +164 -278
  124. package/template/src/components/ChatContext.ts +8 -1
  125. package/template/src/components/ColorConfigure.tsx +1 -1
  126. package/template/src/components/ColorContext.ts +1 -1
  127. package/template/src/components/CommonStyles.ts +44 -0
  128. package/template/src/components/Controls.tsx +331 -73
  129. package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +8 -6
  130. package/template/src/components/DeviceConfigure.tsx +511 -102
  131. package/template/src/components/DeviceContext.tsx +8 -4
  132. package/template/src/components/EventsConfigure.tsx +192 -10
  133. package/template/src/components/GraphQLProvider.tsx +1 -1
  134. package/template/src/components/GridVideo.tsx +60 -45
  135. package/template/src/components/HostControlView.tsx +114 -35
  136. package/template/src/components/Navbar.tsx +219 -437
  137. package/template/src/components/Navigation.tsx +15 -1
  138. package/template/src/components/NetworkQualityContext.tsx +22 -22
  139. package/template/src/components/ParticipantsView.tsx +178 -156
  140. package/template/src/components/PinnedVideo.tsx +206 -121
  141. package/template/src/components/Precall.native.tsx +358 -119
  142. package/template/src/components/Precall.tsx +272 -138
  143. package/template/src/components/RTMConfigure.tsx +66 -19
  144. package/template/src/components/Router.electron.ts +1 -0
  145. package/template/src/components/Router.native.ts +1 -0
  146. package/template/src/components/Router.sdk.ts +1 -0
  147. package/template/src/components/Router.ts +1 -0
  148. package/template/src/components/SdkApiContext.tsx +161 -0
  149. package/template/src/components/Settings.tsx +26 -95
  150. package/template/src/components/SettingsView.tsx +251 -56
  151. package/template/src/components/Share.tsx +305 -276
  152. package/template/src/components/StorageContext.tsx +30 -3
  153. package/template/src/components/ToastComponent.tsx +8 -0
  154. package/template/src/components/chat-messages/useChatMessages.tsx +97 -50
  155. package/template/src/components/chat-ui/useChatUIControls.tsx +76 -0
  156. package/template/src/components/common/Error.tsx +20 -6
  157. package/template/src/components/common/Logo.tsx +16 -15
  158. package/template/src/components/contexts/LiveStreamDataContext.tsx +16 -11
  159. package/template/src/components/contexts/VideoMeetingDataContext.tsx +41 -11
  160. package/template/src/components/contexts/WhiteboardContext.tsx +3 -3
  161. package/template/src/components/livestream/LiveStreamContext.tsx +284 -50
  162. package/template/src/components/livestream/Types.ts +39 -14
  163. package/template/src/components/livestream/index.ts +1 -0
  164. package/template/src/components/livestream/views/LiveStreamControls.tsx +9 -4
  165. package/template/src/components/participants/AllAudienceParticipants.tsx +102 -31
  166. package/template/src/components/participants/AllHostParticipants.tsx +106 -35
  167. package/template/src/components/participants/Participant.tsx +300 -0
  168. package/template/src/components/participants/ParticipantName.tsx +13 -7
  169. package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
  170. package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
  171. package/template/src/components/participants/UserActionMenuOptions.tsx +396 -0
  172. package/template/src/components/popups/InvitePopup.tsx +115 -0
  173. package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
  174. package/template/src/components/precall/LocalMute.tsx +84 -14
  175. package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
  176. package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
  177. package/template/src/components/precall/PermissionHelper.tsx +126 -0
  178. package/template/src/components/precall/PreCallSettings.tsx +52 -0
  179. package/template/src/components/precall/VideoPreview.native.tsx +51 -6
  180. package/template/src/components/precall/VideoPreview.tsx +164 -8
  181. package/template/src/components/precall/joinCallBtn.native.tsx +2 -2
  182. package/template/src/components/precall/joinCallBtn.tsx +17 -4
  183. package/template/src/components/precall/meetingTitle.tsx +17 -14
  184. package/template/src/components/precall/selectDevice.tsx +1 -21
  185. package/template/src/components/precall/textInput.tsx +34 -6
  186. package/template/src/components/precall/usePreCall.tsx +39 -1
  187. package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +34 -10
  188. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  189. package/template/src/components/styles.ts +42 -21
  190. package/template/src/components/useShareLink.tsx +19 -21
  191. package/template/src/components/useToast.tsx +41 -0
  192. package/template/src/components/useUserPreference.tsx +9 -6
  193. package/template/src/components/useVideoCall.tsx +84 -0
  194. package/template/src/language/default-labels/createScreenLabels.ts +3 -3
  195. package/template/src/language/default-labels/joinScreenLabels.ts +2 -2
  196. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  197. package/template/src/language/default-labels/shareLinkScreenLabels.ts +5 -5
  198. package/template/src/language/default-labels/videoCallScreenLabels.ts +5 -5
  199. package/template/src/pages/Authenticate.tsx +5 -15
  200. package/template/src/pages/Create.tsx +304 -191
  201. package/template/src/pages/Endcall.tsx +148 -0
  202. package/template/src/pages/Join.tsx +96 -70
  203. package/template/src/pages/VideoCall.tsx +179 -69
  204. package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
  205. package/template/src/pages/video-call/ActionSheet.tsx +226 -0
  206. package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
  207. package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
  208. package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
  209. package/template/src/pages/video-call/DefaultLayouts.ts +6 -6
  210. package/template/src/pages/video-call/NameWithMicIcon.tsx +93 -49
  211. package/template/src/pages/video-call/RenderComponent.tsx +6 -30
  212. package/template/src/pages/video-call/SidePanelHeader.tsx +186 -0
  213. package/template/src/pages/video-call/VideoCallMobileView.tsx +138 -0
  214. package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
  215. package/template/src/pages/video-call/VideoCallScreen.tsx +109 -66
  216. package/template/src/pages/video-call/VideoComponent.tsx +20 -4
  217. package/template/src/pages/video-call/VideoRenderer.tsx +227 -61
  218. package/template/src/pages/video-call/index.ts +35 -7
  219. package/template/src/rtm/RTMEngine.ts +8 -0
  220. package/template/src/rtm-events/constants.ts +3 -1
  221. package/template/src/rtm-events-api/Events.ts +5 -4
  222. package/template/src/rtm-events-api/LocalEvents.ts +6 -0
  223. package/template/src/rtm-events-api/types.ts +5 -5
  224. package/template/src/subComponents/ChatBubble.tsx +125 -84
  225. package/template/src/subComponents/ChatContainer.tsx +280 -93
  226. package/template/src/subComponents/ChatInput.ios.tsx +175 -0
  227. package/template/src/subComponents/ChatInput.tsx +72 -115
  228. package/template/src/subComponents/Checkbox.native.tsx +16 -5
  229. package/template/src/subComponents/Checkbox.tsx +2 -2
  230. package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
  231. package/template/src/subComponents/EndcallPopup.tsx +107 -0
  232. package/template/src/subComponents/FallbackLogo.tsx +122 -40
  233. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  234. package/template/src/subComponents/LayoutIconButton.tsx +201 -0
  235. package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
  236. package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
  237. package/template/src/subComponents/LocalAudioMute.tsx +119 -27
  238. package/template/src/subComponents/LocalEndCall.tsx +73 -35
  239. package/template/src/subComponents/LocalSwitchCamera.tsx +19 -32
  240. package/template/src/subComponents/LocalVideoMute.tsx +117 -27
  241. package/template/src/subComponents/Logo.tsx +3 -4
  242. package/template/src/subComponents/LogoutButton.tsx +1 -1
  243. package/template/src/subComponents/NetworkQualityPill.tsx +66 -68
  244. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  245. package/template/src/subComponents/Recording.tsx +28 -29
  246. package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
  247. package/template/src/subComponents/RemoteEndCall.tsx +8 -5
  248. package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
  249. package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
  250. package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
  251. package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
  252. package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
  253. package/template/src/subComponents/SelectDevice.tsx +404 -61
  254. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
  255. package/template/src/subComponents/SelectOAuth.tsx +9 -8
  256. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  257. package/template/src/subComponents/SidePanelHeader.tsx +112 -0
  258. package/template/src/subComponents/ToastConfig.tsx +150 -10
  259. package/template/src/subComponents/chat/ChatParticipants.tsx +188 -79
  260. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +97 -34
  261. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
  262. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +8 -8
  263. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
  264. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
  265. package/template/src/subComponents/recording/useRecording.tsx +81 -29
  266. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
  267. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +23 -12
  268. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +44 -19
  269. package/template/src/theme/index.ts +46 -0
  270. package/template/src/utils/PlatformWrapper.tsx +21 -0
  271. package/template/src/utils/SdkEvents.ts +23 -14
  272. package/template/src/utils/SdkMethodEvents.ts +81 -0
  273. package/template/src/utils/common.tsx +155 -1
  274. package/template/src/utils/hexadecimalTransparency.ts +108 -0
  275. package/template/src/utils/index.tsx +19 -0
  276. package/template/src/utils/isMobileOrTablet.ts +7 -2
  277. package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
  278. package/template/src/utils/useActiveSpeaker.ts +42 -0
  279. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
  280. package/template/src/utils/{useButtonTemplate.tsx → useFocus.tsx} +19 -16
  281. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  282. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  283. package/template/src/utils/useIsHandRaised.ts +13 -0
  284. package/template/src/utils/useIsPSTN.ts +3 -3
  285. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  286. package/template/src/utils/{useJoinMeeting.ts → useJoinRoom.ts} +27 -21
  287. package/template/src/utils/useMutePSTN.ts +2 -2
  288. package/template/src/utils/useMuteToggleLocal.ts +58 -5
  289. package/template/src/utils/useRemoteEndCall.ts +4 -4
  290. package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
  291. package/template/src/utils/useRemoteMute.ts +7 -7
  292. package/template/src/utils/useRemoteRequest.ts +84 -0
  293. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  294. package/template/src/utils/useSwitchCamera.tsx +19 -0
  295. package/template/src/utils/useToolbar.tsx +59 -0
  296. package/template/web/index.html +5 -0
  297. package/template/webpack.commons.js +13 -8
  298. package/template/webpack.rsdk.config.js +1 -2
  299. package/template/webpack.web.config.js +1 -0
  300. package/template/agora-rn-uikit/.git/HEAD +0 -1
  301. package/template/agora-rn-uikit/.git/config +0 -16
  302. package/template/agora-rn-uikit/.git/description +0 -1
  303. package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
  304. package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
  305. package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -174
  306. package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
  307. package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
  308. package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
  309. package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
  310. package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
  311. package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
  312. package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
  313. package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
  314. package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
  315. package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
  316. package/template/agora-rn-uikit/.git/index +0 -0
  317. package/template/agora-rn-uikit/.git/info/exclude +0 -6
  318. package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
  319. package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
  320. package/template/agora-rn-uikit/.git/logs/refs/heads/release/fpe-1.0.1 +0 -1
  321. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
  322. package/template/agora-rn-uikit/.git/objects/pack/pack-baa9cf4109c3e8528f39535764621cee252b2b77.idx +0 -0
  323. package/template/agora-rn-uikit/.git/objects/pack/pack-baa9cf4109c3e8528f39535764621cee252b2b77.pack +0 -0
  324. package/template/agora-rn-uikit/.git/packed-refs +0 -49
  325. package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
  326. package/template/agora-rn-uikit/.git/refs/heads/release/fpe-1.0.1 +0 -1
  327. package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
  328. package/template/agora-rn-uikit/.gitignore +0 -63
  329. package/template/agora-rn-uikit/package-lock.json +0 -7612
  330. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  331. package/template/package-lock.json +0 -22543
  332. package/template/react-native-toast-message/.gitignore +0 -5
  333. package/template/react-native-toast-message/.npmignore +0 -5
  334. package/template/react-native-toast-message/package-lock.json +0 -10553
  335. package/template/src/.DS_Store +0 -0
  336. package/template/src/assets/icons.ts +0 -102
  337. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
  338. package/template/src/components/participants/MeParticipant.tsx +0 -38
  339. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
  340. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  341. package/template/src/subComponents/.DS_Store +0 -0
@@ -1,29 +1,54 @@
1
+ import ImageIcon from '../../atoms/ImageIcon';
1
2
  import React from 'react';
2
- import {StyleSheet, Text} from 'react-native';
3
+ import {StyleSheet, Text, TouchableOpacity, View} from 'react-native';
4
+ import ThemeConfig from '../../theme';
3
5
 
4
6
  interface PropsInterface {
5
7
  title: string;
6
8
  count?: number;
9
+ isOpen?: boolean;
10
+ onPress?: () => void;
7
11
  }
8
12
 
9
13
  export default function ParticipantSectionTitle(props: PropsInterface) {
10
14
  const {title, count = 0} = props;
11
15
  return (
12
- <Text style={style.subheading}>
13
- {title} {count > 0 && <Text style={style.count}>({count})</Text>}
14
- </Text>
16
+ <TouchableOpacity
17
+ style={style.container}
18
+ onPress={() => props?.onPress && props?.onPress()}>
19
+ <Text style={style.subheading}>
20
+ {title} {count > 0 ? '(' + count + ')' : ''}
21
+ </Text>
22
+ <View style={style.iconView}>
23
+ <ImageIcon
24
+ iconType="plain"
25
+ name={props?.isOpen ? 'arrow-up' : 'arrow-down'}
26
+ iconSize={20}
27
+ tintColor={$config.SECONDARY_ACTION_COLOR}
28
+ />
29
+ </View>
30
+ </TouchableOpacity>
15
31
  );
16
32
  }
17
33
 
18
34
  const style = StyleSheet.create({
35
+ container: {
36
+ flex: 1,
37
+ flexDirection: 'row',
38
+ justifyContent: 'space-between',
39
+ backgroundColor: $config.CARD_LAYER_2_COLOR,
40
+ paddingHorizontal: 20,
41
+ },
19
42
  subheading: {
20
- fontSize: 15,
21
- letterSpacing: 0.8,
43
+ fontSize: 12,
44
+ fontFamily: 'Source Sans Pro',
22
45
  fontWeight: '700',
23
- color: $config.PRIMARY_FONT_COLOR,
46
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.medium,
47
+ paddingVertical: 12,
48
+ alignSelf: 'center',
24
49
  },
25
- count: {
26
- fontSize: 13,
27
- fontWeight: '500',
50
+ iconView: {
51
+ paddingVertical: 8,
52
+ alignSelf: 'center',
28
53
  },
29
54
  });
@@ -9,20 +9,152 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React from 'react';
13
- import {View, Text} from 'react-native';
14
- import ParticipantName from './ParticipantName';
12
+ import React, {useRef, useState} from 'react';
13
+ import {View, Text, StyleSheet, TouchableOpacity} from 'react-native';
14
+ import ThemeConfig from '../../theme';
15
+ import UserAvatar from '../../atoms/UserAvatar';
16
+ import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
17
+ import {ContentInterface} from 'customization-api';
18
+ import {isWebInternal, isMobileUA} from '../../utils/common';
19
+ import IconButton from '../../atoms/IconButton';
20
+ import UserActionMenuOptionsOptions from './UserActionMenuOptions';
15
21
 
16
- const ScreenshareParticipants = (props: any) => {
17
- const {p_styles, name} = props;
22
+ const ScreenshareParticipants = (props: {user: ContentInterface}) => {
23
+ const screenshareRef = useRef();
24
+ const [isHovered, setIsHovered] = useState(false);
25
+ const [actionMenuVisible, setActionMenuVisible] = useState(false);
26
+
27
+ const showModal = () => {
28
+ setActionMenuVisible((state) => !state);
29
+ };
18
30
  return (
19
- <View style={p_styles.participantRow}>
20
- <ParticipantName value={name} />
21
- <View style={p_styles.dummyView}>
22
- {/** its just the placeholder to adjust the UI. if no icon option to be shown */}
23
- <Text>local screen sharing</Text>
24
- </View>
25
- </View>
31
+ <>
32
+ {/* {renderActionMenu()} */}
33
+ <UserActionMenuOptionsOptions
34
+ actionMenuVisible={actionMenuVisible}
35
+ setActionMenuVisible={setActionMenuVisible}
36
+ user={props.user}
37
+ btnRef={screenshareRef}
38
+ from={'screenshare-participant'}
39
+ />
40
+ <PlatformWrapper showModal={showModal} setIsHovered={setIsHovered}>
41
+ <View style={styles.container}>
42
+ <View style={styles.userInfoContainer}>
43
+ <View style={styles.bgContainerStyle}>
44
+ <UserAvatar
45
+ name={props.user.name}
46
+ containerStyle={styles.containerStyle}
47
+ textStyle={styles.textStyle}
48
+ />
49
+ </View>
50
+ <View style={{alignSelf: 'center'}}>
51
+ <Text style={styles.participantNameText}>{props.user.name}</Text>
52
+ </View>
53
+ </View>
54
+ {true ? (
55
+ <View
56
+ style={styles.iconContainer}
57
+ ref={screenshareRef}
58
+ collapsable={false}>
59
+ {isHovered || actionMenuVisible || isMobileUA() ? (
60
+ //todo mobile by default it should show
61
+ <View
62
+ style={{
63
+ width: 24,
64
+ height: 24,
65
+ alignSelf: 'center',
66
+ justifyContent: 'center',
67
+ alignItems: 'center',
68
+ borderRadius: 20,
69
+ }}>
70
+ <IconButton
71
+ hoverEffect={true}
72
+ hoverEffectStyle={{
73
+ backgroundColor:
74
+ $config.CARD_LAYER_5_COLOR +
75
+ hexadecimalTransparency['20%'],
76
+ borderRadius: 20,
77
+ padding: 5,
78
+ }}
79
+ iconProps={{
80
+ iconType: 'plain',
81
+ name: 'more-menu',
82
+ iconSize: 20,
83
+ tintColor: $config.SECONDARY_ACTION_COLOR,
84
+ }}
85
+ onPress={() => {
86
+ showModal();
87
+ }}
88
+ />
89
+ </View>
90
+ ) : (
91
+ <></>
92
+ )}
93
+ </View>
94
+ ) : (
95
+ <></>
96
+ )}
97
+ </View>
98
+ </PlatformWrapper>
99
+ </>
26
100
  );
27
101
  };
28
102
  export default ScreenshareParticipants;
103
+
104
+ const PlatformWrapper = ({children, showModal, setIsHovered}) => {
105
+ return isWebInternal() ? (
106
+ <div
107
+ onMouseEnter={() => {
108
+ setIsHovered(true);
109
+ }}
110
+ onMouseLeave={() => {
111
+ setIsHovered(false);
112
+ }}>
113
+ {children}
114
+ </div>
115
+ ) : (
116
+ <>{children}</>
117
+ );
118
+ };
119
+
120
+ const styles = StyleSheet.create({
121
+ bgContainerStyle: {
122
+ backgroundColor: $config.VIDEO_AUDIO_TILE_AVATAR_COLOR,
123
+ width: 36,
124
+ height: 36,
125
+ borderRadius: 18,
126
+ marginRight: 8,
127
+ },
128
+ containerStyle: {
129
+ width: 36,
130
+ height: 36,
131
+ borderRadius: 18,
132
+ },
133
+ textStyle: {
134
+ fontSize: ThemeConfig.FontSize.tiny,
135
+ lineHeight: 10,
136
+ fontWeight: '400',
137
+ color: $config.CARD_LAYER_1_COLOR,
138
+ },
139
+ participantNameText: {
140
+ fontWeight: '400',
141
+ fontSize: 12,
142
+ lineHeight: 15,
143
+ fontFamily: ThemeConfig.FontFamily.sansPro,
144
+ flexDirection: 'row',
145
+ color: $config.FONT_COLOR,
146
+ textAlign: 'left',
147
+ },
148
+ container: {
149
+ flexDirection: 'row',
150
+ justifyContent: 'space-between',
151
+ paddingHorizontal: 20,
152
+ paddingVertical: 8,
153
+ },
154
+ userInfoContainer: {
155
+ flexDirection: 'row',
156
+ },
157
+ iconContainer: {
158
+ flexDirection: 'row',
159
+ },
160
+ });
@@ -0,0 +1,396 @@
1
+ import React, {useContext, useEffect, useRef, useState} from 'react';
2
+ import useRemoteMute, {MUTE_REMOTE_TYPE} from '../../utils/useRemoteMute';
3
+ import {
4
+ ContentInterface,
5
+ SidePanelType,
6
+ useLayout,
7
+ useLocalUid,
8
+ useRoomInfo,
9
+ useContent,
10
+ useSidePanel,
11
+ } from 'customization-api';
12
+ import {getPinnedLayoutName} from '../../pages/video-call/DefaultLayouts';
13
+ import useRemoteRequest, {
14
+ REQUEST_REMOTE_TYPE,
15
+ } from '../../utils/useRemoteRequest';
16
+ import ActionMenu, {ActionMenuItem} from '../../atoms/ActionMenu';
17
+ import {useChatMessages} from '../chat-messages/useChatMessages';
18
+ import {useLiveStreamDataContext} from '../contexts/LiveStreamDataContext';
19
+ import useRemoteEndCall from '../../utils/useRemoteEndCall';
20
+ import LiveStreamContext from '../livestream/LiveStreamContext';
21
+ import {ClientRole, DispatchContext, UidType} from '../../../agora-rn-uikit';
22
+ import {useWindowDimensions} from 'react-native';
23
+ import {
24
+ LiveStreamControlMessageEnum,
25
+ RaiseHandValue,
26
+ } from '../livestream/Types';
27
+ import events, {PersistanceLevel} from '../../rtm-events-api';
28
+ import RemoveMeetingPopup from '../../subComponents/RemoveMeetingPopup';
29
+ import RemoveScreensharePopup from '../../subComponents/RemoveScreensharePopup';
30
+ import useRemoteEndScreenshare from '../../utils/useRemoteEndScreenshare';
31
+ import {useScreenshare} from '../../subComponents/screenshare/useScreenshare';
32
+ import {useFocus} from '../../utils/useFocus';
33
+ import Toast from '../../../react-native-toast-message';
34
+ import RemoteMutePopup from '../../subComponents/RemoteMutePopup';
35
+ import {calculatePosition, trimText} from '../../utils/common';
36
+
37
+ interface UserActionMenuOptionsOptionsProps {
38
+ user: ContentInterface;
39
+ actionMenuVisible: boolean;
40
+ setActionMenuVisible: (actionMenuVisible: boolean) => void;
41
+ btnRef: any;
42
+ from: 'partcipant' | 'screenshare-participant' | 'video-tile';
43
+ }
44
+ export default function UserActionMenuOptionsOptions(
45
+ props: UserActionMenuOptionsOptionsProps,
46
+ ) {
47
+ const [showAudioMuteModal, setShowAudioMuteModal] = useState(false);
48
+ const [showVideoMuteModal, setShowVideoMuteModal] = useState(false);
49
+ const [isPosCalculated, setIsPosCalculated] = useState(false);
50
+ const {setFocus} = useFocus();
51
+ const {stopUserScreenShare} = useScreenshare();
52
+ const remoteEndScreenshare = useRemoteEndScreenshare();
53
+ const [removeScreensharePopupVisible, setRemoveScreensharePopupVisible] =
54
+ useState(false);
55
+ const [actionMenuitems, setActionMenuitems] = useState<ActionMenuItem[]>([]);
56
+ const {setSidePanel} = useSidePanel();
57
+ const {user, actionMenuVisible, setActionMenuVisible} = props;
58
+ const {pinnedUid, activeUids} = useContent();
59
+ const {dispatch} = useContext(DispatchContext);
60
+ const {setLayout} = useLayout();
61
+ const localuid = useLocalUid();
62
+ const {openPrivateChat} = useChatMessages();
63
+ const {hostUids, audienceUids} = useLiveStreamDataContext();
64
+ const {
65
+ data: {isHost},
66
+ } = useRoomInfo();
67
+ const remoteRequest = useRemoteRequest();
68
+ const remoteMute = useRemoteMute();
69
+ const endRemoteCall = useRemoteEndCall();
70
+ const {promoteAudienceAsCoHost, raiseHandList} =
71
+ useContext(LiveStreamContext);
72
+ const [removeMeetingPopupVisible, setRemoveMeetingPopupVisible] =
73
+ useState(false);
74
+
75
+ useEffect(() => {
76
+ const items: ActionMenuItem[] = [];
77
+
78
+ /**
79
+ * In VideoMeeting/VoiceChat - Show pin menu for all users
80
+ * In Livestreaming/AudioLivecast - Show only for host -> i.e who is streaming video/audio. don't show it for audience
81
+ */
82
+ if (
83
+ !$config.EVENT_MODE ||
84
+ !(
85
+ $config.EVENT_MODE &&
86
+ $config.RAISE_HAND &&
87
+ audienceUids.indexOf(user.uid) !== -1
88
+ )
89
+ ) {
90
+ items.push({
91
+ disabled: activeUids.length === 1,
92
+ icon: pinnedUid ? 'unpin-outlined' : 'pin-outlined',
93
+ onHoverIcon: pinnedUid ? 'unpin-outlined' : 'pin-filled',
94
+ iconColor: $config.SECONDARY_ACTION_COLOR,
95
+ textColor: $config.SECONDARY_ACTION_COLOR,
96
+ title: pinnedUid
97
+ ? user.uid === pinnedUid
98
+ ? 'Unpin'
99
+ : 'Replace Pin'
100
+ : 'Pin for me',
101
+ callback: () => {
102
+ setActionMenuVisible(false);
103
+ dispatch({
104
+ type: 'UserPin',
105
+ value: [pinnedUid && user.uid === pinnedUid ? 0 : user.uid],
106
+ });
107
+ setLayout(getPinnedLayoutName());
108
+ },
109
+ });
110
+ }
111
+
112
+ /**
113
+ * Below menu items for remote user with type rtc(not for screenshare)
114
+ */
115
+ if (localuid !== user.uid && user.type === 'rtc') {
116
+ /**
117
+ * Chat menu
118
+ */
119
+ items.push({
120
+ icon: 'chat-outlined',
121
+ onHoverIcon: 'chat-filled',
122
+ iconColor: $config.SECONDARY_ACTION_COLOR,
123
+ textColor: $config.SECONDARY_ACTION_COLOR,
124
+ title: 'Message Privately',
125
+ callback: () => {
126
+ setActionMenuVisible(false);
127
+ openPrivateChat(user.uid);
128
+ },
129
+ });
130
+
131
+ /**
132
+ * Only host can see this menu item - request/mute - video/audio, promote to co host,demote to audience,remove form meeting
133
+ */
134
+ if (isHost) {
135
+ /**
136
+ * Request/Mute -> Audio/Video
137
+ * VideoMeeting/Voice chat - show this for all user
138
+ * Livestreaming/Audio livecast - show this for host user only(because audience not have permission to stream)
139
+ *
140
+ * note:
141
+ * Audio Menu applicable to all vertcials
142
+ * Video menu applicable to VideoMeeting and Livestreaming
143
+ */
144
+ if (
145
+ !$config.EVENT_MODE ||
146
+ ($config.EVENT_MODE &&
147
+ $config.RAISE_HAND &&
148
+ hostUids.indexOf(user.uid) !== -1)
149
+ ) {
150
+ items.push({
151
+ icon: user.audio ? 'mic-off-outlined' : 'mic-on-outlined',
152
+ onHoverIcon: user.audio ? 'mic-off-filled' : 'mic-on-filled',
153
+ iconColor: $config.SECONDARY_ACTION_COLOR,
154
+ textColor: $config.SECONDARY_ACTION_COLOR,
155
+ title: user.audio ? 'Mute Audio' : 'Request Audio',
156
+ callback: () => {
157
+ setActionMenuVisible(false);
158
+ user.audio
159
+ ? setShowAudioMuteModal(true)
160
+ : remoteRequest(REQUEST_REMOTE_TYPE.audio, user.uid);
161
+ },
162
+ });
163
+ if (!$config.AUDIO_ROOM) {
164
+ items.push({
165
+ icon: user.video ? 'video-off-outlined' : 'video-on-outlined',
166
+ onHoverIcon: user.video ? 'video-off-filled' : 'video-on-filled',
167
+ iconColor: $config.SECONDARY_ACTION_COLOR,
168
+ textColor: $config.SECONDARY_ACTION_COLOR,
169
+ title: user.video ? 'Mute Video' : 'Request Video',
170
+ callback: () => {
171
+ setActionMenuVisible(false);
172
+ user.video
173
+ ? setShowVideoMuteModal(true)
174
+ : remoteRequest(REQUEST_REMOTE_TYPE.video, user.uid);
175
+ },
176
+ });
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Promote co host -> show only on Livestreaming and Audio livecast
182
+ */
183
+ if (
184
+ $config.EVENT_MODE &&
185
+ $config.RAISE_HAND &&
186
+ hostUids.indexOf(user.uid) === -1
187
+ ) {
188
+ items.push({
189
+ icon: 'promote-outlined',
190
+ onHoverIcon: 'promote-filled',
191
+ iconColor: $config.SECONDARY_ACTION_COLOR,
192
+ textColor: $config.SECONDARY_ACTION_COLOR,
193
+ title: 'Add as Presenter',
194
+ callback: () => {
195
+ setActionMenuVisible(false);
196
+ promoteAudienceAsCoHost(user.uid);
197
+ },
198
+ });
199
+ }
200
+ if ($config.EVENT_MODE) {
201
+ if (
202
+ raiseHandList[user.uid]?.raised === RaiseHandValue.TRUE &&
203
+ raiseHandList[user.uid]?.role == ClientRole.Broadcaster
204
+ ) {
205
+ items.push({
206
+ isBase64Icon: true,
207
+ icon: 'demote-outlined',
208
+ onHoverIcon: 'demote-filled',
209
+ iconColor: $config.SECONDARY_ACTION_COLOR,
210
+ textColor: $config.SECONDARY_ACTION_COLOR,
211
+ title: 'Remove as Presenter',
212
+ callback: () => {
213
+ setActionMenuVisible(false);
214
+ events.send(
215
+ LiveStreamControlMessageEnum.raiseHandRequestRejected,
216
+ '',
217
+ PersistanceLevel.None,
218
+ user.uid,
219
+ );
220
+ },
221
+ });
222
+ }
223
+ }
224
+
225
+ items.push({
226
+ icon: 'remove-meeting',
227
+ iconColor: $config.SEMANTIC_ERROR,
228
+ textColor: $config.SEMANTIC_ERROR,
229
+ title: 'Remove From Room',
230
+ callback: () => {
231
+ setActionMenuVisible(false);
232
+ setRemoveMeetingPopupVisible(true);
233
+ },
234
+ });
235
+ }
236
+ }
237
+
238
+ /**
239
+ * Local User menu item - change name
240
+ */
241
+ if (localuid == user.uid && user.type === 'rtc') {
242
+ items.push({
243
+ icon: 'pencil-outlined',
244
+ onHoverIcon: 'pencil-filled',
245
+ iconColor: $config.SECONDARY_ACTION_COLOR,
246
+ textColor: $config.SECONDARY_ACTION_COLOR,
247
+ title: 'Change Name',
248
+ callback: () => {
249
+ setFocus((prevState) => {
250
+ return {
251
+ ...prevState,
252
+ editName: true,
253
+ };
254
+ });
255
+
256
+ setActionMenuVisible(false);
257
+ setSidePanel(SidePanelType.Settings);
258
+ },
259
+ });
260
+ }
261
+ //Screenshare menu item
262
+ if (
263
+ (isHost || localuid === user.parentUid) &&
264
+ user.type === 'screenshare'
265
+ ) {
266
+ items.push({
267
+ icon: 'remove-meeting',
268
+ iconColor: $config.SEMANTIC_ERROR,
269
+ textColor: $config.SEMANTIC_ERROR,
270
+ title:
271
+ localuid === user?.parentUid
272
+ ? 'Stop Screenshare'
273
+ : 'Remove Screenshare',
274
+ callback: () => {
275
+ setActionMenuVisible(false);
276
+ //for local user directly stop the screenshare
277
+ if (localuid === user.parentUid) {
278
+ stopUserScreenShare();
279
+ }
280
+ //for remote user show popup and then user will use cta to stop screenshare
281
+ else {
282
+ setRemoveScreensharePopupVisible(true);
283
+ }
284
+ },
285
+ });
286
+ }
287
+ setActionMenuitems(items);
288
+ }, [pinnedUid, isHost, raiseHandList, hostUids, user]);
289
+
290
+ const {width: globalWidth, height: globalHeight} = useWindowDimensions();
291
+ const [modalPosition, setModalPosition] = useState({});
292
+
293
+ useEffect(() => {
294
+ if (actionMenuVisible) {
295
+ //getting btnRef x,y
296
+ props.btnRef?.current?.measure(
297
+ (
298
+ _fx: number,
299
+ _fy: number,
300
+ localWidth: number,
301
+ localHeight: number,
302
+ px: number,
303
+ py: number,
304
+ ) => {
305
+ const data = calculatePosition({
306
+ px,
307
+ py,
308
+ localWidth,
309
+ localHeight,
310
+ globalHeight,
311
+ globalWidth,
312
+ });
313
+ setModalPosition(data);
314
+ setIsPosCalculated(true);
315
+ },
316
+ );
317
+ }
318
+ }, [actionMenuVisible]);
319
+
320
+ return (
321
+ <>
322
+ {isHost ? (
323
+ <RemoteMutePopup
324
+ type="audio"
325
+ actionMenuVisible={showAudioMuteModal}
326
+ setActionMenuVisible={setShowAudioMuteModal}
327
+ name={props?.user.name}
328
+ modalPosition={modalPosition}
329
+ onMutePress={() => {
330
+ remoteMute(MUTE_REMOTE_TYPE.audio, user.uid);
331
+ setShowAudioMuteModal(false);
332
+ }}
333
+ />
334
+ ) : (
335
+ <></>
336
+ )}
337
+ {isHost ? (
338
+ <RemoteMutePopup
339
+ type="video"
340
+ actionMenuVisible={showVideoMuteModal}
341
+ setActionMenuVisible={setShowVideoMuteModal}
342
+ name={props?.user.name}
343
+ modalPosition={modalPosition}
344
+ onMutePress={() => {
345
+ remoteMute(MUTE_REMOTE_TYPE.video, user.uid);
346
+ setShowVideoMuteModal(false);
347
+ }}
348
+ />
349
+ ) : (
350
+ <></>
351
+ )}
352
+ {isHost ? (
353
+ <RemoveScreensharePopup
354
+ modalVisible={removeScreensharePopupVisible}
355
+ setModalVisible={setRemoveScreensharePopupVisible}
356
+ username={user.name}
357
+ removeScreenShareFromMeeting={() => {
358
+ props.user.parentUid
359
+ ? remoteEndScreenshare(props.user.parentUid)
360
+ : console.log('Parent Uid is not available');
361
+ }}
362
+ />
363
+ ) : (
364
+ <></>
365
+ )}
366
+ {isHost ? (
367
+ <RemoveMeetingPopup
368
+ modalVisible={removeMeetingPopupVisible}
369
+ setModalVisible={setRemoveMeetingPopupVisible}
370
+ username={user.name}
371
+ removeUserFromMeeting={() => {
372
+ Toast.show({
373
+ type: 'info',
374
+ text1: `The system will remove ${trimText(
375
+ user.name,
376
+ )} from this call after 5 secs.`,
377
+ visibilityTime: 5000,
378
+ primaryBtn: null,
379
+ secondaryBtn: null,
380
+ });
381
+ endRemoteCall(user.uid);
382
+ }}
383
+ />
384
+ ) : (
385
+ <></>
386
+ )}
387
+ <ActionMenu
388
+ from={props.from}
389
+ actionMenuVisible={actionMenuVisible && isPosCalculated}
390
+ setActionMenuVisible={setActionMenuVisible}
391
+ modalPosition={modalPosition}
392
+ items={actionMenuitems}
393
+ />
394
+ </>
395
+ );
396
+ }