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
@@ -10,76 +10,86 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {useContext} from 'react';
13
- import {
14
- View,
15
- TouchableOpacity,
16
- Image,
17
- Platform,
18
- StyleSheet,
19
- Text,
20
- } from 'react-native';
21
- import {LocalUserContext} from '../../agora-rn-uikit';
22
- import {
23
- LocalAudioMute,
24
- LocalVideoMute,
25
- SwitchCamera,
26
- Endcall,
27
- PropsContext,
28
- ClientRole,
29
- } from '../../agora-rn-uikit';
30
- import Recording from '../subComponents/Recording';
31
- import LiveStreamControls from './livestream/views/LiveStreamControls';
13
+ import {View, StyleSheet} from 'react-native';
14
+ import {PropsContext, ClientRole} from '../../agora-rn-uikit';
15
+ import LocalAudioMute, {
16
+ LocalAudioMuteProps,
17
+ } from '../subComponents/LocalAudioMute';
18
+ import LocalVideoMute, {
19
+ LocalVideoMuteProps,
20
+ } from '../subComponents/LocalVideoMute';
21
+ import Recording, {RecordingButtonProps} from '../subComponents/Recording';
22
+ import LiveStreamControls, {
23
+ LiveStreamControlsProps,
24
+ } from './livestream/views/LiveStreamControls';
25
+ import {useMeetingInfo} from './meeting-info/useMeetingInfo';
26
+ import ScreenshareButton, {
27
+ ScreenshareButtonProps,
28
+ } from '../subComponents/screenshare/ScreenshareButton';
29
+ import LocalEndcall, {LocalEndcallProps} from '../subComponents/LocalEndCall';
30
+ import LocalSwitchCamera, {
31
+ LocalSwitchCameraProps,
32
+ } from '../subComponents/LocalSwitchCamera';
32
33
 
33
- const Controls = (props: any) => {
34
- const {setRecordingActive, recordingActive, isHost} = props;
34
+ const Controls = () => {
35
+ const {isHost} = useMeetingInfo();
35
36
  const {rtcProps} = useContext(PropsContext);
36
37
 
37
38
  return (
38
- <LocalUserContext>
39
- <View style={style.bottomBar}>
40
- {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
41
- <LiveStreamControls showControls={true} />
42
- ) : (
43
- <>
44
- {/**
45
- * In event mode when raise hand feature is active
46
- * and audience is promoted to host, the audience can also
47
- * demote himself
48
- */}
49
- {$config.EVENT_MODE && (
50
- <LiveStreamControls
51
- showControls={
52
- rtcProps?.role == ClientRole.Broadcaster && !isHost
53
- }
54
- />
55
- )}
56
- <View style={{alignSelf: 'center'}}>
57
- <LocalAudioMute />
58
- </View>
59
- <View style={{alignSelf: 'center'}}>
60
- <LocalVideoMute />
61
- </View>
62
- {isHost && $config.CLOUD_RECORDING && (
63
- <View style={{alignSelf: 'baseline'}}>
64
- <Recording
65
- recordingActive={recordingActive}
66
- setRecordingActive={setRecordingActive}
67
- />
68
- </View>
69
- )}
70
- <View style={{alignSelf: 'center'}}>
71
- <SwitchCamera />
39
+ <View style={style.bottomBar}>
40
+ {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
41
+ <LiveStreamControls showControls={true} />
42
+ ) : (
43
+ <>
44
+ {/**
45
+ * In event mode when raise hand feature is active
46
+ * and audience is promoted to host, the audience can also
47
+ * demote himself
48
+ */}
49
+ {$config.EVENT_MODE && (
50
+ <LiveStreamControls
51
+ showControls={rtcProps?.role == ClientRole.Broadcaster && !isHost}
52
+ />
53
+ )}
54
+ <View style={{alignSelf: 'center'}}>
55
+ <LocalAudioMute />
56
+ </View>
57
+ <View style={{alignSelf: 'center'}}>
58
+ <LocalVideoMute />
59
+ </View>
60
+ {isHost && $config.CLOUD_RECORDING && (
61
+ <View style={{alignSelf: 'baseline'}}>
62
+ <Recording />
72
63
  </View>
73
- </>
74
- )}
75
- <View style={{alignSelf: 'center'}}>
76
- <Endcall />
77
- </View>
64
+ )}
65
+ <View style={{alignSelf: 'center'}}>
66
+ <LocalSwitchCamera />
67
+ </View>
68
+ </>
69
+ )}
70
+ <View style={{alignSelf: 'center'}}>
71
+ <LocalEndcall />
78
72
  </View>
79
- </LocalUserContext>
73
+ </View>
80
74
  );
81
75
  };
82
-
76
+ export const ControlsComponentsArray: [
77
+ (props: LocalAudioMuteProps) => JSX.Element,
78
+ (props: LocalVideoMuteProps) => JSX.Element,
79
+ (props: LocalSwitchCameraProps) => JSX.Element,
80
+ (props: ScreenshareButtonProps) => JSX.Element,
81
+ (props: RecordingButtonProps) => JSX.Element,
82
+ (props: LocalEndcallProps) => JSX.Element,
83
+ (props: LiveStreamControlsProps) => JSX.Element,
84
+ ] = [
85
+ LocalAudioMute,
86
+ LocalVideoMute,
87
+ LocalSwitchCamera,
88
+ ScreenshareButton,
89
+ Recording,
90
+ LocalEndcall,
91
+ LiveStreamControls,
92
+ ];
83
93
  const style = StyleSheet.create({
84
94
  bottomBar: {
85
95
  flex: 1,
@@ -10,23 +10,32 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {useState, useContext} from 'react';
13
- import {View, Dimensions, Platform, StyleSheet} from 'react-native';
14
- import {LocalUserContext} from '../../agora-rn-uikit';
15
- import {
16
- LocalAudioMute,
17
- LocalVideoMute,
18
- Endcall,
19
- PropsContext,
20
- } from '../../agora-rn-uikit';
21
- import Recording from '../subComponents/Recording';
22
- import SwitchCamera from '../subComponents/SwitchCamera';
23
- import ScreenshareButton from '../subComponents/screenshare/ScreenshareButton';
13
+ import {View, Dimensions, StyleSheet} from 'react-native';
14
+ import {PropsContext} from '../../agora-rn-uikit';
15
+ import LocalAudioMute, {
16
+ LocalAudioMuteProps,
17
+ } from '../subComponents/LocalAudioMute';
18
+ import LocalVideoMute, {
19
+ LocalVideoMuteProps,
20
+ } from '../subComponents/LocalVideoMute';
21
+ import Recording, {RecordingButtonProps} from '../subComponents/Recording';
22
+ import LocalSwitchCamera, {
23
+ LocalSwitchCameraProps,
24
+ } from '../subComponents/LocalSwitchCamera';
25
+ import ScreenshareButton, {
26
+ ScreenshareButtonProps,
27
+ } from '../subComponents/screenshare/ScreenshareButton';
24
28
  import {controlsHolder} from '../../theme.json';
25
- import mobileAndTabletCheck from '../utils/mobileWebTest';
29
+ import isMobileOrTablet from '../utils/isMobileOrTablet';
26
30
  import {ClientRole} from '../../agora-rn-uikit';
27
- import LiveStreamControls from './livestream/views/LiveStreamControls';
31
+ import LiveStreamControls, {
32
+ LiveStreamControlsProps,
33
+ } from './livestream/views/LiveStreamControls';
34
+ import {isIOS, isWeb} from '../utils/common';
35
+ import {useMeetingInfo} from './meeting-info/useMeetingInfo';
36
+ import LocalEndcall, {LocalEndcallProps} from '../subComponents/LocalEndCall';
28
37
 
29
- const Controls = (props: any) => {
38
+ const Controls = () => {
30
39
  const {rtcProps} = useContext(PropsContext);
31
40
 
32
41
  let onLayout = (e: any) => {
@@ -38,72 +47,84 @@ const Controls = (props: any) => {
38
47
  Dimensions.get('window').width > Dimensions.get('window').height,
39
48
  ]);
40
49
  const isDesktop = dim[0] > 1224;
41
- const {setRecordingActive, recordingActive, isHost} = props;
50
+ const {isHost} = useMeetingInfo();
42
51
 
43
52
  return (
44
- <LocalUserContext>
45
- <View
46
- style={[
47
- style.controlsHolder,
48
- {
49
- paddingHorizontal: isDesktop ? '25%' : '1%',
50
- backgroundColor: $config.SECONDARY_FONT_COLOR + 80,
51
- },
52
- ]}
53
- onLayout={onLayout}>
54
- {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
55
- <LiveStreamControls showControls={true} />
56
- ) : (
57
- <>
58
- {/**
59
- * In event mode when raise hand feature is active
60
- * and audience is promoted to host, the audience can also
61
- * demote himself
62
- */}
63
- {$config.EVENT_MODE && (
64
- <LiveStreamControls
65
- showControls={
66
- rtcProps?.role == ClientRole.Broadcaster && !isHost
67
- }
68
- />
69
- )}
53
+ <View
54
+ style={[
55
+ style.controlsHolder,
56
+ {
57
+ paddingHorizontal: isDesktop ? '25%' : '1%',
58
+ backgroundColor: $config.SECONDARY_FONT_COLOR + 80,
59
+ },
60
+ ]}
61
+ onLayout={onLayout}>
62
+ {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
63
+ <LiveStreamControls showControls={true} />
64
+ ) : (
65
+ <>
66
+ {/**
67
+ * In event mode when raise hand feature is active
68
+ * and audience is promoted to host, the audience can also
69
+ * demote himself
70
+ */}
71
+ {$config.EVENT_MODE && (
72
+ <LiveStreamControls
73
+ showControls={rtcProps?.role == ClientRole.Broadcaster && !isHost}
74
+ />
75
+ )}
76
+ <View style={{alignSelf: 'center'}}>
77
+ <LocalAudioMute />
78
+ </View>
79
+ <View style={{alignSelf: 'center'}}>
80
+ <LocalVideoMute />
81
+ </View>
82
+ {isMobileOrTablet() && (
83
+ <View style={{alignSelf: 'center'}}>
84
+ <LocalSwitchCamera />
85
+ </View>
86
+ )}
87
+ {$config.SCREEN_SHARING && !isMobileOrTablet() && (
70
88
  <View style={{alignSelf: 'center'}}>
71
- <LocalAudioMute />
89
+ <ScreenshareButton />
72
90
  </View>
91
+ )}
92
+ {isHost && $config.CLOUD_RECORDING && (
73
93
  <View style={{alignSelf: 'center'}}>
74
- <LocalVideoMute />
94
+ <Recording />
75
95
  </View>
76
- {mobileAndTabletCheck() && (
77
- <View style={{alignSelf: 'center'}}>
78
- <SwitchCamera />
79
- </View>
80
- )}
81
- {$config.SCREEN_SHARING && !mobileAndTabletCheck() && (
82
- <View style={{alignSelf: 'center'}}>
83
- <ScreenshareButton />
84
- </View>
85
- )}
86
- {isHost && $config.CLOUD_RECORDING && (
87
- <View style={{alignSelf: 'center'}}>
88
- <Recording
89
- recordingActive={recordingActive}
90
- setRecordingActive={setRecordingActive}
91
- />
92
- </View>
93
- )}
94
- </>
95
- )}
96
- <View style={{alignSelf: 'center'}}>
97
- <Endcall />
98
- </View>
96
+ )}
97
+ </>
98
+ )}
99
+ <View style={{alignSelf: 'center'}}>
100
+ <LocalEndcall />
99
101
  </View>
100
- </LocalUserContext>
102
+ </View>
101
103
  );
102
104
  };
103
105
 
106
+ export const ControlsComponentsArray: [
107
+ (props: LocalAudioMuteProps) => JSX.Element,
108
+ (props: LocalVideoMuteProps) => JSX.Element,
109
+ (props: LocalSwitchCameraProps) => JSX.Element,
110
+ (props: ScreenshareButtonProps) => JSX.Element,
111
+ (props: RecordingButtonProps) => JSX.Element,
112
+ (props: LocalEndcallProps) => JSX.Element,
113
+ (props: LiveStreamControlsProps) => JSX.Element,
114
+ ] = [
115
+ LocalAudioMute,
116
+ LocalVideoMute,
117
+ LocalSwitchCamera,
118
+ ScreenshareButton,
119
+ Recording,
120
+ LocalEndcall,
121
+ LiveStreamControls,
122
+ ];
123
+
104
124
  const style = StyleSheet.create({
125
+ // @ts-ignore
105
126
  controlsHolder: {
106
- flex: Platform.OS === 'web' ? 1.3 : 1.6,
127
+ flex: isWeb ? 1.3 : 1.6,
107
128
  ...controlsHolder,
108
129
  },
109
130
  chatNotification: {
@@ -114,7 +135,7 @@ const style = StyleSheet.create({
114
135
  justifyContent: 'center',
115
136
  backgroundColor: $config.PRIMARY_COLOR,
116
137
  color: $config.SECONDARY_FONT_COLOR,
117
- fontFamily: Platform.OS === 'ios' ? 'Helvetica' : 'sans-serif',
138
+ fontFamily: isIOS ? 'Helvetica' : 'sans-serif',
118
139
  borderRadius: 10,
119
140
  position: 'absolute',
120
141
  left: 25,
@@ -161,7 +161,7 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
161
161
  deviceList,
162
162
  setDeviceList,
163
163
  }}>
164
- {true ? props.children : <></>}
164
+ {props.children}
165
165
  </DeviceContext.Provider>
166
166
  );
167
167
  };
@@ -12,13 +12,20 @@
12
12
  import {createContext} from 'react';
13
13
 
14
14
  interface DeviceContext {
15
- selectedCam: any;
16
- setSelectedCam: (cam: any) => void;
17
- selectedMic: any;
18
- setSelectedMic: (mic: any) => void;
19
- deviceList: Array<any>;
20
- setDeviceList: (devices: any) => void;
15
+ selectedCam: string;
16
+ setSelectedCam: (cam: string) => void;
17
+ selectedMic: string;
18
+ setSelectedMic: (mic: string) => void;
19
+ deviceList: MediaDeviceInfo[];
20
+ setDeviceList: (devices: MediaDeviceInfo[]) => void;
21
21
  }
22
22
 
23
- const DeviceContext = createContext((null as unknown) as DeviceContext);
23
+ const DeviceContext = createContext<DeviceContext>({
24
+ selectedCam: '',
25
+ selectedMic: '',
26
+ deviceList: [],
27
+ setSelectedCam: () => {},
28
+ setSelectedMic: () => {},
29
+ setDeviceList: () => {},
30
+ });
24
31
  export default DeviceContext;
@@ -14,13 +14,18 @@ import {
14
14
  createHttpLink,
15
15
  InMemoryCache,
16
16
  ApolloProvider,
17
+ NormalizedCacheObject,
17
18
  } from '@apollo/client';
18
19
  import {setContext} from '@apollo/client/link/context';
19
20
  // import useMount from './useMount';
20
- import React, {useContext, useRef} from 'react';
21
+ import React, {createContext, useContext, useRef} from 'react';
21
22
  import StorageContext from './StorageContext';
22
23
  import AsyncStorage from '@react-native-community/async-storage';
23
24
 
25
+ export const GraphQLContext = createContext<{
26
+ client: ApolloClient<NormalizedCacheObject>;
27
+ }>({client: {}});
28
+
24
29
  const GraphQLProvider = (props: {children: React.ReactNode}) => {
25
30
  const httpLink = createHttpLink({
26
31
  uri: `${$config.BACKEND_ENDPOINT}/query`,
@@ -64,7 +69,9 @@ const GraphQLProvider = (props: {children: React.ReactNode}) => {
64
69
  console.log('GraphQL render triggered', store);
65
70
 
66
71
  return (
67
- <ApolloProvider client={client.current}>{props.children}</ApolloProvider>
72
+ <GraphQLContext.Provider value={{client: client.current}}>
73
+ <ApolloProvider client={client.current}>{props.children}</ApolloProvider>
74
+ </GraphQLContext.Provider>
68
75
  );
69
76
  };
70
77
 
@@ -9,33 +9,13 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
+ import {layoutComponent} from 'fpe-api';
12
13
  import React, {useMemo, useContext, useState} from 'react';
13
- import {
14
- View,
15
- Platform,
16
- StyleSheet,
17
- Text,
18
- Dimensions,
19
- Image,
20
- Pressable,
21
- useWindowDimensions,
22
- } from 'react-native';
23
- import {MinUidContext} from '../../agora-rn-uikit';
24
- import {MaxUidContext} from '../../agora-rn-uikit';
25
- import {MaxVideoView} from '../../agora-rn-uikit';
14
+ import {View, StyleSheet, Dimensions, Pressable} from 'react-native';
15
+ import {isWeb} from '../utils/common';
26
16
  import {RtcContext} from '../../agora-rn-uikit';
27
- import chatContext from './ChatContext';
28
- import icons from '../assets/icons';
29
- import ColorContext from './ColorContext';
30
- import FallbackLogo from '../subComponents/FallbackLogo';
31
- import Layout from '../subComponents/LayoutEnum';
32
- import ScreenShareNotice from '../subComponents/ScreenShareNotice';
33
- import {RFValue} from 'react-native-responsive-fontsize';
34
- import networkQualityContext from './NetworkQualityContext';
35
- import {NetworkQualityPill} from '../subComponents/NetworkQualityPill';
36
- import {ImageIcon} from '../../agora-rn-uikit';
37
- import TextWithTooltip from '../subComponents/TextWithTooltip';
38
-
17
+ import {useSetPinnedLayout} from '../pages/video-call/DefaultLayouts';
18
+ import RenderComponent from '../pages/video-call/RenderComponent';
39
19
  const layout = (len: number, isDesktop: boolean = true) => {
40
20
  const rows = Math.round(Math.sqrt(len));
41
21
  const cols = Math.ceil(len / rows);
@@ -54,25 +34,16 @@ const layout = (len: number, isDesktop: boolean = true) => {
54
34
  };
55
35
  };
56
36
 
57
- // const isDesktop = Platform.OS === 'web';
58
-
59
- interface GridVideoProps {
60
- setLayout: React.Dispatch<React.SetStateAction<Layout>>;
61
- }
62
-
63
- const GridVideo = (props: GridVideoProps) => {
64
- const {height, width} = useWindowDimensions();
37
+ const GridVideo: layoutComponent = ({renderData}) => {
65
38
  const {dispatch} = useContext(RtcContext);
66
- const max = useContext(MaxUidContext);
67
- const min = useContext(MinUidContext);
68
- const {primaryColor} = useContext(ColorContext);
69
- const networkQualityStat = useContext(networkQualityContext);
70
- const {userList, localUid} = useContext(chatContext);
71
- const users = [...max, ...min];
72
39
  let onLayout = (e: any) => {
73
- setDim([e.nativeEvent.layout.width, e.nativeEvent.layout.height]);
40
+ setDim([
41
+ e.nativeEvent.layout.width,
42
+ e.nativeEvent.layout.height,
43
+ e.nativeEvent.layout.width > e.nativeEvent.layout.height,
44
+ ]);
74
45
  };
75
- const [dim, setDim] = useState([
46
+ const [dim, setDim] = useState<[number, number, boolean]>([
76
47
  Dimensions.get('window').width,
77
48
  Dimensions.get('window').height,
78
49
  Dimensions.get('window').width > Dimensions.get('window').height,
@@ -80,9 +51,11 @@ const GridVideo = (props: GridVideoProps) => {
80
51
  const isDesktop = dim[0] > dim[1] + 100;
81
52
 
82
53
  let {matrix, dims} = useMemo(
83
- () => layout(users.length, isDesktop),
84
- [users.length, isDesktop],
54
+ () => layout(renderData.length, isDesktop),
55
+ [renderData.length, isDesktop],
85
56
  );
57
+
58
+ const setPinnedLayout = useSetPinnedLayout();
86
59
  return (
87
60
  <View
88
61
  style={[style.full, {paddingHorizontal: isDesktop ? 50 : 0}]}
@@ -95,130 +68,18 @@ const GridVideo = (props: GridVideoProps) => {
95
68
  if (!(ridx === 0 && cidx === 0)) {
96
69
  dispatch({
97
70
  type: 'SwapVideo',
98
- value: [users[ridx * dims.c + cidx]],
71
+ value: [renderData[ridx * dims.c + cidx]],
99
72
  });
100
73
  }
101
- props.setLayout(Layout.Pinned);
74
+ setPinnedLayout();
102
75
  }}
103
76
  style={{
104
- flex: Platform.OS === 'web' ? 1 / dims.c : 1,
77
+ flex: isWeb ? 1 / dims.c : 1,
105
78
  marginHorizontal: 'auto',
106
79
  }}
107
80
  key={cidx}>
108
81
  <View style={style.gridVideoContainerInner}>
109
- <NetworkQualityPill
110
- networkStat={
111
- // When no network quality reported and if user has no stream
112
- // published show "unsupported" else show "loading"
113
- networkQualityStat[users[ridx * dims.c + cidx].uid]
114
- ? networkQualityStat[users[ridx * dims.c + cidx].uid]
115
- : users[ridx * dims.c + cidx].audio ||
116
- users[ridx * dims.c + cidx].video
117
- ? 8
118
- : 7
119
- }
120
- primaryColor={primaryColor}
121
- rootStyle={{top: 5, left: 5}}
122
- />
123
- <ScreenShareNotice uid={users[ridx * dims.c + cidx].uid} />
124
- <MaxVideoView
125
- fallback={() => {
126
- if (users[ridx * dims.c + cidx].uid === 'local') {
127
- return FallbackLogo(userList[localUid]?.name);
128
- } else if (
129
- String(users[ridx * dims.c + cidx].uid)[0] === '1'
130
- ) {
131
- return FallbackLogo('PSTN User');
132
- } else {
133
- return FallbackLogo(
134
- userList[users[ridx * dims.c + cidx]?.uid]?.name,
135
- );
136
- }
137
- }}
138
- user={users[ridx * dims.c + cidx]}
139
- key={users[ridx * dims.c + cidx].uid}
140
- />
141
- <View
142
- style={{
143
- zIndex: 5,
144
- marginTop: -30,
145
- backgroundColor: $config.SECONDARY_FONT_COLOR + 'bb',
146
- alignSelf: 'flex-end',
147
- paddingHorizontal: 8,
148
- height: 30,
149
- borderTopLeftRadius: 15,
150
- borderBottomRightRadius: 15,
151
- // marginHorizontal: 'auto',
152
- maxWidth: '100%',
153
- flexDirection: 'row',
154
- // alignContent: 'flex-end',
155
- // width: '100%',
156
- // alignItems: 'flex-start',
157
- }}>
158
- {/* <View style={{alignSelf: 'flex-end', flexDirection: 'row'}}> */}
159
- <View style={[style.MicBackdrop]}>
160
- <ImageIcon
161
- name={
162
- users[ridx * dims.c + cidx].audio ? 'mic' : 'micOff'
163
- }
164
- color={
165
- users[ridx * dims.c + cidx].audio ? primaryColor : 'red'
166
- }
167
- style={style.MicIcon}
168
- />
169
- {/* <Image
170
- source={{
171
- uri: users[ridx * dims.c + cidx].audio
172
- ? icons.mic
173
- : icons.micOff,
174
- }}
175
- style={[
176
- style.MicIcon,
177
- {
178
- tintColor: users[ridx * dims.c + cidx].audio
179
- ? primaryColor
180
- : 'red',
181
- },
182
- ]}
183
- resizeMode={'contain'}
184
- /> */}
185
- </View>
186
- <View style={{flex:1}}>
187
- <TextWithTooltip
188
- value={users[ridx * dims.c + cidx].uid === 'local'
189
- ? userList[localUid]
190
- ? userList[localUid].name + ' '
191
- : 'You '
192
- : userList[users[ridx * dims.c + cidx].uid]
193
- ? userList[users[ridx * dims.c + cidx].uid].name + ' '
194
- : users[ridx * dims.c + cidx].uid === 1
195
- ? (userList[localUid]?.name + "'s screen ")
196
- : String(users[ridx * dims.c + cidx].uid)[0] === '1'
197
- ? 'PSTN User '
198
- : 'User '}
199
- style={
200
- {
201
- color: $config.PRIMARY_FONT_COLOR,
202
- lineHeight: 30,
203
- fontSize: RFValue(14, height > width ? height : width),
204
- fontWeight: '700',
205
- flexShrink: 1,
206
- // width: '100%',
207
- // alignSelf: 'stretch',
208
- // textAlign: 'center',
209
- }
210
- }
211
- />
212
- </View>
213
- {/* </View> */}
214
- {/* {console.log(
215
- '!nax',
216
- userList,
217
- userList[users[ridx * dims.c + cidx].uid],
218
- userList[localUid],
219
- users[ridx * dims.c + cidx].uid,
220
- )} */}
221
- </View>
82
+ <RenderComponent uid={renderData[ridx * dims.c + cidx]} />
222
83
  </View>
223
84
  </Pressable>
224
85
  ))}