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
@@ -9,221 +9,50 @@
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';
49
55
 
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
56
  enum RnEncryptionEnum {
228
57
  /**
229
58
  * @deprecated
@@ -251,23 +80,25 @@ enum RnEncryptionEnum {
251
80
  }
252
81
 
253
82
  const VideoCall: React.FC = () => {
254
- const {store, setStore} = useContext(StorageContext);
83
+ //commented for v1 release
84
+ //const joiningLoaderLabel = useString('joiningLoaderLabel')();
85
+ const joiningLoaderLabel = 'Starting Call. Just a second.';
86
+ const {setGlobalErrorMessage} = useContext(ErrorContext);
255
87
  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
88
  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);
89
+
90
+ //layouts
91
+ const layouts = useCustomLayout();
92
+ const defaultLayoutName = isArray(layouts) ? layouts[0].name : '';
93
+ const [activeLayoutName, setActiveLayoutName] = useState(defaultLayoutName);
94
+ //layouts
95
+
96
+ const [isRecordingActive, setRecordingActive] = useState(false);
264
97
  const [queryComplete, setQueryComplete] = useState(false);
265
98
  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('');
99
+ const {phrase} = useParams<{phrase: string}>();
100
+ // commented for v1 release
101
+ //const lifecycle = useFpe((data) => data.lifecycle);
271
102
  const [rtcProps, setRtcProps] = React.useState({
272
103
  appId: $config.APP_ID,
273
104
  channel: null,
@@ -285,14 +116,7 @@ const VideoCall: React.FC = () => {
285
116
  geoFencing: $config.GEO_FENCING,
286
117
  });
287
118
 
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
- );
119
+ const useJoin = useJoinMeeting();
296
120
 
297
121
  React.useEffect(() => {
298
122
  return () => {
@@ -303,70 +127,56 @@ const VideoCall: React.FC = () => {
303
127
  };
304
128
  }, []);
305
129
 
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;
130
+ useEffect(() => {
131
+ try {
132
+ useJoin(phrase);
133
+ } catch (error) {
134
+ setGlobalErrorMessage(error);
315
135
  }
136
+ }, []);
316
137
 
317
- if (!loading && data) {
318
- console.log('token:', rtcProps.token);
319
- console.log('error', data.error);
138
+ const data = useMeetingInfo();
139
+
140
+ React.useEffect(() => {
141
+ if (data.isJoinDataFetched === true) {
320
142
  setRtcProps({
321
143
  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,
144
+ channel: data.channel,
145
+ uid: data.uid,
146
+ token: data.token,
147
+ rtm: data.rtm,
326
148
  dual: true,
327
149
  profile: $config.PROFILE,
328
150
  encryption: $config.ENCRYPTION_ENABLED
329
151
  ? {
330
- key: data.joinChannel.secret,
152
+ key: data.secret,
331
153
  mode: RnEncryptionEnum.AES128XTS,
332
- screenKey: data.joinChannel.secret,
154
+ screenKey: data.secret,
333
155
  }
334
156
  : false,
335
- screenShareUid: data.joinChannel.screenShare.uid,
336
- screenShareToken: data.joinChannel.screenShare.rtc,
337
- role: data.joinChannel.isHost
338
- ? ClientRole.Broadcaster
339
- : ClientRole.Audience,
157
+ screenShareUid: data.screenShareUid,
158
+ screenShareToken: data.screenShareToken,
159
+ role: data.isHost ? ClientRole.Broadcaster : ClientRole.Audience,
340
160
  geoFencing: $config.GEO_FENCING,
341
161
  });
342
- setIsHost(data.joinChannel.isHost);
343
- setTitle(data.joinChannel.title);
344
162
 
345
- console.log('query done: ', data, queryComplete);
346
163
  // 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);
164
+ // if (data.username) {
165
+ // setUsername(data.username);
166
+ // }
167
+ queryComplete ? {} : setQueryComplete(data.isJoinDataFetched);
352
168
  }
353
- }, [error, loading, data]);
169
+ }, [data?.isJoinDataFetched]);
354
170
 
355
171
  const history = useHistory();
356
172
  const callbacks = {
357
173
  EndCall: () =>
358
174
  setTimeout(() => {
175
+ SDKEvents.emit('leave');
359
176
  history.push('/');
360
177
  }, 0),
361
178
  };
362
179
 
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
180
  return (
371
181
  <>
372
182
  {queryComplete ? (
@@ -377,6 +187,8 @@ const VideoCall: React.FC = () => {
377
187
  rtcProps: {
378
188
  ...rtcProps,
379
189
  callActive,
190
+ // commented for v1 release
191
+ //lifecycle,
380
192
  },
381
193
  callbacks,
382
194
  styleProps,
@@ -385,154 +197,70 @@ const VideoCall: React.FC = () => {
385
197
  : ChannelProfile.Communication,
386
198
  }}>
387
199
  <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>
200
+ <DeviceConfigure>
201
+ <ChatUIControlProvider>
202
+ <ChatNotificationProvider>
203
+ <ChatMessagesProvider>
204
+ <SidePanelProvider
205
+ value={{
206
+ sidePanel,
207
+ setSidePanel,
208
+ }}>
209
+ <ScreenShareProvider>
210
+ <RtmConfigure
211
+ setRecordingActive={setRecordingActive}
212
+ callActive={callActive}>
213
+ <WhiteboardProvider>
214
+ <LayoutProvider
215
+ value={{
216
+ activeLayoutName,
217
+ setActiveLayoutName,
218
+ }}>
219
+ <RecordingProvider
220
+ value={{
221
+ setRecordingActive,
222
+ isRecordingActive,
223
+ }}>
224
+ <ScreenshareConfigure>
225
+ <LiveStreamContextProvider
226
+ value={{
227
+ setRtcProps,
228
+ rtcProps,
229
+ callActive,
230
+ }}>
231
+ <LiveStreamDataProvider>
232
+ <LocalUserContext
233
+ localUid={rtcProps?.uid || 0}>
234
+ <CustomUserContextHolder>
235
+ <NetworkQualityProvider>
236
+ {callActive ? (
237
+ <VideoCallScreen />
238
+ ) : $config.PRECALL ? (
239
+ <PreCallProvider
240
+ value={{
241
+ callActive,
242
+ setCallActive,
243
+ }}>
244
+ <Precall />
245
+ </PreCallProvider>
246
+ ) : (
247
+ <></>
248
+ )}
249
+ </NetworkQualityProvider>
250
+ </CustomUserContextHolder>
251
+ </LocalUserContext>
252
+ </LiveStreamDataProvider>
253
+ </LiveStreamContextProvider>
254
+ </ScreenshareConfigure>
255
+ </RecordingProvider>
256
+ </LayoutProvider>
257
+ </WhiteboardProvider>
258
+ </RtmConfigure>
259
+ </ScreenShareProvider>
260
+ </SidePanelProvider>
261
+ </ChatMessagesProvider>
262
+ </ChatNotificationProvider>
263
+ </ChatUIControlProvider>
536
264
  </DeviceConfigure>
537
265
  </RtcConfigure>
538
266
  </PropsProvider>
@@ -540,7 +268,7 @@ const VideoCall: React.FC = () => {
540
268
  ) : (
541
269
  <View style={style.loader}>
542
270
  <View style={style.loaderLogo}>{hasBrandLogo && <Logo />}</View>
543
- <Text style={style.loaderText}>Starting Call. Just a second.</Text>
271
+ <Text style={style.loaderText}>{joiningLoaderLabel}</Text>
544
272
  </View>
545
273
  )
546
274
  ) : (
@@ -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};