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
@@ -9,221 +9,51 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
+ // @ts-nocheck
12
13
  import React, {useState, useContext, useEffect} from 'react';
13
- import {View, StyleSheet, Text, Platform} from 'react-native';
14
-
14
+ import {View, StyleSheet, Text} from 'react-native';
15
15
  import {
16
16
  RtcConfigure,
17
17
  PropsProvider,
18
18
  ClientRole,
19
19
  ChannelProfile,
20
+ LocalUserContext,
20
21
  } from '../../agora-rn-uikit';
21
- import Navbar from '../components/Navbar';
22
- import Precall from '../components/Precall';
23
- import ParticipantsView from '../components/ParticipantsView';
24
- import SettingsView from '../components/SettingsView';
25
- import PinnedVideo from '../components/PinnedVideo';
26
- import Controls from '../components/Controls';
27
- import GridVideo from '../components/GridVideo';
28
22
  import styles from '../components/styles';
29
23
  import {useParams, useHistory} from '../components/Router';
30
- import Chat from '../components/Chat';
31
24
  import RtmConfigure from '../components/RTMConfigure';
32
25
  import DeviceConfigure from '../components/DeviceConfigure';
33
- import {gql, useQuery} from '@apollo/client';
34
- import StorageContext from '../components/StorageContext';
35
26
  import Logo from '../subComponents/Logo';
36
- import hasBrandLogo from '../utils/hasBrandLogo';
37
- import ChatContext, {
38
- messageActionType,
39
- messageChannelType,
40
- } from '../components/ChatContext';
27
+ import {hasBrandLogo, isArray} from '../utils/common';
41
28
  import {SidePanelType} from '../subComponents/SidePanelEnum';
42
29
  import {videoView} from '../../theme.json';
43
- import Layout from '../subComponents/LayoutEnum';
44
- import Toast from '../../react-native-toast-message';
45
- import {NetworkQualityProvider} from '../components/NetworkQualityContext';
46
30
  import {LiveStreamContextProvider} from '../components/livestream';
47
31
  import ScreenshareConfigure from '../subComponents/screenshare/ScreenshareConfigure';
32
+ import {ErrorContext} from '.././components/common/index';
33
+ import {PreCallProvider} from '../components/precall/usePreCall';
34
+ import {LayoutProvider} from '../utils/useLayout';
35
+ import {useFpe} from 'fpe-api';
36
+ import Precall from '../components/Precall';
37
+ import {useString} from '../utils/useString';
38
+ import useCustomLayout from './video-call/CustomLayout';
39
+ import {RecordingProvider} from '../subComponents/recording/useRecording';
40
+ import useJoinMeeting from '../utils/useJoinMeeting';
41
+ import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
42
+ import {SidePanelProvider} from '../utils/useSidePanel';
43
+ import VideoCallScreen from './video-call/VideoCallScreen';
44
+ import {NetworkQualityProvider} from '../components/NetworkQualityContext';
45
+ import CustomUserContextHolder from './video-call/CustomUserContextHolder';
46
+ import {ChatNotificationProvider} from '../components/chat-notification/useChatNotification';
47
+ import {ChatUIControlProvider} from '../components/chat-ui/useChatUIControl';
48
+ import {ChatMessagesProvider} from '../components/chat-messages/useChatMessages';
49
+ import {ScreenShareProvider} from '../components/contexts/ScreenShareContext';
50
+ import {LiveStreamDataProvider} from '../components/contexts/LiveStreamDataContext';
51
+ import {WhiteboardProvider} from '../components/contexts/WhiteboardContext';
48
52
  import {useWakeLock} from '../components/useWakeLock';
53
+ import StorageContext from '../components/StorageContext';
54
+ import SDKEvents from '../utils/SdkEvents';
55
+ import {UserPreferenceProvider} from '../components/useUserPreference';
49
56
 
50
- const useChatNotification = (
51
- messageStore: string | any[],
52
- privateMessageStore: string | any[],
53
- chatDisplayed: boolean,
54
- isPrivateChatDisplayed: boolean,
55
- ) => {
56
- // store the last checked state from the messagestore, to identify unread messages
57
- const [lastCheckedPublicState, setLastCheckedPublicState] = useState(0);
58
- const [lastCheckedPrivateState, setLastCheckedPrivateState] = useState({});
59
- useEffect(() => {
60
- if (chatDisplayed && !isPrivateChatDisplayed) {
61
- setLastCheckedPublicState(messageStore.length);
62
- }
63
- }, [messageStore, isPrivateChatDisplayed]);
64
-
65
- const setPrivateMessageLastSeen = ({userId, lastSeenCount}) => {
66
- setLastCheckedPrivateState((prevState) => {
67
- return {...prevState, [userId]: lastSeenCount || 0};
68
- });
69
- };
70
- return [
71
- lastCheckedPublicState,
72
- setLastCheckedPublicState,
73
- lastCheckedPrivateState,
74
- setLastCheckedPrivateState,
75
- setPrivateMessageLastSeen,
76
- ];
77
- };
78
-
79
- const NotificationControl = ({
80
- children,
81
- chatDisplayed,
82
- setSidePanel,
83
- isPrivateChatDisplayed,
84
- }) => {
85
- const {messageStore, privateMessageStore, userList, localUid, events} =
86
- useContext(ChatContext);
87
- const [
88
- lastCheckedPublicState,
89
- setLastCheckedPublicState,
90
- lastCheckedPrivateState,
91
- setLastCheckedPrivateState,
92
- setPrivateMessageLastSeen,
93
- ] = useChatNotification(
94
- messageStore,
95
- privateMessageStore,
96
- chatDisplayed,
97
- isPrivateChatDisplayed,
98
- );
99
-
100
- const pendingPublicNotification =
101
- messageStore.length - lastCheckedPublicState;
102
- const privateMessageCountMap = Object.keys(privateMessageStore).reduce(
103
- (acc, curItem) => {
104
- let individualPrivateMessageCount = privateMessageStore[curItem].reduce(
105
- (total, item) => {
106
- if (Platform.OS === 'android') {
107
- //In template/src/components/RTMConfigure.tsx
108
- //on messageReceived event - For android platform we are passing uid as number type. so checking == for android
109
- return item.uid == curItem ? total + 1 : total;
110
- } else {
111
- return item.uid === curItem ? total + 1 : total;
112
- }
113
- },
114
- 0,
115
- );
116
- return {...acc, [curItem]: individualPrivateMessageCount};
117
- },
118
- {},
119
- );
120
- const totalPrivateMessage = Object.keys(privateMessageCountMap).reduce(
121
- (acc, item) => acc + privateMessageCountMap[item],
122
- 0,
123
- );
124
- const totalPrivateLastSeen = Object.keys(lastCheckedPrivateState).reduce(
125
- (acc, item) => acc + lastCheckedPrivateState[item],
126
- 0,
127
- );
128
- const pendingPrivateNotification = totalPrivateMessage - totalPrivateLastSeen;
129
-
130
- React.useEffect(() => {
131
- const showMessageNotification = (data: any) => {
132
- if (data.type === messageActionType.Normal) {
133
- const {uid, msg} = data;
134
- Toast.show({
135
- type: 'success',
136
- text1: msg.length > 30 ? msg.slice(0, 30) + '...' : msg,
137
- text2: userList[uid]?.name ? 'From: ' + userList[uid]?.name : '',
138
- visibilityTime: 1000,
139
- onPress: () => {
140
- setSidePanel(SidePanelType.Chat);
141
- setLastCheckedPublicState(messageStore.length);
142
- },
143
- });
144
- }
145
- };
146
- events.on(
147
- messageChannelType.Public,
148
- 'onPublicMessageReceived',
149
- (data: any, error: any) => {
150
- if (!data) return;
151
- showMessageNotification(data);
152
- },
153
- );
154
- events.on(
155
- messageChannelType.Private,
156
- 'onPrivateMessageReceived',
157
- (data: any, error: any) => {
158
- if (!data) return;
159
- if (data.uid === localUid) return;
160
- showMessageNotification(data);
161
- },
162
- );
163
- return () => {
164
- // Cleanup the listeners
165
- events.off(messageChannelType.Public, 'onPublicMessageReceived');
166
- events.off(messageChannelType.Private, 'onPrivateMessageReceived');
167
- };
168
- }, [userList, messageStore]);
169
-
170
- return children({
171
- pendingPublicNotification,
172
- pendingPrivateNotification,
173
- lastCheckedPublicState,
174
- setLastCheckedPublicState,
175
- lastCheckedPrivateState,
176
- setLastCheckedPrivateState,
177
- privateMessageCountMap,
178
- setPrivateMessageLastSeen,
179
- });
180
- };
181
-
182
- const JOIN_CHANNEL_PHRASE_AND_GET_USER = gql`
183
- query JoinChannel($passphrase: String!) {
184
- joinChannel(passphrase: $passphrase) {
185
- channel
186
- title
187
- isHost
188
- secret
189
- mainUser {
190
- rtc
191
- rtm
192
- uid
193
- }
194
- screenShare {
195
- rtc
196
- rtm
197
- uid
198
- }
199
- }
200
- getUser {
201
- name
202
- email
203
- }
204
- }
205
- `;
206
-
207
- const JOIN_CHANNEL_PHRASE = gql`
208
- query JoinChannel($passphrase: String!) {
209
- joinChannel(passphrase: $passphrase) {
210
- channel
211
- title
212
- isHost
213
- secret
214
- mainUser {
215
- rtc
216
- rtm
217
- uid
218
- }
219
- screenShare {
220
- rtc
221
- rtm
222
- uid
223
- }
224
- }
225
- }
226
- `;
227
57
  enum RnEncryptionEnum {
228
58
  /**
229
59
  * @deprecated
@@ -251,23 +81,25 @@ enum RnEncryptionEnum {
251
81
  }
252
82
 
253
83
  const VideoCall: React.FC = () => {
254
- const {store, setStore} = useContext(StorageContext);
84
+ //commented for v1 release
85
+ //const joiningLoaderLabel = useString('joiningLoaderLabel')();
86
+ const joiningLoaderLabel = 'Starting Call. Just a second.';
87
+ const {setGlobalErrorMessage} = useContext(ErrorContext);
255
88
  const {awake, release} = useWakeLock();
256
- const getInitialUsername = () =>
257
- store?.displayName ? store.displayName : '';
258
- const [username, setUsername] = useState(getInitialUsername);
259
- const [participantsView, setParticipantsView] = useState(false);
260
89
  const [callActive, setCallActive] = useState($config.PRECALL ? false : true);
261
- const [layout, setLayout] = useState(Layout.Grid);
262
- const [recordingActive, setRecordingActive] = useState(false);
263
- const [chatDisplayed, setChatDisplayed] = useState(false);
90
+
91
+ //layouts
92
+ const layouts = useCustomLayout();
93
+ const defaultLayoutName = isArray(layouts) ? layouts[0].name : '';
94
+ const [activeLayoutName, setActiveLayoutName] = useState(defaultLayoutName);
95
+ //layouts
96
+
97
+ const [isRecordingActive, setRecordingActive] = useState(false);
264
98
  const [queryComplete, setQueryComplete] = useState(false);
265
99
  const [sidePanel, setSidePanel] = useState<SidePanelType>(SidePanelType.None);
266
- const [isPrivateChatDisplayed, setPrivateChatDisplayed] = useState(false);
267
- const {phrase} = useParams();
268
- const [errorMessage, setErrorMessage] = useState(null);
269
- const [isHost, setIsHost] = React.useState(false);
270
- const [title, setTitle] = React.useState('');
100
+ const {phrase} = useParams<{phrase: string}>();
101
+ // commented for v1 release
102
+ //const lifecycle = useFpe((data) => data.lifecycle);
271
103
  const [rtcProps, setRtcProps] = React.useState({
272
104
  appId: $config.APP_ID,
273
105
  channel: null,
@@ -285,14 +117,7 @@ const VideoCall: React.FC = () => {
285
117
  geoFencing: $config.GEO_FENCING,
286
118
  });
287
119
 
288
- const {data, loading, error} = useQuery(
289
- store.token === null
290
- ? JOIN_CHANNEL_PHRASE
291
- : JOIN_CHANNEL_PHRASE_AND_GET_USER,
292
- {
293
- variables: {passphrase: phrase},
294
- },
295
- );
120
+ const useJoin = useJoinMeeting();
296
121
 
297
122
  React.useEffect(() => {
298
123
  return () => {
@@ -303,70 +128,56 @@ const VideoCall: React.FC = () => {
303
128
  };
304
129
  }, []);
305
130
 
306
- React.useEffect(() => {
307
- if (error) {
308
- console.log('error', error);
309
- // console.log('error data', data);
310
- if (!errorMessage) {
311
- setErrorMessage(error);
312
- queryComplete ? {} : setQueryComplete(true);
313
- }
314
- return;
315
- }
131
+ useEffect(() => {
132
+ useJoin(phrase)
133
+ .then(() => {})
134
+ .catch((error) => {
135
+ setGlobalErrorMessage(error);
136
+ });
137
+ }, []);
316
138
 
317
- if (!loading && data) {
318
- console.log('token:', rtcProps.token);
319
- console.log('error', data.error);
139
+ const data = useMeetingInfo();
140
+
141
+ React.useEffect(() => {
142
+ if (data.isJoinDataFetched === true) {
320
143
  setRtcProps({
321
144
  appId: $config.APP_ID,
322
- channel: data.joinChannel.channel,
323
- uid: data.joinChannel.mainUser.uid,
324
- token: data.joinChannel.mainUser.rtc,
325
- rtm: data.joinChannel.mainUser.rtm,
145
+ channel: data.channel,
146
+ uid: data.uid,
147
+ token: data.token,
148
+ rtm: data.rtm,
326
149
  dual: true,
327
150
  profile: $config.PROFILE,
328
151
  encryption: $config.ENCRYPTION_ENABLED
329
152
  ? {
330
- key: data.joinChannel.secret,
153
+ key: data.secret,
331
154
  mode: RnEncryptionEnum.AES128XTS,
332
- screenKey: data.joinChannel.secret,
155
+ screenKey: data.secret,
333
156
  }
334
157
  : false,
335
- screenShareUid: data.joinChannel.screenShare.uid,
336
- screenShareToken: data.joinChannel.screenShare.rtc,
337
- role: data.joinChannel.isHost
338
- ? ClientRole.Broadcaster
339
- : ClientRole.Audience,
158
+ screenShareUid: data.screenShareUid,
159
+ screenShareToken: data.screenShareToken,
160
+ role: data.isHost ? ClientRole.Broadcaster : ClientRole.Audience,
340
161
  geoFencing: $config.GEO_FENCING,
341
162
  });
342
- setIsHost(data.joinChannel.isHost);
343
- setTitle(data.joinChannel.title);
344
163
 
345
- console.log('query done: ', data, queryComplete);
346
164
  // 1. Store the display name from API
347
- if (data.getUser) {
348
- setUsername(data.getUser.name);
349
- }
350
- console.log('token:', rtcProps.token);
351
- queryComplete ? {} : setQueryComplete(true);
165
+ // if (data.username) {
166
+ // setUsername(data.username);
167
+ // }
168
+ queryComplete ? {} : setQueryComplete(data.isJoinDataFetched);
352
169
  }
353
- }, [error, loading, data]);
170
+ }, [data?.isJoinDataFetched]);
354
171
 
355
172
  const history = useHistory();
356
173
  const callbacks = {
357
174
  EndCall: () =>
358
175
  setTimeout(() => {
176
+ SDKEvents.emit('leave');
359
177
  history.push('/');
360
178
  }, 0),
361
179
  };
362
180
 
363
- React.useEffect(() => {
364
- // Update the username in localstorage when username changes
365
- if (setStore) {
366
- setStore({token: store?.token || null, displayName: username});
367
- }
368
- }, [username]);
369
-
370
181
  return (
371
182
  <>
372
183
  {queryComplete ? (
@@ -377,6 +188,8 @@ const VideoCall: React.FC = () => {
377
188
  rtcProps: {
378
189
  ...rtcProps,
379
190
  callActive,
191
+ // commented for v1 release
192
+ //lifecycle,
380
193
  },
381
194
  callbacks,
382
195
  styleProps,
@@ -385,154 +198,72 @@ const VideoCall: React.FC = () => {
385
198
  : ChannelProfile.Communication,
386
199
  }}>
387
200
  <RtcConfigure>
388
- <DeviceConfigure userRole={rtcProps.role}>
389
- <RtmConfigure
390
- setRecordingActive={setRecordingActive}
391
- name={username}
392
- callActive={callActive}>
393
- <ScreenshareConfigure
394
- setLayout={setLayout}
395
- recordingActive={recordingActive}>
396
- <LiveStreamContextProvider
397
- setRtcProps={setRtcProps}
398
- isHost={isHost}>
399
- {callActive ? (
400
- <View style={style.full}>
401
- <NotificationControl
402
- setSidePanel={setSidePanel}
403
- chatDisplayed={sidePanel === SidePanelType.Chat}
404
- isPrivateChatDisplayed={isPrivateChatDisplayed}>
405
- {({
406
- pendingPublicNotification,
407
- pendingPrivateNotification,
408
- setLastCheckedPublicState,
409
- lastCheckedPublicState,
410
- lastCheckedPrivateState,
411
- setLastCheckedPrivateState,
412
- privateMessageCountMap,
413
- setPrivateMessageLastSeen,
414
- }) => (
415
- <>
416
- <Navbar
417
- sidePanel={sidePanel}
418
- setSidePanel={setSidePanel}
419
- layout={layout}
420
- setLayout={setLayout}
421
- recordingActive={recordingActive}
422
- setRecordingActive={setRecordingActive}
423
- isHost={isHost}
424
- title={title}
425
- pendingMessageLength={
426
- pendingPublicNotification +
427
- pendingPrivateNotification
428
- }
429
- setLastCheckedPublicState={
430
- setLastCheckedPublicState
431
- }
432
- />
433
- <NetworkQualityProvider>
434
- <View
435
- style={[
436
- style.videoView,
437
- {backgroundColor: '#ffffff00'},
438
- ]}>
439
- {layout === Layout.Pinned ? (
440
- <PinnedVideo />
441
- ) : (
442
- <GridVideo setLayout={setLayout} />
443
- )}
444
- {sidePanel ===
445
- SidePanelType.Participants ? (
446
- <ParticipantsView
447
- isHost={isHost}
448
- // setParticipantsView={setParticipantsView}
449
- setSidePanel={setSidePanel}
450
- />
451
- ) : (
452
- <></>
453
- )}
454
- {sidePanel === SidePanelType.Chat ? (
455
- $config.CHAT ? (
456
- <Chat
457
- setPrivateChatDisplayed={
458
- setPrivateChatDisplayed
459
- }
460
- privateMessageCountMap={
461
- privateMessageCountMap
462
- }
463
- pendingPublicNotification={
464
- pendingPublicNotification
465
- }
466
- pendingPrivateNotification={
467
- pendingPrivateNotification
468
- }
469
- setPrivateMessageLastSeen={
470
- setPrivateMessageLastSeen
471
- }
472
- lastCheckedPrivateState={
473
- lastCheckedPrivateState
474
- }
475
- />
476
- ) : (
477
- <></>
478
- )
479
- ) : (
480
- <></>
481
- )}
482
- {sidePanel === SidePanelType.Settings ? (
483
- <SettingsView
484
- isHost={isHost}
485
- // setParticipantsView={setParticipantsView}
486
- setSidePanel={setSidePanel}
487
- />
488
- ) : (
489
- <></>
490
- )}
491
- </View>
492
- </NetworkQualityProvider>
493
- {Platform.OS !== 'web' &&
494
- sidePanel === SidePanelType.Chat ? (
495
- <></>
496
- ) : (
497
- <Controls
498
- setLayout={setLayout}
499
- recordingActive={recordingActive}
500
- setRecordingActive={setRecordingActive}
501
- // chatDisplayed={chatDisplayed}
502
- // setChatDisplayed={setChatDisplayed}
503
- isHost={isHost}
504
- // participantsView={participantsView}
505
- // setParticipantsView={setParticipantsView}
506
- sidePanel={sidePanel}
507
- setSidePanel={setSidePanel}
508
- pendingMessageLength={
509
- pendingPublicNotification +
510
- pendingPrivateNotification
511
- }
512
- setLastCheckedPublicState={
513
- setLastCheckedPublicState
514
- }
515
- />
516
- )}
517
- </>
518
- )}
519
- </NotificationControl>
520
- </View>
521
- ) : $config.PRECALL ? (
522
- <Precall
523
- error={errorMessage}
524
- username={username}
525
- setUsername={setUsername}
526
- setCallActive={setCallActive}
527
- queryComplete={queryComplete}
528
- title={title}
529
- />
530
- ) : (
531
- <></>
532
- )}
533
- </LiveStreamContextProvider>
534
- </ScreenshareConfigure>
535
- </RtmConfigure>
201
+ <DeviceConfigure>
202
+ <ChatUIControlProvider>
203
+ <ChatNotificationProvider>
204
+ <ChatMessagesProvider>
205
+ <SidePanelProvider
206
+ value={{
207
+ sidePanel,
208
+ setSidePanel,
209
+ }}>
210
+ <ScreenShareProvider>
211
+ <RtmConfigure
212
+ setRecordingActive={setRecordingActive}
213
+ callActive={callActive}>
214
+ <UserPreferenceProvider>
215
+ <WhiteboardProvider>
216
+ <LayoutProvider
217
+ value={{
218
+ activeLayoutName,
219
+ setActiveLayoutName,
220
+ }}>
221
+ <RecordingProvider
222
+ value={{
223
+ setRecordingActive,
224
+ isRecordingActive,
225
+ }}>
226
+ <ScreenshareConfigure>
227
+ <LiveStreamContextProvider
228
+ value={{
229
+ setRtcProps,
230
+ rtcProps,
231
+ callActive,
232
+ }}>
233
+ <LiveStreamDataProvider>
234
+ <LocalUserContext
235
+ localUid={rtcProps?.uid || 0}>
236
+ <CustomUserContextHolder>
237
+ <NetworkQualityProvider>
238
+ {callActive ? (
239
+ <VideoCallScreen />
240
+ ) : $config.PRECALL ? (
241
+ <PreCallProvider
242
+ value={{
243
+ callActive,
244
+ setCallActive,
245
+ }}>
246
+ <Precall />
247
+ </PreCallProvider>
248
+ ) : (
249
+ <></>
250
+ )}
251
+ </NetworkQualityProvider>
252
+ </CustomUserContextHolder>
253
+ </LocalUserContext>
254
+ </LiveStreamDataProvider>
255
+ </LiveStreamContextProvider>
256
+ </ScreenshareConfigure>
257
+ </RecordingProvider>
258
+ </LayoutProvider>
259
+ </WhiteboardProvider>
260
+ </UserPreferenceProvider>
261
+ </RtmConfigure>
262
+ </ScreenShareProvider>
263
+ </SidePanelProvider>
264
+ </ChatMessagesProvider>
265
+ </ChatNotificationProvider>
266
+ </ChatUIControlProvider>
536
267
  </DeviceConfigure>
537
268
  </RtcConfigure>
538
269
  </PropsProvider>
@@ -540,7 +271,7 @@ const VideoCall: React.FC = () => {
540
271
  ) : (
541
272
  <View style={style.loader}>
542
273
  <View style={style.loaderLogo}>{hasBrandLogo && <Logo />}</View>
543
- <Text style={style.loaderText}>Starting Call. Just a second.</Text>
274
+ <Text style={style.loaderText}>{joiningLoaderLabel}</Text>
544
275
  </View>
545
276
  )
546
277
  ) : (
@@ -0,0 +1,37 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+ import React, {createContext} from 'react';
13
+ import {createHook} from 'fpe-implementation';
14
+
15
+ export interface CreateContextInterface {
16
+ showShareScreen: () => void;
17
+ }
18
+
19
+ const CreateContext = createContext<CreateContextInterface>({
20
+ showShareScreen: () => {},
21
+ });
22
+
23
+ interface CreateProviderProps {
24
+ value: CreateContextInterface;
25
+ children: React.ReactNode;
26
+ }
27
+
28
+ const CreateProvider = (props: CreateProviderProps) => {
29
+ return (
30
+ <CreateContext.Provider value={{...props.value}}>
31
+ {props.children}
32
+ </CreateContext.Provider>
33
+ );
34
+ };
35
+ const useCreate = createHook(CreateContext);
36
+
37
+ export {CreateProvider, useCreate};