agora-appbuilder-core 2.2.0 → 2.3.0-beta.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 (280) hide show
  1. package/Readme.md +7 -1
  2. package/package.json +4 -3
  3. package/template/Gulpfile.js +306 -87
  4. package/template/_gitignore +4 -1
  5. package/template/_package-lock.json +2297 -2533
  6. package/template/agora-rn-uikit/.git/HEAD +1 -1
  7. package/template/agora-rn-uikit/.git/config +3 -3
  8. package/template/agora-rn-uikit/.git/index +0 -0
  9. package/template/agora-rn-uikit/.git/logs/HEAD +2 -2
  10. package/template/agora-rn-uikit/.git/logs/refs/heads/master +1 -1
  11. package/template/agora-rn-uikit/.git/logs/refs/heads/release/fpe-1.0.0 +1 -0
  12. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +1 -1
  13. package/template/agora-rn-uikit/.git/objects/pack/pack-f274a85fccfc9b5112d154bb3b6d34cb4b8dedde.idx +0 -0
  14. package/template/agora-rn-uikit/.git/objects/pack/{pack-0061d00cd98162a329a32b537488a35d0abeb069.pack → pack-f274a85fccfc9b5112d154bb3b6d34cb4b8dedde.pack} +0 -0
  15. package/template/agora-rn-uikit/.git/packed-refs +5 -1
  16. package/template/agora-rn-uikit/.git/refs/heads/release/fpe-1.0.0 +1 -0
  17. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
  18. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
  19. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
  20. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
  21. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
  22. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
  23. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
  24. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
  25. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
  26. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
  27. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
  28. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
  29. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
  30. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
  31. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
  32. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
  33. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
  34. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
  35. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
  36. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
  37. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
  38. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
  39. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
  40. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
  41. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
  42. package/template/agora-rn-uikit/src/Rtc/Create.tsx +14 -2
  43. package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
  44. package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
  45. package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
  46. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
  47. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
  48. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
  49. package/template/agora-rn-uikit/src/index.ts +12 -12
  50. package/template/babel.config.js +17 -1
  51. package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
  52. package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
  53. package/template/bridge/rtc/webNg/Types.ts +14 -0
  54. package/template/bridge/rtc/webNg/index.ts +5 -2
  55. package/template/bridge/rtm/web/index.ts +13 -7
  56. package/template/electron-builder.js +3 -2
  57. package/template/esbuild.rsdk.go +226 -0
  58. package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
  59. package/template/fpe-api/components.ts +42 -0
  60. package/template/fpe-api/context.ts +45 -0
  61. package/template/fpe-api/fpeEvents.ts +9 -0
  62. package/template/fpe-api/index.ts +21 -0
  63. package/template/fpe-api/install.ts +128 -0
  64. package/template/fpe-api/typeDefinition.ts +143 -0
  65. package/template/fpe-api/useFpe.tsx +35 -0
  66. package/template/fpe-api/utils.ts +62 -0
  67. package/template/fpe-implementation/createHook.ts +33 -0
  68. package/template/fpe-implementation/dummyFpe.ts +17 -0
  69. package/template/fpe-implementation/index.ts +1 -0
  70. package/template/fpe-todo.txt +14 -0
  71. package/template/fpe.config.js +25 -0
  72. package/template/global.d.ts +4 -0
  73. package/template/index.rsdk.tsx +27 -0
  74. package/template/index.wsdk.tsx +27 -0
  75. package/template/package-lock.json +2297 -2533
  76. package/template/package.json +28 -12
  77. package/template/react-native-toast-message/src/index.js +9 -10
  78. package/template/react-native-toast-message/src/index.wsdk.js +419 -0
  79. package/template/src/App.tsx +97 -65
  80. package/template/src/AppWrapper.tsx +79 -0
  81. package/template/src/SDKAppWrapper.tsx +67 -0
  82. package/template/src/atoms/PrimaryButton.tsx +14 -8
  83. package/template/src/atoms/TextInput.tsx +13 -5
  84. package/template/src/components/Chat.tsx +171 -139
  85. package/template/src/components/ChatContext.ts +14 -22
  86. package/template/src/components/ColorConfigure.tsx +2 -2
  87. package/template/src/components/Controls.native.tsx +72 -62
  88. package/template/src/components/Controls.tsx +90 -69
  89. package/template/src/components/DeviceConfigure.tsx +1 -1
  90. package/template/src/components/DeviceContext.tsx +14 -7
  91. package/template/src/components/GraphQLProvider.tsx +9 -2
  92. package/template/src/components/GridVideo.tsx +20 -159
  93. package/template/src/components/HostControlView.tsx +54 -15
  94. package/template/src/components/Navbar.tsx +408 -157
  95. package/template/src/components/NetworkQualityContext.tsx +29 -22
  96. package/template/src/components/ParticipantsView.tsx +97 -119
  97. package/template/src/components/PinnedVideo.tsx +41 -188
  98. package/template/src/components/Precall.native.tsx +131 -97
  99. package/template/src/components/Precall.tsx +193 -158
  100. package/template/src/components/RTMConfigure.tsx +320 -398
  101. package/template/src/components/Router.sdk.ts +20 -0
  102. package/template/src/components/SessionContext.tsx +6 -3
  103. package/template/src/components/Settings.native.tsx +3 -0
  104. package/template/src/components/Settings.tsx +65 -31
  105. package/template/src/components/SettingsView.tsx +14 -8
  106. package/template/src/components/Share.tsx +188 -220
  107. package/template/src/components/StorageContext.tsx +5 -5
  108. package/template/src/components/StoreToken.tsx +5 -1
  109. package/template/src/components/chat-messages/useChatMessages.tsx +202 -0
  110. package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
  111. package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
  112. package/template/src/components/common/Error.tsx +54 -0
  113. package/template/src/components/common/Logo.tsx +35 -0
  114. package/template/src/components/common/index.tsx +8 -0
  115. package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
  116. package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
  117. package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
  118. package/template/src/components/dimension/DimensionContext.ts +27 -0
  119. package/template/src/components/dimension/DimensionProvider.tsx +34 -0
  120. package/template/src/components/livestream/LiveStreamContext.tsx +293 -272
  121. package/template/src/components/livestream/Types.ts +26 -7
  122. package/template/src/components/livestream/index.ts +13 -2
  123. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
  124. package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
  125. package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
  126. package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
  127. package/template/src/components/participants/AllHostParticipants.tsx +36 -53
  128. package/template/src/components/participants/MeParticipant.tsx +9 -10
  129. package/template/src/components/participants/ParticipantName.tsx +2 -1
  130. package/template/src/components/participants/RemoteParticipants.tsx +3 -3
  131. package/template/src/components/precall/LocalMute.native.tsx +91 -0
  132. package/template/src/components/precall/LocalMute.tsx +90 -0
  133. package/template/src/components/precall/VideoPreview.native.tsx +35 -0
  134. package/template/src/components/precall/VideoPreview.tsx +33 -0
  135. package/template/src/components/precall/index.tsx +28 -0
  136. package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
  137. package/template/src/components/precall/joinCallBtn.tsx +91 -0
  138. package/template/src/components/precall/meetingTitle.tsx +26 -0
  139. package/template/src/components/precall/selectDevice.tsx +46 -0
  140. package/template/src/components/precall/textInput.tsx +43 -0
  141. package/template/src/components/precall/usePreCall.tsx +41 -0
  142. package/template/src/components/styles.ts +20 -3
  143. package/template/src/components/useShareLink.tsx +222 -0
  144. package/template/src/components/useWakeLock.tsx +3 -3
  145. package/template/src/custom-events/CustomEvents.ts +197 -0
  146. package/template/src/custom-events/index.tsx +4 -0
  147. package/template/src/custom-events/types.ts +51 -0
  148. package/template/src/language/default-labels/commonLabels.ts +21 -0
  149. package/template/src/language/default-labels/createScreenLabels.ts +22 -0
  150. package/template/src/language/default-labels/index.ts +38 -0
  151. package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
  152. package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
  153. package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
  154. package/template/src/language/default-labels/videoCallScreenLabels.ts +189 -0
  155. package/template/src/language/i18nTypes.ts +10 -0
  156. package/template/src/language/index.ts +18 -0
  157. package/template/src/language/useLanguage.tsx +92 -0
  158. package/template/src/pages/Authenticate.tsx +21 -15
  159. package/template/src/pages/Create.tsx +176 -159
  160. package/template/src/pages/Join.tsx +44 -32
  161. package/template/src/pages/VideoCall.tsx +134 -406
  162. package/template/src/pages/create/useCreate.tsx +37 -0
  163. package/template/src/pages/video-call/CustomLayout.ts +17 -0
  164. package/template/src/pages/video-call/CustomUserContextHolder.tsx +12 -0
  165. package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
  166. package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
  167. package/template/src/pages/video-call/RenderComponent.tsx +52 -0
  168. package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
  169. package/template/src/pages/video-call/VideoComponent.tsx +34 -0
  170. package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
  171. package/template/src/pages/video-call/index.ts +20 -0
  172. package/template/src/rtm/RTMEngine.ts +58 -0
  173. package/template/src/rtm/utils.ts +28 -0
  174. package/template/src/rtm-events/EventUtils.ts +268 -0
  175. package/template/src/rtm-events/EventsQueue.ts +38 -0
  176. package/template/src/rtm-events/constants.ts +40 -0
  177. package/template/src/rtm-events/index.tsx +8 -0
  178. package/template/src/rtm-events/types.ts +7 -0
  179. package/template/src/subComponents/ChatBubble.tsx +18 -11
  180. package/template/src/subComponents/ChatContainer.tsx +78 -29
  181. package/template/src/subComponents/ChatInput.tsx +146 -70
  182. package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
  183. package/template/src/subComponents/Error.tsx +35 -24
  184. package/template/src/subComponents/LanguageSelector.tsx +85 -0
  185. package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
  186. package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
  187. package/template/src/subComponents/LocalAudioMute.tsx +52 -30
  188. package/template/src/subComponents/LocalEndCall.tsx +52 -0
  189. package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
  190. package/template/src/subComponents/LocalVideoMute.tsx +48 -30
  191. package/template/src/subComponents/LogoutButton.tsx +20 -5
  192. package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
  193. package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
  194. package/template/src/subComponents/Recording.tsx +46 -138
  195. package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
  196. package/template/src/subComponents/RemoteEndCall.tsx +18 -7
  197. package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
  198. package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
  199. package/template/src/subComponents/SelectDevice.tsx +88 -45
  200. package/template/src/subComponents/SelectOAuth.tsx +30 -6
  201. package/template/src/subComponents/SidePanelButtons.ts +39 -0
  202. package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
  203. package/template/src/subComponents/TextWithTooltip.tsx +15 -20
  204. package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
  205. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
  206. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
  207. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
  208. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
  209. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
  210. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
  211. package/template/src/subComponents/livestream/index.ts +10 -2
  212. package/template/src/subComponents/recording/useRecording.tsx +209 -0
  213. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
  214. package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
  215. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +59 -31
  216. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
  217. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +97 -138
  218. package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
  219. package/template/src/subComponents/toastConfig.tsx +25 -20
  220. package/template/src/utils/IsAttendeeUser.ts +34 -0
  221. package/template/src/utils/SdkEvents.ts +68 -0
  222. package/template/src/utils/common.tsx +40 -0
  223. package/template/src/utils/eventEmitter.ts +29 -0
  224. package/template/src/utils/getMeetingInvite.ts +30 -0
  225. package/template/src/utils/index.tsx +11 -2
  226. package/template/src/utils/isAudioEnabled.ts +29 -0
  227. package/template/src/utils/isHostUser.ts +33 -0
  228. package/template/src/utils/isMobileOrTablet.native.ts +5 -0
  229. package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
  230. package/template/src/utils/isPSTNUser.ts +30 -0
  231. package/template/src/utils/isSDK.sdk.ts +5 -0
  232. package/template/src/utils/isSDK.ts +5 -0
  233. package/template/src/utils/isScreenShareUser.ts +31 -0
  234. package/template/src/utils/isVideoEnabled.ts +29 -0
  235. package/template/src/utils/useButtonTemplate.tsx +43 -0
  236. package/template/src/utils/useCreateMeeting.ts +74 -0
  237. package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
  238. package/template/src/utils/useGetMeetingPhrase.ts +68 -0
  239. package/template/src/utils/useGetName.ts +20 -0
  240. package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
  241. package/template/src/utils/useJoinMeeting.ts +120 -0
  242. package/template/src/utils/useLayout.tsx +40 -0
  243. package/template/src/utils/useLiveStreamingUids.ts +26 -0
  244. package/template/src/utils/useMutePSTN.ts +43 -0
  245. package/template/src/utils/useMuteToggleLocal.ts +109 -0
  246. package/template/src/utils/useNavParams.ts +6 -0
  247. package/template/src/utils/useNavigateTo.ts +8 -0
  248. package/template/src/utils/usePrivateMessages.ts +33 -0
  249. package/template/src/utils/useRemoteEndCall.ts +27 -0
  250. package/template/src/utils/useRemoteMute.ts +64 -0
  251. package/template/src/utils/useSendControlMessage.ts +51 -0
  252. package/template/src/utils/useSendMessage.ts +40 -0
  253. package/template/src/utils/useSetName.ts +20 -0
  254. package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
  255. package/template/src/utils/useSidePanel.tsx +41 -0
  256. package/template/src/utils/useString.ts +61 -0
  257. package/template/src/utils/useUnreadMessageCount.ts +50 -0
  258. package/template/src/utils/useUserList.ts +26 -0
  259. package/template/tsconfig.json +4 -4
  260. package/template/tsconfig_fpeApi.json +103 -0
  261. package/template/tsconfig_rsdk_index.json +105 -0
  262. package/template/tsconfig_wsdk_index.json +104 -0
  263. package/template/webpack.commons.js +40 -16
  264. package/template/webpack.main.config.js +2 -1
  265. package/template/webpack.renderer.config.js +1 -1
  266. package/template/webpack.rsdk.config.js +33 -0
  267. package/template/webpack.ts.config.js +89 -0
  268. package/template/webpack.web.config.js +8 -1
  269. package/template/webpack.wsdk.config.js +34 -0
  270. package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
  271. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
  272. package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
  273. package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
  274. package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
  275. package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
  276. package/template/src/subComponents/ScreenshareButton.tsx +0 -257
  277. package/template/src/subComponents/SwitchCamera.tsx +0 -35
  278. package/template/src/utils/hasBrandLogo.tsx +0 -3
  279. package/template/src/utils/mobileWebTest.native.tsx +0 -5
  280. package/template/src/utils/shouldAuthenticate.tsx +0 -7
@@ -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,20 @@
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 ChatContext from '../components/ChatContext';
14
+
15
+ function useGetName() {
16
+ const {displayName} = useContext(ChatContext);
17
+ return displayName;
18
+ }
19
+
20
+ 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,120 @@
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
+ const response = await client.query({
60
+ query:
61
+ store.token === null
62
+ ? JOIN_CHANNEL_PHRASE
63
+ : JOIN_CHANNEL_PHRASE_AND_GET_USER,
64
+ variables: {
65
+ passphrase: phrase,
66
+ },
67
+ });
68
+ if (response.error) {
69
+ throw response.error;
70
+ } else {
71
+ try {
72
+ if (response && response.data) {
73
+ let data = response.data;
74
+ let meetingInfo: Partial<MeetingInfoContextInterface> = {
75
+ isJoinDataFetched: true,
76
+ };
77
+ if (data?.joinChannel?.channel) {
78
+ meetingInfo.channel = data.joinChannel.channel;
79
+ }
80
+ if (data?.joinChannel?.mainUser?.uid) {
81
+ meetingInfo.uid = data.joinChannel.mainUser.uid;
82
+ }
83
+ if (data?.joinChannel?.mainUser?.rtc) {
84
+ meetingInfo.token = data.joinChannel.mainUser.rtc;
85
+ }
86
+ if (data?.joinChannel?.mainUser?.rtm) {
87
+ meetingInfo.rtm = data.joinChannel.mainUser.rtm;
88
+ }
89
+ if (data?.joinChannel?.secret) {
90
+ meetingInfo.secret = data.joinChannel.secret;
91
+ }
92
+ if (data?.joinChannel?.screenShare?.uid) {
93
+ meetingInfo.screenShareUid = data.joinChannel.screenShare.uid;
94
+ }
95
+ if (data?.joinChannel?.screenShare?.rtc) {
96
+ meetingInfo.screenShareToken = data.joinChannel.screenShare.rtc;
97
+ }
98
+ if (data?.joinChannel?.isHost) {
99
+ meetingInfo.isHost = data.joinChannel.isHost;
100
+ }
101
+ if (data?.joinChannel?.title) {
102
+ meetingInfo.meetingTitle = data.joinChannel.title;
103
+ }
104
+ //getUser is not available from backend
105
+ // if (data?.getUser?.name) {
106
+ // meetingInfo.username = data.getUser.name;
107
+ // }
108
+ setMeetingInfo((prevState) => {
109
+ return {
110
+ ...prevState,
111
+ ...meetingInfo,
112
+ };
113
+ });
114
+ }
115
+ } catch (error) {
116
+ throw new Error('An error occurred in parsing the channel data.');
117
+ }
118
+ }
119
+ };
120
+ }
@@ -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,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;