agora-appbuilder-core 2.2.0 → 2.3.0-beta.10

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 (303) hide show
  1. package/Readme.md +7 -1
  2. package/package.json +4 -3
  3. package/template/Gulpfile.js +389 -82
  4. package/template/_gitignore +4 -1
  5. package/template/_package-lock.json +32214 -3080
  6. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
  7. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
  8. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
  9. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
  12. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
  14. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
  16. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
  17. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
  21. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
  24. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
  25. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
  26. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
  27. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
  28. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
  30. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
  31. package/template/agora-rn-uikit/src/Rtc/Create.tsx +22 -3
  32. package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
  33. package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
  34. package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
  35. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
  36. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
  37. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
  38. package/template/agora-rn-uikit/src/index.ts +12 -12
  39. package/template/babel.config.js +17 -1
  40. package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
  41. package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
  42. package/template/bridge/rtc/webNg/Types.ts +14 -0
  43. package/template/bridge/rtc/webNg/index.ts +5 -2
  44. package/template/bridge/rtm/web/index.ts +13 -7
  45. package/template/electron-builder.js +3 -2
  46. package/template/esbuild.rsdk.go +240 -0
  47. package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
  48. package/template/fpe-api/components.ts +43 -0
  49. package/template/fpe-api/context.ts +45 -0
  50. package/template/fpe-api/fpeEvents.ts +9 -0
  51. package/template/fpe-api/index.ts +21 -0
  52. package/template/fpe-api/install.ts +138 -0
  53. package/template/fpe-api/typeDefinition.ts +144 -0
  54. package/template/fpe-api/useFpe.tsx +35 -0
  55. package/template/fpe-api/utils.ts +61 -0
  56. package/template/fpe-implementation/createHook.ts +33 -0
  57. package/template/fpe-implementation/dummyFpe.ts +17 -0
  58. package/template/fpe-implementation/index.ts +1 -0
  59. package/template/fpe-todo.txt +14 -0
  60. package/template/fpe.config.js +29 -0
  61. package/template/global.d.ts +4 -0
  62. package/template/index.rsdk.tsx +27 -0
  63. package/template/index.wsdk.tsx +27 -0
  64. package/template/package.json +30 -13
  65. package/template/react-native-toast-message/src/index.js +9 -10
  66. package/template/react-native-toast-message/src/index.wsdk.js +419 -0
  67. package/template/src/App.tsx +97 -65
  68. package/template/src/AppWrapper.tsx +79 -0
  69. package/template/src/SDKAppWrapper.tsx +67 -0
  70. package/template/src/atoms/PrimaryButton.tsx +14 -8
  71. package/template/src/atoms/TextInput.tsx +13 -5
  72. package/template/src/components/Chat.tsx +178 -137
  73. package/template/src/components/ChatContext.ts +18 -22
  74. package/template/src/components/ColorConfigure.tsx +2 -2
  75. package/template/src/components/Controls.native.tsx +72 -62
  76. package/template/src/components/Controls.tsx +90 -69
  77. package/template/src/components/DeviceConfigure.tsx +1 -1
  78. package/template/src/components/DeviceContext.tsx +14 -7
  79. package/template/src/components/GraphQLProvider.tsx +9 -2
  80. package/template/src/components/GridVideo.tsx +20 -159
  81. package/template/src/components/HostControlView.tsx +54 -15
  82. package/template/src/components/Navbar.tsx +408 -157
  83. package/template/src/components/NetworkQualityContext.tsx +29 -22
  84. package/template/src/components/ParticipantsView.tsx +91 -115
  85. package/template/src/components/PinnedVideo.tsx +41 -188
  86. package/template/src/components/Precall.native.tsx +131 -97
  87. package/template/src/components/Precall.tsx +193 -158
  88. package/template/src/components/RTMConfigure.tsx +309 -415
  89. package/template/src/components/Router.sdk.ts +20 -0
  90. package/template/src/components/SessionContext.tsx +6 -3
  91. package/template/src/components/Settings.native.tsx +3 -0
  92. package/template/src/components/Settings.tsx +65 -31
  93. package/template/src/components/SettingsView.tsx +14 -8
  94. package/template/src/components/Share.tsx +188 -220
  95. package/template/src/components/StorageContext.tsx +5 -5
  96. package/template/src/components/StoreToken.tsx +5 -1
  97. package/template/src/components/chat-messages/useChatMessages.tsx +208 -0
  98. package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
  99. package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
  100. package/template/src/components/common/Error.tsx +54 -0
  101. package/template/src/components/common/Logo.tsx +35 -0
  102. package/template/src/components/common/index.tsx +8 -0
  103. package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
  104. package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
  105. package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
  106. package/template/src/components/dimension/DimensionContext.ts +27 -0
  107. package/template/src/components/dimension/DimensionProvider.tsx +34 -0
  108. package/template/src/components/livestream/LiveStreamContext.tsx +297 -273
  109. package/template/src/components/livestream/Types.ts +26 -7
  110. package/template/src/components/livestream/index.ts +13 -2
  111. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
  112. package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
  113. package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
  114. package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
  115. package/template/src/components/participants/AllHostParticipants.tsx +41 -53
  116. package/template/src/components/participants/MeParticipant.tsx +9 -10
  117. package/template/src/components/participants/ParticipantName.tsx +2 -1
  118. package/template/src/components/participants/RemoteParticipants.tsx +3 -3
  119. package/template/src/components/precall/LocalMute.native.tsx +91 -0
  120. package/template/src/components/precall/LocalMute.tsx +90 -0
  121. package/template/src/components/precall/VideoPreview.native.tsx +35 -0
  122. package/template/src/components/precall/VideoPreview.tsx +33 -0
  123. package/template/src/components/precall/index.tsx +28 -0
  124. package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
  125. package/template/src/components/precall/joinCallBtn.tsx +91 -0
  126. package/template/src/components/precall/meetingTitle.tsx +26 -0
  127. package/template/src/components/precall/selectDevice.tsx +46 -0
  128. package/template/src/components/precall/textInput.tsx +43 -0
  129. package/template/src/components/precall/usePreCall.tsx +41 -0
  130. package/template/src/components/styles.ts +20 -3
  131. package/template/src/components/useShareLink.tsx +237 -0
  132. package/template/src/components/useUserPreference.tsx +125 -0
  133. package/template/src/components/useWakeLock.tsx +3 -3
  134. package/template/src/custom-events/CustomEvents.ts +238 -0
  135. package/template/src/custom-events/index.tsx +4 -0
  136. package/template/src/custom-events/types.ts +51 -0
  137. package/template/src/language/default-labels/commonLabels.ts +21 -0
  138. package/template/src/language/default-labels/createScreenLabels.ts +22 -0
  139. package/template/src/language/default-labels/index.ts +38 -0
  140. package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
  141. package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
  142. package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
  143. package/template/src/language/default-labels/videoCallScreenLabels.ts +191 -0
  144. package/template/src/language/i18nTypes.ts +10 -0
  145. package/template/src/language/index.ts +18 -0
  146. package/template/src/language/useLanguage.tsx +92 -0
  147. package/template/src/pages/Authenticate.tsx +21 -15
  148. package/template/src/pages/Create.tsx +180 -159
  149. package/template/src/pages/Join.tsx +47 -32
  150. package/template/src/pages/VideoCall.tsx +138 -407
  151. package/template/src/pages/create/useCreate.tsx +37 -0
  152. package/template/src/pages/video-call/CustomLayout.ts +17 -0
  153. package/template/src/pages/video-call/CustomUserContextHolder.tsx +20 -0
  154. package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
  155. package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
  156. package/template/src/pages/video-call/RenderComponent.tsx +52 -0
  157. package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
  158. package/template/src/pages/video-call/VideoComponent.tsx +34 -0
  159. package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
  160. package/template/src/pages/video-call/index.ts +20 -0
  161. package/template/src/rtm/RTMEngine.ts +58 -0
  162. package/template/src/rtm/utils.ts +44 -0
  163. package/template/src/rtm-events/EventUtils.ts +267 -0
  164. package/template/src/rtm-events/EventsQueue.ts +38 -0
  165. package/template/src/rtm-events/constants.ts +42 -0
  166. package/template/src/rtm-events/index.tsx +8 -0
  167. package/template/src/rtm-events/types.ts +7 -0
  168. package/template/src/subComponents/ChatBubble.tsx +21 -12
  169. package/template/src/subComponents/ChatContainer.tsx +79 -30
  170. package/template/src/subComponents/ChatInput.tsx +146 -70
  171. package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
  172. package/template/src/subComponents/Error.tsx +35 -24
  173. package/template/src/subComponents/LanguageSelector.tsx +85 -0
  174. package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
  175. package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
  176. package/template/src/subComponents/LocalAudioMute.tsx +52 -30
  177. package/template/src/subComponents/LocalEndCall.tsx +52 -0
  178. package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
  179. package/template/src/subComponents/LocalVideoMute.tsx +48 -30
  180. package/template/src/subComponents/LogoutButton.tsx +20 -5
  181. package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
  182. package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
  183. package/template/src/subComponents/Recording.tsx +46 -138
  184. package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
  185. package/template/src/subComponents/RemoteEndCall.tsx +18 -7
  186. package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
  187. package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
  188. package/template/src/subComponents/SelectDevice.tsx +88 -45
  189. package/template/src/subComponents/SelectOAuth.tsx +30 -6
  190. package/template/src/subComponents/SidePanelButtons.ts +39 -0
  191. package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
  192. package/template/src/subComponents/TextWithTooltip.tsx +15 -20
  193. package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
  194. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
  195. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
  196. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
  197. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
  198. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
  199. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
  200. package/template/src/subComponents/livestream/index.ts +10 -2
  201. package/template/src/subComponents/recording/useRecording.tsx +209 -0
  202. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
  203. package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
  204. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +61 -31
  205. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
  206. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +104 -144
  207. package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
  208. package/template/src/subComponents/toastConfig.tsx +25 -20
  209. package/template/src/utils/IsAttendeeUser.ts +34 -0
  210. package/template/src/utils/SdkEvents.ts +68 -0
  211. package/template/src/utils/common.tsx +40 -0
  212. package/template/src/utils/eventEmitter.ts +29 -0
  213. package/template/src/utils/getMeetingInvite.ts +53 -0
  214. package/template/src/utils/index.tsx +11 -2
  215. package/template/src/utils/isAudioEnabled.ts +29 -0
  216. package/template/src/utils/isHostUser.ts +33 -0
  217. package/template/src/utils/isMobileOrTablet.native.ts +5 -0
  218. package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
  219. package/template/src/utils/isPSTNUser.ts +30 -0
  220. package/template/src/utils/isSDK.sdk.ts +5 -0
  221. package/template/src/utils/isSDK.ts +5 -0
  222. package/template/src/utils/isScreenShareUser.ts +31 -0
  223. package/template/src/utils/isVideoEnabled.ts +29 -0
  224. package/template/src/utils/useButtonTemplate.tsx +43 -0
  225. package/template/src/utils/useCreateMeeting.ts +74 -0
  226. package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
  227. package/template/src/utils/useGetMeetingPhrase.ts +68 -0
  228. package/template/src/utils/useGetName.ts +19 -0
  229. package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
  230. package/template/src/utils/useJoinMeeting.ts +128 -0
  231. package/template/src/utils/useLayout.tsx +40 -0
  232. package/template/src/utils/useLiveStreamingUids.ts +26 -0
  233. package/template/src/utils/useLocalShareScreenUid.ts +19 -0
  234. package/template/src/utils/useMutePSTN.ts +43 -0
  235. package/template/src/utils/useMuteToggleLocal.ts +109 -0
  236. package/template/src/utils/useNavParams.ts +6 -0
  237. package/template/src/utils/useNavigateTo.ts +8 -0
  238. package/template/src/utils/usePrivateMessages.ts +33 -0
  239. package/template/src/utils/useRemoteEndCall.ts +27 -0
  240. package/template/src/utils/useRemoteMute.ts +64 -0
  241. package/template/src/utils/useSendControlMessage.ts +51 -0
  242. package/template/src/utils/useSendMessage.ts +40 -0
  243. package/template/src/utils/useSetName.ts +18 -0
  244. package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
  245. package/template/src/utils/useSidePanel.tsx +41 -0
  246. package/template/src/utils/useString.ts +61 -0
  247. package/template/src/utils/useUnreadMessageCount.ts +50 -0
  248. package/template/src/utils/useUserList.ts +26 -0
  249. package/template/tsconfig.json +4 -4
  250. package/template/tsconfig_fpeApi.json +103 -0
  251. package/template/tsconfig_rsdk_index.json +105 -0
  252. package/template/tsconfig_wsdk_index.json +104 -0
  253. package/template/webpack.commons.js +40 -16
  254. package/template/webpack.main.config.js +2 -1
  255. package/template/webpack.renderer.config.js +1 -1
  256. package/template/webpack.rsdk.config.js +33 -0
  257. package/template/webpack.ts.config.js +89 -0
  258. package/template/webpack.web.config.js +8 -1
  259. package/template/webpack.wsdk.config.js +34 -0
  260. package/template/agora-rn-uikit/.git/HEAD +0 -1
  261. package/template/agora-rn-uikit/.git/config +0 -16
  262. package/template/agora-rn-uikit/.git/description +0 -1
  263. package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
  264. package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
  265. package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -173
  266. package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
  267. package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
  268. package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
  269. package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
  270. package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
  271. package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
  272. package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
  273. package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
  274. package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
  275. package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
  276. package/template/agora-rn-uikit/.git/index +0 -0
  277. package/template/agora-rn-uikit/.git/info/exclude +0 -6
  278. package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
  279. package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
  280. package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
  281. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
  282. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
  283. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.pack +0 -0
  284. package/template/agora-rn-uikit/.git/packed-refs +0 -24
  285. package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
  286. package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
  287. package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
  288. package/template/agora-rn-uikit/.gitignore +0 -63
  289. package/template/agora-rn-uikit/package-lock.json +0 -7612
  290. package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
  291. package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
  292. package/template/package-lock.json +0 -22923
  293. package/template/react-native-toast-message/.gitignore +0 -5
  294. package/template/react-native-toast-message/.npmignore +0 -5
  295. package/template/react-native-toast-message/package-lock.json +0 -10553
  296. package/template/src/.DS_Store +0 -0
  297. package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
  298. package/template/src/subComponents/.DS_Store +0 -0
  299. package/template/src/subComponents/ScreenshareButton.tsx +0 -257
  300. package/template/src/subComponents/SwitchCamera.tsx +0 -35
  301. package/template/src/utils/hasBrandLogo.tsx +0 -3
  302. package/template/src/utils/mobileWebTest.native.tsx +0 -5
  303. package/template/src/utils/shouldAuthenticate.tsx +0 -7
@@ -0,0 +1,33 @@
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
+
13
+ import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
14
+ import {useLiveStreamDataContext} from '../components/contexts/LiveStreamDataContext';
15
+ import {UidType} from '../../agora-rn-uikit';
16
+
17
+ function useIsHost() {
18
+ if ($config.EVENT_MODE) {
19
+ const {hostUids} = useLiveStreamDataContext();
20
+ const isHost = (uid: UidType) => {
21
+ return hostUids.filter((hostId) => hostId === uid).length ? true : false;
22
+ };
23
+ return isHost;
24
+ } else {
25
+ const {isHost} = useMeetingInfo();
26
+ const isHostFun = (uid: UidType) => {
27
+ return isHost ? true : false;
28
+ };
29
+ return isHostFun;
30
+ }
31
+ }
32
+
33
+ export default useIsHost;
@@ -0,0 +1,5 @@
1
+ const isMobileOrTablet = () => {
2
+ return true;
3
+ }
4
+
5
+ export default isMobileOrTablet;
@@ -1,7 +1,10 @@
1
- const mobileAndTabletCheck = () => {
1
+ declare global{
2
+ interface Window {opera?: any}
3
+ }
4
+ const isMobileOrTablet = () => {
2
5
  let check = false;
3
6
  (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator?.userAgent||navigator?.vendor||window?.opera);
4
7
  return check;
5
8
  }
6
9
 
7
- export default mobileAndTabletCheck;
10
+ export default isMobileOrTablet;
@@ -0,0 +1,30 @@
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 {UidType} from '../../agora-rn-uikit';
13
+ import useUserList from './useUserList';
14
+ /**
15
+ * This hook will return the function to check whether the current user is a PSTN user or not
16
+ * @returns function
17
+ */
18
+ function useIsPSTN() {
19
+ const {renderList} = useUserList();
20
+ /**
21
+ *
22
+ * @param uid number
23
+ * @returns boolean
24
+ */
25
+ const isPSTN = (uid: UidType) =>
26
+ !renderList[uid] && String(uid)[0] === '1' ? true : false;
27
+ return isPSTN;
28
+ }
29
+
30
+ export default useIsPSTN;
@@ -0,0 +1,5 @@
1
+ const isSDK = () => {
2
+ return true;
3
+ }
4
+
5
+ export default isSDK;
@@ -0,0 +1,5 @@
1
+ const isSDK = () => {
2
+ return false;
3
+ }
4
+
5
+ export default isSDK;
@@ -0,0 +1,31 @@
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 {UidType} from '../../agora-rn-uikit';
13
+ import {useScreenContext} from '../components/contexts/ScreenShareContext';
14
+
15
+ /**
16
+ * This hook will return the function to check whether the screen is shared or not
17
+ * @returns function
18
+ */
19
+ function useIsScreenShare() {
20
+ const {screenShareData} = useScreenContext();
21
+ /**
22
+ *
23
+ * @param uid number | string
24
+ * @returns boolean
25
+ */
26
+ const isScreenShare = (uid: UidType): boolean =>
27
+ screenShareData[uid]?.isActive ? true : false;
28
+ return isScreenShare;
29
+ }
30
+
31
+ export default useIsScreenShare;
@@ -0,0 +1,29 @@
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 {UidType} from '../../agora-rn-uikit';
13
+ import {ToggleState} from '../../agora-rn-uikit/src/Contexts/PropsContext';
14
+ import useUserList from './useUserList';
15
+
16
+ function useIsVideoEnabled() {
17
+ const {renderList} = useUserList();
18
+
19
+ /**
20
+ *
21
+ * @param uid UidType
22
+ * @returns boolean
23
+ */
24
+ const videoEnabled = (uid: UidType): boolean =>
25
+ renderList[uid]?.video === ToggleState.enabled;
26
+
27
+ return videoEnabled;
28
+ }
29
+ export default useIsVideoEnabled;
@@ -0,0 +1,43 @@
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
+
13
+ import React from 'react';
14
+ import {createHook} from 'fpe-implementation';
15
+
16
+ export enum ButtonTemplateName {
17
+ topBar,
18
+ bottomBar,
19
+ }
20
+
21
+ export interface ButtonTemplateInferface {
22
+ buttonTemplateName?: ButtonTemplateName;
23
+ }
24
+
25
+ const ButtonTemplateContext = React.createContext<ButtonTemplateInferface>({
26
+ buttonTemplateName: undefined,
27
+ });
28
+
29
+ interface ButtonTemplateProviderProps {
30
+ value: ButtonTemplateInferface;
31
+ children: React.ReactNode;
32
+ }
33
+ const ButtonTemplateProvider = (props: ButtonTemplateProviderProps) => {
34
+ return (
35
+ <ButtonTemplateContext.Provider value={{...props.value}}>
36
+ {props.children}
37
+ </ButtonTemplateContext.Provider>
38
+ );
39
+ };
40
+
41
+ const useButtonTemplate = createHook(ButtonTemplateContext);
42
+
43
+ export {ButtonTemplateProvider, useButtonTemplate};
@@ -0,0 +1,74 @@
1
+ import {gql, useMutation} from '@apollo/client';
2
+ import {MeetingInfoContextInterface} from '../components/meeting-info/useMeetingInfo';
3
+ import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
4
+
5
+ const CREATE_CHANNEL = gql`
6
+ mutation CreateChannel(
7
+ $title: String!
8
+ $backendURL: String!
9
+ $enablePSTN: Boolean
10
+ ) {
11
+ createChannel(
12
+ title: $title
13
+ backendURL: $backendURL
14
+ enablePSTN: $enablePSTN
15
+ ) {
16
+ passphrase {
17
+ host
18
+ view
19
+ }
20
+ channel
21
+ title
22
+ pstn {
23
+ number
24
+ dtmf
25
+ }
26
+ }
27
+ }
28
+ `;
29
+ export default function useCreateMeeting() {
30
+ const [createChannel, {error}] = useMutation(CREATE_CHANNEL);
31
+ const {setMeetingInfo} = useSetMeetingInfo();
32
+ return async (
33
+ roomTitle: string,
34
+ enablePSTN?: boolean,
35
+ isSeparateHostLink?: boolean,
36
+ ) => {
37
+ const res = await createChannel({
38
+ variables: {
39
+ title: roomTitle,
40
+ backendURL: $config.BACKEND_ENDPOINT,
41
+ enablePSTN: enablePSTN,
42
+ },
43
+ });
44
+ if (error) {
45
+ throw error;
46
+ }
47
+ if (res && res?.data && res?.data?.createChannel) {
48
+ let meetingInfoPassPhrase: MeetingInfoContextInterface['meetingPassphrase'] =
49
+ {
50
+ attendee: '',
51
+ };
52
+ if (res?.data?.createChannel?.passphrase?.view) {
53
+ meetingInfoPassPhrase.attendee = res.data.createChannel.passphrase.view;
54
+ }
55
+ if (res?.data?.createChannel?.passphrase?.host) {
56
+ meetingInfoPassPhrase.host = res.data.createChannel.passphrase.host;
57
+ }
58
+ if (enablePSTN === true && res?.data?.createChannel?.pstn) {
59
+ meetingInfoPassPhrase.pstn = {
60
+ number: res.data.createChannel.pstn.number,
61
+ pin: res.data.createChannel.pstn.dtmf,
62
+ };
63
+ }
64
+ setMeetingInfo({
65
+ isHost: true,
66
+ isSeparateHostLink: isSeparateHostLink ? true : false,
67
+ meetingTitle: roomTitle,
68
+ meetingPassphrase: meetingInfoPassPhrase,
69
+ });
70
+ } else {
71
+ throw new Error(`An error occurred in parsing the channel data.`);
72
+ }
73
+ };
74
+ }
@@ -0,0 +1,24 @@
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 {useContext} from 'react';
13
+ import LiveStreamContext from '../components/livestream';
14
+ /**
15
+ * This hook will fetch the user list
16
+ * @returns userList
17
+ */
18
+
19
+ function useGetLiveStreamingRequests() {
20
+ const {currLiveStreamRequest} = useContext(LiveStreamContext);
21
+ return currLiveStreamRequest;
22
+ }
23
+
24
+ export default useGetLiveStreamingRequests;
@@ -0,0 +1,68 @@
1
+ import {useContext} from 'react';
2
+ import {gql} from '@apollo/client';
3
+ import {MeetingInfoContextInterface} from '../components/meeting-info/useMeetingInfo';
4
+ import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
5
+ import {GraphQLContext} from '../components/GraphQLProvider';
6
+
7
+ const SHARE = gql`
8
+ query share($passphrase: String!) {
9
+ share(passphrase: $passphrase) {
10
+ passphrase {
11
+ host
12
+ view
13
+ }
14
+ channel
15
+ title
16
+ pstn {
17
+ number
18
+ dtmf
19
+ }
20
+ }
21
+ }
22
+ `;
23
+
24
+ export default function useGetMeetingPhrase() {
25
+ const {setMeetingInfo} = useSetMeetingInfo();
26
+ const {client} = useContext(GraphQLContext);
27
+ return async (phrase: string) => {
28
+ const response = await client.query({
29
+ query: SHARE,
30
+ variables: {
31
+ passphrase: phrase,
32
+ },
33
+ });
34
+ if (response.error) {
35
+ throw response.error;
36
+ } else {
37
+ try {
38
+ if (response && response.data) {
39
+ let data = response.data;
40
+ let meetingPassphrase: MeetingInfoContextInterface['meetingPassphrase'] =
41
+ {
42
+ attendee: '',
43
+ };
44
+ if (data?.share?.passphrase?.view) {
45
+ meetingPassphrase.attendee = data.share.passphrase.view;
46
+ }
47
+ if (data?.share?.passphrase?.host) {
48
+ meetingPassphrase.host = data.share.passphrase.host;
49
+ }
50
+ if (data?.share?.pstn) {
51
+ meetingPassphrase.pstn = {
52
+ number: data.share.pstn.number,
53
+ pin: data.share.pstn.dtmf,
54
+ };
55
+ }
56
+ setMeetingInfo((prevState) => {
57
+ return {
58
+ ...prevState,
59
+ meetingPassphrase,
60
+ };
61
+ });
62
+ }
63
+ } catch (error) {
64
+ throw new Error('An error occurred in parsing the channel data.');
65
+ }
66
+ }
67
+ };
68
+ }
@@ -0,0 +1,19 @@
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 {useUserPreference} from '../components/useUserPreference';
13
+
14
+ function useGetName() {
15
+ const {displayName} = useUserPreference();
16
+ return displayName;
17
+ }
18
+
19
+ export default useGetName;
@@ -9,13 +9,16 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import {createContext} from 'react';
13
12
 
14
- interface ScreenshareContext {
15
- screenshareActive: boolean;
16
- startUserScreenshare: () => void;
17
- stopUserScreenShare: () => void;
13
+ import {useChatMessages} from '../components/chat-messages/useChatMessages';
14
+
15
+ /**
16
+ * This hook will fetch the group messages
17
+ * @returns userList
18
+ */
19
+ function useGroupMessages() {
20
+ const {messageStore} = useChatMessages();
21
+ return messageStore;
18
22
  }
19
23
 
20
- const ScreenshareContext = createContext(null as unknown as ScreenshareContext);
21
- export default ScreenshareContext;
24
+ export default useGroupMessages;
@@ -0,0 +1,128 @@
1
+ import {useContext} from 'react';
2
+ import {gql} from '@apollo/client';
3
+ import StorageContext from '../components/StorageContext';
4
+ import {MeetingInfoContextInterface} from '../components/meeting-info/useMeetingInfo';
5
+ import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
6
+ import {GraphQLContext} from '../components/GraphQLProvider';
7
+
8
+ const JOIN_CHANNEL_PHRASE_AND_GET_USER = gql`
9
+ query JoinChannel($passphrase: String!) {
10
+ joinChannel(passphrase: $passphrase) {
11
+ channel
12
+ title
13
+ isHost
14
+ secret
15
+ mainUser {
16
+ rtc
17
+ rtm
18
+ uid
19
+ }
20
+ screenShare {
21
+ rtc
22
+ rtm
23
+ uid
24
+ }
25
+ }
26
+ getUser {
27
+ name
28
+ email
29
+ }
30
+ }
31
+ `;
32
+
33
+ const JOIN_CHANNEL_PHRASE = gql`
34
+ query JoinChannel($passphrase: String!) {
35
+ joinChannel(passphrase: $passphrase) {
36
+ channel
37
+ title
38
+ isHost
39
+ secret
40
+ mainUser {
41
+ rtc
42
+ rtm
43
+ uid
44
+ }
45
+ screenShare {
46
+ rtc
47
+ rtm
48
+ uid
49
+ }
50
+ }
51
+ }
52
+ `;
53
+
54
+ export default function useJoinMeeting() {
55
+ const {store} = useContext(StorageContext);
56
+ const {setMeetingInfo} = useSetMeetingInfo();
57
+ const {client} = useContext(GraphQLContext);
58
+ return async (phrase: string) => {
59
+ setMeetingInfo((prevState) => {
60
+ return {
61
+ ...prevState,
62
+ isJoinDataFetched: false,
63
+ };
64
+ });
65
+ try {
66
+ const response = await client.query({
67
+ query:
68
+ store.token === null
69
+ ? JOIN_CHANNEL_PHRASE
70
+ : JOIN_CHANNEL_PHRASE_AND_GET_USER,
71
+ variables: {
72
+ passphrase: phrase,
73
+ },
74
+ });
75
+ if (response.error) {
76
+ throw response.error;
77
+ } else {
78
+ if (response && response.data) {
79
+ let data = response.data;
80
+ let meetingInfo: Partial<MeetingInfoContextInterface> = {
81
+ isJoinDataFetched: true,
82
+ };
83
+ if (data?.joinChannel?.channel) {
84
+ meetingInfo.channel = data.joinChannel.channel;
85
+ }
86
+ if (data?.joinChannel?.mainUser?.uid) {
87
+ meetingInfo.uid = data.joinChannel.mainUser.uid;
88
+ }
89
+ if (data?.joinChannel?.mainUser?.rtc) {
90
+ meetingInfo.token = data.joinChannel.mainUser.rtc;
91
+ }
92
+ if (data?.joinChannel?.mainUser?.rtm) {
93
+ meetingInfo.rtm = data.joinChannel.mainUser.rtm;
94
+ }
95
+ if (data?.joinChannel?.secret) {
96
+ meetingInfo.secret = data.joinChannel.secret;
97
+ }
98
+ if (data?.joinChannel?.screenShare?.uid) {
99
+ meetingInfo.screenShareUid = data.joinChannel.screenShare.uid;
100
+ }
101
+ if (data?.joinChannel?.screenShare?.rtc) {
102
+ meetingInfo.screenShareToken = data.joinChannel.screenShare.rtc;
103
+ }
104
+ if (data?.joinChannel?.isHost) {
105
+ meetingInfo.isHost = data.joinChannel.isHost;
106
+ }
107
+ if (data?.joinChannel?.title) {
108
+ meetingInfo.meetingTitle = data.joinChannel.title;
109
+ }
110
+ //getUser is not available from backend
111
+ // if (data?.getUser?.name) {
112
+ // meetingInfo.username = data.getUser.name;
113
+ // }
114
+ setMeetingInfo((prevState) => {
115
+ return {
116
+ ...prevState,
117
+ ...meetingInfo,
118
+ };
119
+ });
120
+ } else {
121
+ throw new Error('An error occurred in parsing the channel data.');
122
+ }
123
+ }
124
+ } catch (error) {
125
+ throw error;
126
+ }
127
+ };
128
+ }
@@ -0,0 +1,40 @@
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
+
13
+ import React, {SetStateAction} from 'react';
14
+ import {createHook} from 'fpe-implementation';
15
+
16
+ export interface LayoutContextInterface {
17
+ activeLayoutName: string;
18
+ setActiveLayoutName: React.Dispatch<SetStateAction<string>>;
19
+ }
20
+
21
+ const LayoutContext = React.createContext<LayoutContextInterface>({
22
+ activeLayoutName: '',
23
+ setActiveLayoutName: () => {},
24
+ });
25
+
26
+ interface LayoutProviderProps {
27
+ value: LayoutContextInterface;
28
+ children: React.ReactNode;
29
+ }
30
+ const LayoutProvider = (props: LayoutProviderProps) => {
31
+ return (
32
+ <LayoutContext.Provider value={{...props.value}}>
33
+ {props.children}
34
+ </LayoutContext.Provider>
35
+ );
36
+ };
37
+
38
+ const useLayout = createHook(LayoutContext);
39
+
40
+ export {LayoutProvider, useLayout};
@@ -0,0 +1,26 @@
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 {useLiveStreamDataContext} from '../components/contexts/LiveStreamDataContext';
13
+ /**
14
+ * This hook will fetch the user list
15
+ * @returns userList
16
+ */
17
+
18
+ function useLiveStreamingUids() {
19
+ const {audienceUids, hostUids} = useLiveStreamDataContext();
20
+ return {
21
+ hostUids: hostUids,
22
+ audienceUids: audienceUids,
23
+ };
24
+ }
25
+
26
+ export default useLiveStreamingUids;
@@ -0,0 +1,19 @@
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 {useContext} from 'react';
13
+ import {PropsContext} from '../../agora-rn-uikit';
14
+
15
+ const useLocalScreenShareUid = () => {
16
+ const {rtcProps} = useContext(PropsContext);
17
+ return rtcProps?.screenShareUid || 0;
18
+ };
19
+ export default useLocalScreenShareUid;
@@ -0,0 +1,43 @@
1
+ import {gql, useMutation} from '@apollo/client';
2
+ import {UidType} from '../../agora-rn-uikit';
3
+ import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
4
+ import useIsPSTN from './isPSTNUser';
5
+ const MUTE_PSTN = gql`
6
+ mutation mutePSTN($uid: Int!, $passphrase: String!, $mute: Boolean!) {
7
+ mutePSTN(uid: $uid, passphrase: $passphrase, mute: $mute) {
8
+ uid
9
+ mute
10
+ }
11
+ }
12
+ `;
13
+
14
+ const useMutePSTN = () => {
15
+ const [mutePSTN, {data, loading, error}] = useMutation(MUTE_PSTN);
16
+ const {isHost, meetingPassphrase} = useMeetingInfo();
17
+ const isPSTN = useIsPSTN();
18
+ return async (uid: UidType) => {
19
+ if (isHost) {
20
+ if (isPSTN(uid)) {
21
+ await mutePSTN({
22
+ variables: {
23
+ uid: uid,
24
+ passphrase: meetingPassphrase?.host,
25
+ //todo: hari need to test mute flag for PSTN
26
+ mute: 1,
27
+ },
28
+ });
29
+ } else {
30
+ console.error('UID does not belong to the PSTN user.');
31
+ }
32
+ if (!loading && error) {
33
+ throw error;
34
+ } else {
35
+ return data;
36
+ }
37
+ } else {
38
+ console.error('A host can only mute audience audio or video.');
39
+ }
40
+ };
41
+ };
42
+
43
+ export default useMutePSTN;