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

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 (301) 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 +32186 -3078
  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 +14 -2
  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 +226 -0
  47. package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
  48. package/template/fpe-api/components.ts +42 -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 +128 -0
  53. package/template/fpe-api/typeDefinition.ts +143 -0
  54. package/template/fpe-api/useFpe.tsx +35 -0
  55. package/template/fpe-api/utils.ts +62 -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 +28 -12
  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 +171 -139
  73. package/template/src/components/ChatContext.ts +14 -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 +328 -416
  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 +293 -272
  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 +239 -0
  132. package/template/src/components/useWakeLock.tsx +3 -3
  133. package/template/src/custom-events/CustomEvents.ts +221 -0
  134. package/template/src/custom-events/index.tsx +4 -0
  135. package/template/src/custom-events/types.ts +51 -0
  136. package/template/src/language/default-labels/commonLabels.ts +21 -0
  137. package/template/src/language/default-labels/createScreenLabels.ts +22 -0
  138. package/template/src/language/default-labels/index.ts +38 -0
  139. package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
  140. package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
  141. package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
  142. package/template/src/language/default-labels/videoCallScreenLabels.ts +189 -0
  143. package/template/src/language/i18nTypes.ts +10 -0
  144. package/template/src/language/index.ts +18 -0
  145. package/template/src/language/useLanguage.tsx +92 -0
  146. package/template/src/pages/Authenticate.tsx +21 -15
  147. package/template/src/pages/Create.tsx +176 -159
  148. package/template/src/pages/Join.tsx +44 -32
  149. package/template/src/pages/VideoCall.tsx +134 -406
  150. package/template/src/pages/create/useCreate.tsx +37 -0
  151. package/template/src/pages/video-call/CustomLayout.ts +17 -0
  152. package/template/src/pages/video-call/CustomUserContextHolder.tsx +12 -0
  153. package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
  154. package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
  155. package/template/src/pages/video-call/RenderComponent.tsx +52 -0
  156. package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
  157. package/template/src/pages/video-call/VideoComponent.tsx +34 -0
  158. package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
  159. package/template/src/pages/video-call/index.ts +20 -0
  160. package/template/src/rtm/RTMEngine.ts +58 -0
  161. package/template/src/rtm/utils.ts +44 -0
  162. package/template/src/rtm-events/EventUtils.ts +267 -0
  163. package/template/src/rtm-events/EventsQueue.ts +38 -0
  164. package/template/src/rtm-events/constants.ts +40 -0
  165. package/template/src/rtm-events/index.tsx +8 -0
  166. package/template/src/rtm-events/types.ts +7 -0
  167. package/template/src/subComponents/ChatBubble.tsx +18 -11
  168. package/template/src/subComponents/ChatContainer.tsx +79 -30
  169. package/template/src/subComponents/ChatInput.tsx +146 -70
  170. package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
  171. package/template/src/subComponents/Error.tsx +35 -24
  172. package/template/src/subComponents/LanguageSelector.tsx +85 -0
  173. package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
  174. package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
  175. package/template/src/subComponents/LocalAudioMute.tsx +52 -30
  176. package/template/src/subComponents/LocalEndCall.tsx +52 -0
  177. package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
  178. package/template/src/subComponents/LocalVideoMute.tsx +48 -30
  179. package/template/src/subComponents/LogoutButton.tsx +20 -5
  180. package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
  181. package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
  182. package/template/src/subComponents/Recording.tsx +46 -138
  183. package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
  184. package/template/src/subComponents/RemoteEndCall.tsx +18 -7
  185. package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
  186. package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
  187. package/template/src/subComponents/SelectDevice.tsx +88 -45
  188. package/template/src/subComponents/SelectOAuth.tsx +30 -6
  189. package/template/src/subComponents/SidePanelButtons.ts +39 -0
  190. package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
  191. package/template/src/subComponents/TextWithTooltip.tsx +15 -20
  192. package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
  193. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
  194. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
  195. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
  196. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
  197. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
  198. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
  199. package/template/src/subComponents/livestream/index.ts +10 -2
  200. package/template/src/subComponents/recording/useRecording.tsx +209 -0
  201. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
  202. package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
  203. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +61 -31
  204. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
  205. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +102 -143
  206. package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
  207. package/template/src/subComponents/toastConfig.tsx +25 -20
  208. package/template/src/utils/IsAttendeeUser.ts +34 -0
  209. package/template/src/utils/SdkEvents.ts +68 -0
  210. package/template/src/utils/common.tsx +40 -0
  211. package/template/src/utils/eventEmitter.ts +29 -0
  212. package/template/src/utils/getMeetingInvite.ts +30 -0
  213. package/template/src/utils/index.tsx +11 -2
  214. package/template/src/utils/isAudioEnabled.ts +29 -0
  215. package/template/src/utils/isHostUser.ts +33 -0
  216. package/template/src/utils/isMobileOrTablet.native.ts +5 -0
  217. package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
  218. package/template/src/utils/isPSTNUser.ts +30 -0
  219. package/template/src/utils/isSDK.sdk.ts +5 -0
  220. package/template/src/utils/isSDK.ts +5 -0
  221. package/template/src/utils/isScreenShareUser.ts +31 -0
  222. package/template/src/utils/isVideoEnabled.ts +29 -0
  223. package/template/src/utils/useButtonTemplate.tsx +43 -0
  224. package/template/src/utils/useCreateMeeting.ts +74 -0
  225. package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
  226. package/template/src/utils/useGetMeetingPhrase.ts +68 -0
  227. package/template/src/utils/useGetName.ts +20 -0
  228. package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
  229. package/template/src/utils/useJoinMeeting.ts +120 -0
  230. package/template/src/utils/useLayout.tsx +40 -0
  231. package/template/src/utils/useLiveStreamingUids.ts +26 -0
  232. package/template/src/utils/useMutePSTN.ts +43 -0
  233. package/template/src/utils/useMuteToggleLocal.ts +109 -0
  234. package/template/src/utils/useNavParams.ts +6 -0
  235. package/template/src/utils/useNavigateTo.ts +8 -0
  236. package/template/src/utils/usePrivateMessages.ts +33 -0
  237. package/template/src/utils/useRemoteEndCall.ts +27 -0
  238. package/template/src/utils/useRemoteMute.ts +64 -0
  239. package/template/src/utils/useSendControlMessage.ts +51 -0
  240. package/template/src/utils/useSendMessage.ts +40 -0
  241. package/template/src/utils/useSetName.ts +20 -0
  242. package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
  243. package/template/src/utils/useSidePanel.tsx +41 -0
  244. package/template/src/utils/useString.ts +61 -0
  245. package/template/src/utils/useUnreadMessageCount.ts +50 -0
  246. package/template/src/utils/useUserList.ts +26 -0
  247. package/template/tsconfig.json +4 -4
  248. package/template/tsconfig_fpeApi.json +103 -0
  249. package/template/tsconfig_rsdk_index.json +105 -0
  250. package/template/tsconfig_wsdk_index.json +104 -0
  251. package/template/webpack.commons.js +40 -16
  252. package/template/webpack.main.config.js +2 -1
  253. package/template/webpack.renderer.config.js +1 -1
  254. package/template/webpack.rsdk.config.js +33 -0
  255. package/template/webpack.ts.config.js +89 -0
  256. package/template/webpack.web.config.js +8 -1
  257. package/template/webpack.wsdk.config.js +34 -0
  258. package/template/agora-rn-uikit/.git/HEAD +0 -1
  259. package/template/agora-rn-uikit/.git/config +0 -16
  260. package/template/agora-rn-uikit/.git/description +0 -1
  261. package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
  262. package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
  263. package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -173
  264. package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
  265. package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
  266. package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
  267. package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
  268. package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
  269. package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
  270. package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
  271. package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
  272. package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
  273. package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
  274. package/template/agora-rn-uikit/.git/index +0 -0
  275. package/template/agora-rn-uikit/.git/info/exclude +0 -6
  276. package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
  277. package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
  278. package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
  279. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
  280. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
  281. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.pack +0 -0
  282. package/template/agora-rn-uikit/.git/packed-refs +0 -24
  283. package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
  284. package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
  285. package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
  286. package/template/agora-rn-uikit/.gitignore +0 -63
  287. package/template/agora-rn-uikit/package-lock.json +0 -7612
  288. package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
  289. package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
  290. package/template/package-lock.json +0 -22923
  291. package/template/react-native-toast-message/.gitignore +0 -5
  292. package/template/react-native-toast-message/.npmignore +0 -5
  293. package/template/react-native-toast-message/package-lock.json +0 -10553
  294. package/template/src/.DS_Store +0 -0
  295. package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
  296. package/template/src/subComponents/.DS_Store +0 -0
  297. package/template/src/subComponents/ScreenshareButton.tsx +0 -257
  298. package/template/src/subComponents/SwitchCamera.tsx +0 -35
  299. package/template/src/utils/hasBrandLogo.tsx +0 -3
  300. package/template/src/utils/mobileWebTest.native.tsx +0 -5
  301. package/template/src/utils/shouldAuthenticate.tsx +0 -7
@@ -0,0 +1,35 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ import React, {useContext} from 'react';
14
+ import {View} from 'react-native';
15
+ import {MaxVideoView, RtcContext} from '../../../agora-rn-uikit';
16
+ import useUserList from '../../utils/useUserList';
17
+
18
+ const VideoPreview: React.FC = () => {
19
+ const rtc = useContext(RtcContext);
20
+ rtc?.RtcEngine?.startPreview();
21
+
22
+ const {renderList, renderPosition} = useUserList();
23
+ const [maxUid] = renderPosition;
24
+
25
+ if (!maxUid) {
26
+ return null;
27
+ }
28
+
29
+ return (
30
+ <View style={{borderRadius: 10, flex: 1}}>
31
+ <MaxVideoView user={renderList[maxUid]} key={maxUid} />
32
+ </View>
33
+ );
34
+ };
35
+ export default VideoPreview;
@@ -0,0 +1,33 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ import React from 'react';
14
+ import {View} from 'react-native';
15
+ import {MaxVideoView} from '../../../agora-rn-uikit';
16
+ import useUserList from '../../utils/useUserList';
17
+
18
+ const VideoPreview: React.FC = () => {
19
+ const {renderList, renderPosition} = useUserList();
20
+
21
+ const [maxUid] = renderPosition;
22
+
23
+ if (!maxUid) {
24
+ return null;
25
+ }
26
+
27
+ return (
28
+ <View style={{borderRadius: 10, flex: 1}}>
29
+ <MaxVideoView user={renderList[maxUid]} key={maxUid} />
30
+ </View>
31
+ );
32
+ };
33
+ export default VideoPreview;
@@ -0,0 +1,28 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ import PreCallLocalMute, {PreCallLocalMuteComponentsArray} from './LocalMute';
14
+ import PreCallVideoPreview from './VideoPreview';
15
+ import PreCallSelectDevice from './selectDevice';
16
+ import PreCallJoinBtn, {PreCallJoinCallBtnProps} from './joinCallBtn';
17
+ import PreCallTextInput from './textInput';
18
+ import PreCallMeetingTitle from './meetingTitle';
19
+ export {
20
+ PreCallLocalMuteComponentsArray,
21
+ PreCallLocalMute,
22
+ PreCallVideoPreview,
23
+ PreCallSelectDevice,
24
+ PreCallJoinBtn,
25
+ PreCallTextInput,
26
+ PreCallMeetingTitle,
27
+ };
28
+ export type {PreCallJoinCallBtnProps};
@@ -0,0 +1,69 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ import React, {useContext, useEffect} from 'react';
14
+ import PrimaryButton from '../../atoms/PrimaryButton';
15
+ import {usePreCall} from '../../components/precall/usePreCall';
16
+ import {useString} from '../../utils/useString';
17
+ import {ChannelProfile, PropsContext} from '../../../agora-rn-uikit';
18
+ import {JoinRoomButtonTextInterface} from '../../language/default-labels/precallScreenLabels';
19
+ import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
20
+ import useGetName from '../../utils/useGetName';
21
+
22
+ export interface PreCallJoinCallBtnProps {
23
+ render?: (
24
+ onPress: () => void,
25
+ title: string,
26
+ disabled: boolean,
27
+ ) => JSX.Element;
28
+ }
29
+
30
+ const JoinCallBtn = (props: PreCallJoinCallBtnProps) => {
31
+ const {rtcProps} = useContext(PropsContext);
32
+ const {setCallActive} = usePreCall();
33
+ const username = useGetName();
34
+ const {isJoinDataFetched} = useMeetingInfo();
35
+ const joinRoomButton =
36
+ useString<JoinRoomButtonTextInterface>('joinRoomButton');
37
+
38
+ const [buttonText, setButtonText] = React.useState(
39
+ joinRoomButton({
40
+ ready: isJoinDataFetched,
41
+ role: $config.EVENT_MODE ? rtcProps.role : undefined,
42
+ }),
43
+ );
44
+ useEffect(() => {
45
+ if (rtcProps?.role) {
46
+ setButtonText(
47
+ joinRoomButton({
48
+ ready: isJoinDataFetched,
49
+ role: $config.EVENT_MODE ? rtcProps.role : undefined,
50
+ }),
51
+ );
52
+ }
53
+ }, [rtcProps?.role]);
54
+
55
+ const onSubmit = () => {
56
+ setCallActive(true);
57
+ };
58
+
59
+ const title = buttonText;
60
+ const onPress = () => onSubmit();
61
+ const disabled = !isJoinDataFetched || username === '';
62
+ return props?.render ? (
63
+ props.render(onPress, title, disabled)
64
+ ) : (
65
+ <PrimaryButton onPress={onPress} disabled={disabled} text={title} />
66
+ );
67
+ };
68
+
69
+ export default JoinCallBtn;
@@ -0,0 +1,91 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ import React, {useContext, useEffect} from 'react';
14
+ import PrimaryButton from '../../atoms/PrimaryButton';
15
+ import {usePreCall} from '../../components/precall/usePreCall';
16
+ import {useString} from '../../utils/useString';
17
+ import {ChannelProfile, PropsContext} from '../../../agora-rn-uikit';
18
+ import {JoinRoomButtonTextInterface} from '../../language/default-labels/precallScreenLabels';
19
+ import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
20
+ import useGetName from '../../utils/useGetName';
21
+ import {useWakeLock} from '../../components/useWakeLock';
22
+ import isMobileOrTablet from '../../utils/isMobileOrTablet';
23
+ import {isWeb} from '../../utils/common';
24
+
25
+ const audio = new Audio(
26
+ 'https://dl.dropboxusercontent.com/s/1cdwpm3gca9mlo0/kick.mp3',
27
+ );
28
+
29
+ export interface PreCallJoinCallBtnProps {
30
+ render?: (
31
+ onPress: () => void,
32
+ title: string,
33
+ disabled: boolean,
34
+ ) => JSX.Element;
35
+ }
36
+
37
+ const JoinCallBtn = (props: PreCallJoinCallBtnProps) => {
38
+ const {rtcProps} = useContext(PropsContext);
39
+ const {setCallActive} = usePreCall();
40
+ const username = useGetName();
41
+ const {isJoinDataFetched} = useMeetingInfo();
42
+ const {awake, request} = useWakeLock();
43
+ const joinRoomButton =
44
+ useString<JoinRoomButtonTextInterface>('joinRoomButton');
45
+
46
+ const [buttonText, setButtonText] = React.useState(
47
+ joinRoomButton({
48
+ ready: isJoinDataFetched,
49
+ role: $config.EVENT_MODE ? rtcProps.role : undefined,
50
+ }),
51
+ );
52
+
53
+ const onSubmit = () => {
54
+ setCallActive(true);
55
+ // Play a sound to avoid autoblocking in safari
56
+ if (isWeb || isMobileOrTablet()) {
57
+ audio.volume = 0;
58
+ audio.play().then(() => {
59
+ // pause directly once played
60
+ audio.pause();
61
+ });
62
+ }
63
+ // Avoid Sleep only on mobile browsers
64
+ if (isWeb && isMobileOrTablet() && !awake) {
65
+ // Request wake lock
66
+ request();
67
+ }
68
+ };
69
+
70
+ useEffect(() => {
71
+ if (rtcProps?.role) {
72
+ setButtonText(
73
+ joinRoomButton({
74
+ ready: isJoinDataFetched,
75
+ role: $config.EVENT_MODE ? rtcProps.role : undefined,
76
+ }),
77
+ );
78
+ }
79
+ }, [rtcProps?.role]);
80
+
81
+ const title = buttonText;
82
+ const onPress = () => onSubmit();
83
+ const disabled = !isJoinDataFetched || username === '';
84
+ return props?.render ? (
85
+ props.render(onPress, title, disabled)
86
+ ) : (
87
+ <PrimaryButton onPress={onPress} disabled={disabled} text={title} />
88
+ );
89
+ };
90
+
91
+ export default JoinCallBtn;
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import {Text, StyleSheet, View} from 'react-native';
3
+ import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
4
+
5
+ const MeetingTitle: React.FC = () => {
6
+ const {meetingTitle} = useMeetingInfo();
7
+ return (
8
+ <>
9
+ <Text style={[style.titleHeading, {color: $config.PRIMARY_COLOR}]}>
10
+ {meetingTitle}
11
+ </Text>
12
+ <View style={{height: 50}} />
13
+ </>
14
+ );
15
+ };
16
+
17
+ export default MeetingTitle;
18
+
19
+ const style = StyleSheet.create({
20
+ titleHeading: {
21
+ fontSize: 28,
22
+ fontWeight: '700',
23
+ textAlign: 'center',
24
+ color: $config.SECONDARY_FONT_COLOR,
25
+ },
26
+ });
@@ -0,0 +1,46 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ import React from 'react';
14
+ import {View, StyleSheet, Text} from 'react-native';
15
+ import {isWeb} from '../../utils/common';
16
+ import SelectDevice from '../../subComponents/SelectDevice';
17
+ import {useString} from '../../utils/useString';
18
+
19
+ const selectDevice: React.FC = () => {
20
+ //commented for v1 release
21
+ //const selectInputDeviceLabel = useString('selectInputDeviceLabel')();
22
+ const selectInputDeviceLabel = 'Select Input Device';
23
+ return (
24
+ <>
25
+ <Text style={style.subHeading}>{selectInputDeviceLabel}</Text>
26
+ <View
27
+ style={{
28
+ flex: 1,
29
+ maxWidth: isWeb ? '25vw' : 'auto',
30
+ marginVertical: 30,
31
+ }}>
32
+ <SelectDevice />
33
+ </View>
34
+ </>
35
+ );
36
+ };
37
+
38
+ export default selectDevice;
39
+
40
+ const style = StyleSheet.create({
41
+ subHeading: {
42
+ fontSize: 18,
43
+ fontWeight: '700',
44
+ color: $config.PRIMARY_FONT_COLOR,
45
+ },
46
+ });
@@ -0,0 +1,43 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ import React from 'react';
14
+ import TextInput from '../../atoms/TextInput';
15
+ import {useString} from '../../utils/useString';
16
+ import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
17
+ import useSetName from '../../utils/useSetName';
18
+ import useGetName from '../../utils/useGetName';
19
+
20
+ const PreCallTextInput: React.FC = () => {
21
+ //commented for v1 release
22
+ // const userNamePlaceholder = useString('userNamePlaceholder')();
23
+ // const fetchingNamePlaceholder = useString('fetchingNamePlaceholder')();
24
+ const userNamePlaceholder = 'Display name*';
25
+ const fetchingNamePlaceholder = 'Getting name...';
26
+ const username = useGetName();
27
+ const setUsername = useSetName();
28
+ const {isJoinDataFetched} = useMeetingInfo();
29
+
30
+ return (
31
+ <TextInput
32
+ value={username}
33
+ onChangeText={(text) => setUsername(text ? text.trim() : '')}
34
+ onSubmitEditing={() => {}}
35
+ placeholder={
36
+ isJoinDataFetched ? userNamePlaceholder : fetchingNamePlaceholder
37
+ }
38
+ editable={isJoinDataFetched}
39
+ />
40
+ );
41
+ };
42
+
43
+ export default PreCallTextInput;
@@ -0,0 +1,41 @@
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
+ import {ApolloError} from '@apollo/client';
15
+
16
+ export interface PreCallContextInterface {
17
+ callActive: boolean;
18
+ setCallActive: React.Dispatch<React.SetStateAction<boolean>>;
19
+ error?: ApolloError;
20
+ }
21
+
22
+ const PreCallContext = createContext<PreCallContextInterface>({
23
+ callActive: false,
24
+ setCallActive: () => {},
25
+ });
26
+
27
+ interface PreCallProviderProps {
28
+ value: PreCallContextInterface;
29
+ children: React.ReactNode;
30
+ }
31
+
32
+ const PreCallProvider = (props: PreCallProviderProps) => {
33
+ return (
34
+ <PreCallContext.Provider value={{...props.value}}>
35
+ {props.children}
36
+ </PreCallContext.Provider>
37
+ );
38
+ };
39
+ const usePreCall = createHook(PreCallContext);
40
+
41
+ export {PreCallProvider, usePreCall};
@@ -9,7 +9,7 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import {Platform} from 'react-native';
12
+ import {isWeb} from '../utils/common';
13
13
 
14
14
  const styles = {
15
15
  temp: {
@@ -19,8 +19,8 @@ const styles = {
19
19
  borderRadius: 15,
20
20
  },
21
21
  bottomBar: {
22
- flex: Platform.OS === 'web' ? 1.3 : 1.6,
23
- paddingHorizontal: Platform.OS === 'web' ? '20%' : '1%',
22
+ flex: isWeb ? 1.3 : 1.6,
23
+ paddingHorizontal: isWeb ? '20%' : '1%',
24
24
  backgroundColor: $config.SECONDARY_FONT_COLOR + 80,
25
25
  flexDirection: 'row',
26
26
  justifyContent: 'space-evenly',
@@ -41,6 +41,23 @@ const styles = {
41
41
  alignItems: 'center',
42
42
  justifyContent: 'center',
43
43
  },
44
+ localButtonWithoutBG: {
45
+ borderRadius: 23,
46
+ borderColor: $config.PRIMARY_COLOR,
47
+ borderWidth: 0,
48
+ width: 40,
49
+ height: 40,
50
+ padding: 3,
51
+ display: 'flex',
52
+ alignSelf: 'center',
53
+ alignItems: 'center',
54
+ justifyContent: 'center',
55
+ },
56
+ fullWidthButton: {
57
+ width: '100%',
58
+ height: '100%',
59
+ resizeMode: 'contain',
60
+ },
44
61
  endCall: {
45
62
  backgroundColor: $config.SECONDARY_FONT_COLOR, //'#fff',
46
63
  borderRadius: 23,