agora-appbuilder-core 3.0.9 → 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 (305) hide show
  1. package/Readme.md +6 -0
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +5871 -4728
  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 -106
  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/src/Contexts/RenderContext.tsx +0 -10
  301. package/template/src/assets/icons.ts +0 -102
  302. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
  303. package/template/src/components/participants/MeParticipant.tsx +0 -38
  304. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
  305. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
@@ -1,29 +1,36 @@
1
1
  import React, {useContext} from 'react';
2
2
  import {View} from 'react-native';
3
- import {BtnTemplate, PropsContext, UidType} from '../../../../agora-rn-uikit';
3
+ import {PropsContext, UidType} from '../../../../agora-rn-uikit';
4
4
  import LiveStreamContext from '../../../components/livestream';
5
- import icons from '../../../assets/icons';
5
+ import TertiaryButton from '../../../atoms/TertiaryButton';
6
+ import Toast from '../../../../react-native-toast-message';
6
7
 
7
8
  interface RemoteLiveStreamControlProps {
8
9
  uid: UidType;
10
+ toastId: number;
9
11
  }
10
12
 
11
13
  const RemoteLiveStreamRequestReject = (props: RemoteLiveStreamControlProps) => {
12
- const {uid} = props;
14
+ const {uid, toastId} = props;
13
15
  const {hostRejectsRequestOfUID} = useContext(LiveStreamContext);
14
- const {styleProps} = useContext(PropsContext);
15
- const {remoteBtnStyles} = styleProps || {};
16
- const {liveStreamHostControlBtns} = remoteBtnStyles || {};
17
16
 
18
17
  return (
19
- <View style={{...(liveStreamHostControlBtns as object)}}>
20
- <BtnTemplate
18
+ <View style={{flex: 1}}>
19
+ <TertiaryButton
20
+ containerStyle={{
21
+ paddingHorizontal: 8,
22
+ paddingVertical: 8,
23
+ height: 38,
24
+ }}
21
25
  disabled={!uid}
22
- icon={icons['crossCircleIcon']}
23
- style={{...(liveStreamHostControlBtns as object)}}
24
26
  onPress={() => {
27
+ //Hiding the toast if its get rejected in the participant panel
28
+ if (Toast.getToastId() === toastId) {
29
+ Toast.hide();
30
+ }
25
31
  hostRejectsRequestOfUID(uid);
26
32
  }}
33
+ text={'DENY'}
27
34
  />
28
35
  </View>
29
36
  );
@@ -15,6 +15,7 @@ import React, {
15
15
  useContext,
16
16
  useEffect,
17
17
  useRef,
18
+ useState,
18
19
  } from 'react';
19
20
  import {gql, useMutation} from '@apollo/client';
20
21
  import {useParams} from '../../components/Router';
@@ -23,21 +24,25 @@ import Toast from '../../../react-native-toast-message';
23
24
  import {createHook} from 'customization-implementation';
24
25
  import {useString} from '../../utils/useString';
25
26
  import ChatContext from '../../components/ChatContext';
26
- import events, {EventPersistLevel} from '../../rtm-events-api';
27
+ import events, {PersistanceLevel} from '../../rtm-events-api';
27
28
  import {EventActions, EventNames} from '../../rtm-events';
28
29
  import useRecordingLayoutQuery from './useRecordingLayoutQuery';
29
30
  import {useScreenContext} from '../../components/contexts/ScreenShareContext';
31
+ import {useContent} from 'customization-api';
32
+ import {trimText} from '../../utils/common';
30
33
 
31
34
  export interface RecordingContextInterface {
32
35
  startRecording: () => void;
33
36
  stopRecording: () => void;
34
37
  isRecordingActive: boolean;
38
+ inProgress: boolean;
35
39
  }
36
40
 
37
41
  const RecordingContext = createContext<RecordingContextInterface>({
38
42
  startRecording: () => {},
39
43
  stopRecording: () => {},
40
44
  isRecordingActive: false,
45
+ inProgress: false,
41
46
  });
42
47
 
43
48
  const START_RECORDING = gql`
@@ -82,6 +87,9 @@ interface RecordingProviderProps {
82
87
  const RecordingProvider = (props: RecordingProviderProps) => {
83
88
  const {rtcProps} = useContext(PropsContext);
84
89
  const {setRecordingActive, isRecordingActive} = props?.value;
90
+ const [inProgress, setInProgress] = useState(false);
91
+ const [uidWhoStarted, setUidWhoStarted] = useState(0);
92
+ const {defaultContent, activeUids} = useContent();
85
93
  const {phrase} = useParams<{phrase: string}>();
86
94
  const [startRecordingQuery] = useMutation(START_RECORDING);
87
95
  const [stopRecordingQuery] = useMutation(STOP_RECORDING);
@@ -101,14 +109,17 @@ const RecordingProvider = (props: RecordingProviderProps) => {
101
109
  const payload = JSON.parse(data.payload);
102
110
  const action = payload.action;
103
111
  const value = payload.value;
104
-
105
112
  switch (action) {
106
113
  case EventActions.RECORDING_STARTED:
114
+ setUidWhoStarted(parseInt(value));
107
115
  setRecordingActive(true);
108
116
  break;
109
117
  case EventActions.RECORDING_STOPPED:
110
118
  setRecordingActive(false);
111
119
  break;
120
+ case EventActions.RECORDING_STOP_REQUEST:
121
+ stopRecording();
122
+ break;
112
123
  default:
113
124
  break;
114
125
  }
@@ -128,14 +139,22 @@ const RecordingProvider = (props: RecordingProviderProps) => {
128
139
  if (prevRecordingState) {
129
140
  if (prevRecordingState?.isRecordingActive === isRecordingActive) return;
130
141
  Toast.show({
131
- type: 'success',
142
+ type: 'info',
132
143
  text1: recordingStartedText(isRecordingActive),
133
- visibilityTime: 1000,
144
+ text2: isRecordingActive
145
+ ? `This room is being recorded by ${
146
+ trimText(defaultContent[uidWhoStarted]?.name) || 'user'
147
+ }`
148
+ : '',
149
+ visibilityTime: 3000,
150
+ primaryBtn: null,
151
+ secondaryBtn: null,
134
152
  });
135
153
  }
136
154
  }, [isRecordingActive]);
137
155
 
138
156
  const startRecording = () => {
157
+ setInProgress(true);
139
158
  // If recording is not going on, start the recording by executing the graphql query
140
159
  startRecordingQuery({
141
160
  variables: {
@@ -148,6 +167,7 @@ const RecordingProvider = (props: RecordingProviderProps) => {
148
167
  })
149
168
  .then((res) => {
150
169
  console.log(res.data);
170
+ setInProgress(false);
151
171
  if (res.data.startRecordingSession === 'success') {
152
172
  /**
153
173
  * 1. Once the backend sucessfuly starts recording, send message
@@ -159,9 +179,10 @@ const RecordingProvider = (props: RecordingProviderProps) => {
159
179
  action: EventActions.RECORDING_STARTED,
160
180
  value: `${localUid}`,
161
181
  }),
162
- EventPersistLevel.LEVEL3,
182
+ PersistanceLevel.Session,
163
183
  );
164
184
  // 2. set the local recording state to true to update the UI
185
+ setUidWhoStarted(localUid);
165
186
  setRecordingActive(true);
166
187
  // 3. set the presenter mode if screen share is active
167
188
  // 3.a Get the most recent screenshare uid
@@ -182,40 +203,71 @@ const RecordingProvider = (props: RecordingProviderProps) => {
182
203
  }
183
204
  })
184
205
  .catch((err) => {
206
+ setInProgress(false);
185
207
  console.log(err);
186
208
  });
187
209
  };
188
210
 
189
211
  const stopRecording = () => {
190
- // If recording is already going on, stop the recording by executing the graphql query.
191
- stopRecordingQuery({variables: {passphrase: phrase}})
192
- .then((res) => {
193
- console.log(res.data);
194
- if (res.data.stopRecordingSession === 'success') {
195
- /**
196
- * 1. Once the backend sucessfuly starts recording, send message
197
- * in the channel indicating that cloud recording is now inactive.
198
- */
199
- events.send(
200
- EventNames.RECORDING_ATTRIBUTE,
201
- JSON.stringify({
202
- action: EventActions.RECORDING_STOPPED,
203
- value: '',
204
- }),
205
- EventPersistLevel.LEVEL3,
206
- );
207
- // 2. set the local recording state to false to update the UI
208
- setRecordingActive(false);
209
- }
210
- })
211
- .catch((err) => {
212
- console.log(err);
213
- });
212
+ /**
213
+ * if condition added for below issue
214
+ *
215
+ * user 1 and user 2 in the call
216
+ * user 1 start the recording
217
+ * user 2 stops the recording
218
+ * user 2 join the call getting stop recording notification which is not needed
219
+ *
220
+ * solution
221
+ * case 1 - if recording is not started by the host then we will send level1 message to host who started the recording
222
+ * case 2 - if person who started the recording no longer available in the call then will stop the recording
223
+ */
224
+ if (
225
+ localUid === uidWhoStarted ||
226
+ activeUids.indexOf(uidWhoStarted) === -1
227
+ ) {
228
+ setInProgress(true);
229
+ // If recording is already going on, stop the recording by executing the graphql query.
230
+ stopRecordingQuery({variables: {passphrase: phrase}})
231
+ .then((res) => {
232
+ console.log(res.data);
233
+ setInProgress(false);
234
+ if (res.data.stopRecordingSession === 'success') {
235
+ /**
236
+ * 1. Once the backend sucessfuly starts recording, send message
237
+ * in the channel indicating that cloud recording is now inactive.
238
+ */
239
+ events.send(
240
+ EventNames.RECORDING_ATTRIBUTE,
241
+ JSON.stringify({
242
+ action: EventActions.RECORDING_STOPPED,
243
+ value: '',
244
+ }),
245
+ PersistanceLevel.Session,
246
+ );
247
+ // 2. set the local recording state to false to update the UI
248
+ setRecordingActive(false);
249
+ }
250
+ })
251
+ .catch((err) => {
252
+ setInProgress(false);
253
+ console.log(err);
254
+ });
255
+ } else {
256
+ events.send(
257
+ EventNames.RECORDING_ATTRIBUTE,
258
+ JSON.stringify({
259
+ action: EventActions.RECORDING_STOP_REQUEST,
260
+ value: '',
261
+ }),
262
+ PersistanceLevel.None,
263
+ );
264
+ }
214
265
  };
215
266
 
216
267
  return (
217
268
  <RecordingContext.Provider
218
269
  value={{
270
+ inProgress,
219
271
  startRecording,
220
272
  stopRecording,
221
273
  isRecordingActive,
@@ -9,15 +9,16 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React from 'react';
13
- import {StyleSheet} from 'react-native';
14
- import {BtnTemplate, BtnTemplateInterface} from '../../../agora-rn-uikit';
12
+ import React, {useContext} from 'react';
13
+ import ThemeConfig from '../../theme';
14
+ import IconButton, {IconButtonProps} from '../../atoms/IconButton';
15
+ import Styles from '../../components/styles';
15
16
  import {useString} from '../../utils/useString';
16
17
  import {useScreenshare} from './useScreenshare';
17
- import {
18
- ButtonTemplateName,
19
- useButtonTemplate,
20
- } from '../../utils/useButtonTemplate';
18
+ import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
19
+ import {PropsContext, ClientRole} from '../../../agora-rn-uikit';
20
+ import {useLocalUserInfo, useRoomInfo} from 'customization-api';
21
+ import useIsHandRaised from '../../utils/useIsHandRaised';
21
22
  /**
22
23
  * A component to start and stop screen sharing on web clients.
23
24
  * Screen sharing is not yet implemented on mobile platforms.
@@ -25,86 +26,67 @@ import {
25
26
  */
26
27
 
27
28
  export interface ScreenshareButtonProps {
28
- buttonTemplateName?: ButtonTemplateName;
29
- render?: (
30
- onPress: () => void,
31
- isScreenshareActive: boolean,
32
- buttonTemplateName?: ButtonTemplateName,
33
- ) => JSX.Element;
29
+ render?: (onPress: () => void, isScreenshareActive: boolean) => JSX.Element;
34
30
  }
35
31
 
36
32
  const ScreenshareButton = (props: ScreenshareButtonProps) => {
33
+ const {rtcProps} = useContext(PropsContext);
34
+ const {
35
+ data: {isHost},
36
+ } = useRoomInfo();
37
+ const local = useLocalUserInfo();
38
+ const isHandRaised = useIsHandRaised();
37
39
  const {isScreenshareActive, startUserScreenshare, stopUserScreenShare} =
38
40
  useScreenshare();
39
41
  //commented for v1 release
40
42
  //const screenShareButton = useString('screenShareButton')();
41
- const screenShareButton = 'Share';
42
- const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
43
- const {buttonTemplateName = defaultTemplateValue} = props;
43
+
44
44
  const onPress = () =>
45
45
  isScreenshareActive ? stopUserScreenShare() : startUserScreenshare();
46
- let btnTemplateProps: BtnTemplateInterface = {
47
- name: isScreenshareActive ? 'screenshareOffIcon' : 'screenshareIcon',
46
+ const screenShareButton = isScreenshareActive ? 'Stop Share' : 'Share';
47
+ let iconButtonProps: IconButtonProps = {
48
+ iconProps: {
49
+ name: isScreenshareActive ? 'stop-screen-share' : 'screen-share',
50
+ tintColor: isScreenshareActive
51
+ ? $config.SEMANTIC_ERROR
52
+ : $config.SECONDARY_ACTION_COLOR,
53
+ },
48
54
  onPress,
55
+ btnTextProps: {
56
+ text: $config.ICON_TEXT ? screenShareButton : '',
57
+ textColor: $config.FONT_COLOR,
58
+ },
49
59
  };
50
60
 
51
- if (buttonTemplateName === ButtonTemplateName.topBar) {
52
- btnTemplateProps.style = isScreenshareActive
53
- ? (style.activeBtn as Object)
54
- : (style.nonActiveBtn as Object);
55
- } else {
56
- btnTemplateProps.btnText = screenShareButton;
57
- btnTemplateProps.style = isScreenshareActive
58
- ? style.greenLocalButton
59
- : style.localButton;
61
+ if (
62
+ rtcProps.role == ClientRole.Audience &&
63
+ $config.EVENT_MODE &&
64
+ !$config.RAISE_HAND
65
+ ) {
66
+ return null;
67
+ }
68
+
69
+ if (
70
+ rtcProps.role == ClientRole.Audience &&
71
+ $config.EVENT_MODE &&
72
+ $config.RAISE_HAND &&
73
+ !isHost
74
+ ) {
75
+ iconButtonProps.iconProps = {
76
+ ...iconButtonProps.iconProps,
77
+ tintColor: $config.SEMANTIC_NEUTRAL,
78
+ };
79
+ iconButtonProps.toolTipMessage = isHandRaised(local.uid)
80
+ ? 'Waiting for host to appove the request'
81
+ : 'Raise Hand in order to present';
82
+ iconButtonProps.disabled = true;
60
83
  }
61
84
 
62
85
  return props?.render ? (
63
- props.render(onPress, isScreenshareActive, buttonTemplateName)
86
+ props.render(onPress, isScreenshareActive)
64
87
  ) : (
65
- <BtnTemplate {...btnTemplateProps} />
88
+ <IconButton {...iconButtonProps} />
66
89
  );
67
90
  };
68
91
 
69
- const style = StyleSheet.create({
70
- localButton: {
71
- backgroundColor: $config.SECONDARY_FONT_COLOR,
72
- borderRadius: 20,
73
- borderColor: $config.PRIMARY_COLOR,
74
- width: 40,
75
- height: 40,
76
- display: 'flex',
77
- alignSelf: 'center',
78
- alignItems: 'center',
79
- justifyContent: 'center',
80
- },
81
- activeBtn: {
82
- backgroundColor: '#4BEB5B',
83
- borderRadius: 20,
84
- borderColor: '#F86051',
85
- width: '100%',
86
- height: '100%',
87
- resizeMode: 'contain',
88
- },
89
- nonActiveBtn: {
90
- width: '100%',
91
- height: '100%',
92
- resizeMode: 'contain',
93
- },
94
- greenLocalButton: {
95
- backgroundColor: '#4BEB5B',
96
- borderRadius: 20,
97
- borderColor: '#F86051',
98
- width: 40,
99
- height: 40,
100
- alignSelf: 'center',
101
- alignItems: 'center',
102
- justifyContent: 'center',
103
- },
104
- buttonIcon: {
105
- width: '90%',
106
- height: '90%',
107
- },
108
- });
109
-
110
92
  export default ScreenshareButton;
@@ -9,9 +9,9 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useEffect, useRef} from 'react';
12
+ import React, {useContext, useEffect, useRef} from 'react';
13
13
  import KeepAwake from 'react-native-keep-awake';
14
- import {UidType} from '../../../agora-rn-uikit';
14
+ import {DispatchContext, UidType} from '../../../agora-rn-uikit';
15
15
  import {
16
16
  getGridLayoutName,
17
17
  getPinnedLayoutName,
@@ -22,12 +22,12 @@ import {useScreenContext} from '../../components/contexts/ScreenShareContext';
22
22
  import {useString} from '../../utils/useString';
23
23
  import events from '../../rtm-events-api';
24
24
  import {EventNames, EventActions} from '../../rtm-events';
25
- import {useLayout, useRender, useRtc} from 'customization-api';
25
+ import {useLayout, useContent} from 'customization-api';
26
26
  import {filterObject} from '../../utils';
27
27
 
28
28
  export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
29
- const {dispatch} = useRtc();
30
- const {renderList, activeUids, lastJoinedUid} = useRender();
29
+ const {dispatch} = useContext(DispatchContext);
30
+ const {defaultContent, activeUids, lastJoinedUid, pinnedUid} = useContent();
31
31
  const isPinned = useRef(0);
32
32
  const {setScreenShareData, screenShareData} = useScreenContext();
33
33
  // commented for v1 release
@@ -38,12 +38,18 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
38
38
  const setPinnedLayout = useSetPinnedLayout();
39
39
  const changeLayout = useChangeDefaultLayout();
40
40
  const {currentLayout} = useLayout();
41
- const renderListRef = useRef({renderList: renderList});
41
+ const defaultContentRef = useRef({defaultContent: defaultContent});
42
42
  const currentLayoutRef = useRef({currentLayout: currentLayout});
43
43
 
44
+ const pinnedUidRef = useRef({pinnedUid: pinnedUid});
45
+
46
+ useEffect(() => {
47
+ pinnedUidRef.current.pinnedUid = pinnedUid;
48
+ }, [pinnedUid]);
49
+
44
50
  useEffect(() => {
45
- renderListRef.current.renderList = renderList;
46
- }, [renderList]);
51
+ defaultContentRef.current.defaultContent = defaultContent;
52
+ }, [defaultContent]);
47
53
 
48
54
  useEffect(() => {
49
55
  currentLayoutRef.current.currentLayout = currentLayout;
@@ -93,14 +99,15 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
93
99
  const value = payload.value;
94
100
 
95
101
  const screenUidOfUser =
96
- renderListRef.current.renderList[data.sender].screenUid;
102
+ defaultContentRef.current.defaultContent[data.sender].screenUid;
97
103
  switch (action) {
98
104
  case EventActions.SCREENSHARE_STARTED:
99
105
  setScreenShareData((prevState) => {
100
106
  return {
101
107
  ...prevState,
102
108
  [screenUidOfUser]: {
103
- name: renderListRef.current.renderList[screenUidOfUser]?.name,
109
+ name: defaultContentRef.current.defaultContent[screenUidOfUser]
110
+ ?.name,
104
111
  isActive: true,
105
112
  ts: value || 0,
106
113
  },
@@ -112,14 +119,18 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
112
119
  return {
113
120
  ...prevState,
114
121
  [screenUidOfUser]: {
115
- name: renderListRef.current.renderList[screenUidOfUser]?.name,
122
+ name: defaultContentRef.current.defaultContent[screenUidOfUser]
123
+ ?.name,
116
124
  isActive: false,
117
125
  ts: value || 0,
118
126
  },
119
127
  };
120
128
  });
121
129
  //if remote user started/stopped the screenshare then change the layout to pinned/grid
122
- triggerChangeLayout(false);
130
+ //if user pinned somebody then don't triggerlayout change
131
+ if (!pinnedUidRef.current.pinnedUid) {
132
+ triggerChangeLayout(false);
133
+ }
123
134
  break;
124
135
  default:
125
136
  break;
@@ -10,7 +10,7 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {useContext, useEffect, useRef, useState} from 'react';
13
- import {PropsContext, UidType} from '../../../agora-rn-uikit';
13
+ import {DispatchContext, PropsContext, UidType} from '../../../agora-rn-uikit';
14
14
  import {ScreenshareContext} from './useScreenshare';
15
15
  import {
16
16
  getGridLayoutName,
@@ -20,22 +20,27 @@ import {
20
20
  } from '../../pages/video-call/DefaultLayouts';
21
21
  import {useRecording} from '../recording/useRecording';
22
22
  import {useScreenContext} from '../../components/contexts/ScreenShareContext';
23
- import events, {EventPersistLevel} from '../../rtm-events-api';
23
+ import events, {PersistanceLevel} from '../../rtm-events-api';
24
24
  import {EventActions, EventNames} from '../../rtm-events';
25
25
  import {IAgoraRTC} from 'agora-rtc-sdk-ng';
26
26
  import useRecordingLayoutQuery from '../recording/useRecordingLayoutQuery';
27
27
  import {useString} from '../../utils/useString';
28
28
  import {timeNow} from '../../rtm/utils';
29
- import {useLayout, useRender, useRtc} from 'customization-api';
29
+ import {
30
+ controlMessageEnum,
31
+ useLayout,
32
+ useContent,
33
+ useRtc,
34
+ } from 'customization-api';
30
35
  import {filterObject} from '../../utils';
31
36
 
32
37
  export const ScreenshareContextConsumer = ScreenshareContext.Consumer;
33
38
 
34
39
  export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
35
40
  const [isScreenshareActive, setScreenshareActive] = useState(false);
41
+ const {dispatch} = useContext(DispatchContext);
36
42
  const rtc = useRtc();
37
- const {dispatch} = rtc;
38
- const {renderList, activeUids, lastJoinedUid} = useRender();
43
+ const {defaultContent, activeUids, lastJoinedUid, pinnedUid} = useContent();
39
44
  const isPinned = useRef(0);
40
45
  const {isRecordingActive} = useRecording();
41
46
  const {executeNormalQuery, executePresenterQuery} = useRecordingLayoutQuery();
@@ -53,11 +58,16 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
53
58
  const {channel, appId, screenShareUid, screenShareToken, encryption} =
54
59
  useContext(PropsContext).rtcProps;
55
60
 
56
- const renderListRef = useRef({renderList: renderList});
61
+ const defaultContentRef = useRef({defaultContent: defaultContent});
62
+ const pinnedUidRef = useRef({pinnedUid: pinnedUid});
63
+
64
+ useEffect(() => {
65
+ pinnedUidRef.current.pinnedUid = pinnedUid;
66
+ }, [pinnedUid]);
57
67
 
58
68
  useEffect(() => {
59
- renderListRef.current.renderList = renderList;
60
- }, [renderList]);
69
+ defaultContentRef.current.defaultContent = defaultContent;
70
+ }, [defaultContent]);
61
71
 
62
72
  useEffect(() => {
63
73
  currentLayoutRef.current.currentLayout = currentLayout;
@@ -109,20 +119,27 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
109
119
  };
110
120
 
111
121
  useEffect(() => {
122
+ events.on(controlMessageEnum.kickScreenshare, () => {
123
+ //if screenscreen already active. then below method will stop the screen share
124
+ // @ts-ignore
125
+ rtc.RtcEngineUnsafe.startScreenshare();
126
+ });
127
+
112
128
  events.on(EventNames.SCREENSHARE_ATTRIBUTE, (data) => {
113
129
  const payload = JSON.parse(data.payload);
114
130
  const action = payload.action;
115
131
  const value = payload.value;
116
132
 
117
133
  const screenUidOfUser =
118
- renderListRef.current.renderList[data.sender].screenUid;
134
+ defaultContentRef.current.defaultContent[data.sender].screenUid;
119
135
  switch (action) {
120
136
  case EventActions.SCREENSHARE_STARTED:
121
137
  setScreenShareData((prevState) => {
122
138
  return {
123
139
  ...prevState,
124
140
  [screenUidOfUser]: {
125
- name: renderListRef.current.renderList[screenUidOfUser]?.name,
141
+ name: defaultContentRef.current.defaultContent[screenUidOfUser]
142
+ ?.name,
126
143
  isActive: true,
127
144
  ts: value || 0,
128
145
  },
@@ -134,14 +151,18 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
134
151
  return {
135
152
  ...prevState,
136
153
  [screenUidOfUser]: {
137
- name: renderListRef.current.renderList[screenUidOfUser]?.name,
154
+ name: defaultContentRef.current.defaultContent[screenUidOfUser]
155
+ ?.name,
138
156
  isActive: false,
139
157
  ts: value || 0,
140
158
  },
141
159
  };
142
160
  });
143
161
  //if remote user started/stopped the screenshare then change the layout to pinned/grid
144
- triggerChangeLayout(false);
162
+ //if user pinned somebody then don't triggerlayout change
163
+ if (!pinnedUidRef.current.pinnedUid) {
164
+ triggerChangeLayout(false);
165
+ }
145
166
  break;
146
167
  default:
147
168
  break;
@@ -151,7 +172,7 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
151
172
 
152
173
  useEffect(() => {
153
174
  // @ts-ignore
154
- rtc.RtcEngine.addListener('ScreenshareStopped', () => {
175
+ rtc.RtcEngineUnsafe.addListener('ScreenshareStopped', () => {
155
176
  setScreenshareActive(false);
156
177
  console.log('STOPPED SHARING');
157
178
  executeNormalQuery();
@@ -161,7 +182,7 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
161
182
  action: EventActions.SCREENSHARE_STOPPED,
162
183
  value: 0,
163
184
  }),
164
- EventPersistLevel.LEVEL2,
185
+ PersistanceLevel.Sender,
165
186
  );
166
187
  setScreenShareData((prevState) => {
167
188
  return {
@@ -174,7 +195,10 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
174
195
  };
175
196
  });
176
197
  //if local user stopped the screenshare then change layout to grid
177
- triggerChangeLayout(false);
198
+ //if user pinned somebody then don't triggerlayout change
199
+ if (!pinnedUidRef.current.pinnedUid) {
200
+ triggerChangeLayout(false);
201
+ }
178
202
  });
179
203
  }, []);
180
204
 
@@ -205,13 +229,13 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
205
229
  console.log('screenshare query executed');
206
230
  try {
207
231
  // @ts-ignore
208
- await rtc.RtcEngine.startScreenshare(
232
+ await rtc.RtcEngineUnsafe.startScreenshare(
209
233
  screenShareToken,
210
234
  channel,
211
235
  null,
212
236
  screenShareUid,
213
237
  appId,
214
- rtc.RtcEngine as unknown as IAgoraRTC,
238
+ rtc.RtcEngineUnsafe as unknown as IAgoraRTC,
215
239
  encryption as unknown as any,
216
240
  );
217
241
  isActive && setScreenshareActive(true);
@@ -222,7 +246,8 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
222
246
  return {
223
247
  ...prevState,
224
248
  [screenShareUid]: {
225
- name: renderListRef.current.renderList[screenShareUid]?.name,
249
+ name: defaultContentRef.current.defaultContent[screenShareUid]
250
+ ?.name,
226
251
  isActive: true,
227
252
  ts: timeNow(),
228
253
  },
@@ -235,7 +260,7 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
235
260
  action: EventActions.SCREENSHARE_STARTED,
236
261
  value: timeNow(),
237
262
  }),
238
- EventPersistLevel.LEVEL2,
263
+ PersistanceLevel.Sender,
239
264
  );
240
265
  }
241
266
  } catch (e) {