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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/Readme.md +7 -1
  2. package/package.json +4 -3
  3. package/template/Gulpfile.js +389 -82
  4. package/template/_gitignore +4 -1
  5. package/template/_package-lock.json +32214 -3080
  6. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
  7. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
  8. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
  9. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
  12. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
  14. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
  16. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
  17. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
  21. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
  24. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
  25. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
  26. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
  27. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
  28. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
  30. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
  31. package/template/agora-rn-uikit/src/Rtc/Create.tsx +22 -3
  32. package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
  33. package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
  34. package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
  35. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
  36. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
  37. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
  38. package/template/agora-rn-uikit/src/index.ts +12 -12
  39. package/template/babel.config.js +17 -1
  40. package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
  41. package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
  42. package/template/bridge/rtc/webNg/Types.ts +14 -0
  43. package/template/bridge/rtc/webNg/index.ts +5 -2
  44. package/template/bridge/rtm/web/index.ts +13 -7
  45. package/template/electron-builder.js +3 -2
  46. package/template/esbuild.rsdk.go +240 -0
  47. package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
  48. package/template/fpe-api/components.ts +43 -0
  49. package/template/fpe-api/context.ts +45 -0
  50. package/template/fpe-api/fpeEvents.ts +9 -0
  51. package/template/fpe-api/index.ts +21 -0
  52. package/template/fpe-api/install.ts +138 -0
  53. package/template/fpe-api/typeDefinition.ts +144 -0
  54. package/template/fpe-api/useFpe.tsx +35 -0
  55. package/template/fpe-api/utils.ts +61 -0
  56. package/template/fpe-implementation/createHook.ts +33 -0
  57. package/template/fpe-implementation/dummyFpe.ts +17 -0
  58. package/template/fpe-implementation/index.ts +1 -0
  59. package/template/fpe-todo.txt +14 -0
  60. package/template/fpe.config.js +29 -0
  61. package/template/global.d.ts +4 -0
  62. package/template/index.rsdk.tsx +27 -0
  63. package/template/index.wsdk.tsx +27 -0
  64. package/template/package.json +30 -13
  65. package/template/react-native-toast-message/src/index.js +9 -10
  66. package/template/react-native-toast-message/src/index.wsdk.js +419 -0
  67. package/template/src/App.tsx +97 -65
  68. package/template/src/AppWrapper.tsx +79 -0
  69. package/template/src/SDKAppWrapper.tsx +67 -0
  70. package/template/src/atoms/PrimaryButton.tsx +14 -8
  71. package/template/src/atoms/TextInput.tsx +13 -5
  72. package/template/src/components/Chat.tsx +178 -137
  73. package/template/src/components/ChatContext.ts +18 -22
  74. package/template/src/components/ColorConfigure.tsx +2 -2
  75. package/template/src/components/Controls.native.tsx +72 -62
  76. package/template/src/components/Controls.tsx +90 -69
  77. package/template/src/components/DeviceConfigure.tsx +1 -1
  78. package/template/src/components/DeviceContext.tsx +14 -7
  79. package/template/src/components/GraphQLProvider.tsx +9 -2
  80. package/template/src/components/GridVideo.tsx +20 -159
  81. package/template/src/components/HostControlView.tsx +54 -15
  82. package/template/src/components/Navbar.tsx +408 -157
  83. package/template/src/components/NetworkQualityContext.tsx +29 -22
  84. package/template/src/components/ParticipantsView.tsx +91 -115
  85. package/template/src/components/PinnedVideo.tsx +41 -188
  86. package/template/src/components/Precall.native.tsx +131 -97
  87. package/template/src/components/Precall.tsx +193 -158
  88. package/template/src/components/RTMConfigure.tsx +309 -415
  89. package/template/src/components/Router.sdk.ts +20 -0
  90. package/template/src/components/SessionContext.tsx +6 -3
  91. package/template/src/components/Settings.native.tsx +3 -0
  92. package/template/src/components/Settings.tsx +65 -31
  93. package/template/src/components/SettingsView.tsx +14 -8
  94. package/template/src/components/Share.tsx +188 -220
  95. package/template/src/components/StorageContext.tsx +5 -5
  96. package/template/src/components/StoreToken.tsx +5 -1
  97. package/template/src/components/chat-messages/useChatMessages.tsx +208 -0
  98. package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
  99. package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
  100. package/template/src/components/common/Error.tsx +54 -0
  101. package/template/src/components/common/Logo.tsx +35 -0
  102. package/template/src/components/common/index.tsx +8 -0
  103. package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
  104. package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
  105. package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
  106. package/template/src/components/dimension/DimensionContext.ts +27 -0
  107. package/template/src/components/dimension/DimensionProvider.tsx +34 -0
  108. package/template/src/components/livestream/LiveStreamContext.tsx +297 -273
  109. package/template/src/components/livestream/Types.ts +26 -7
  110. package/template/src/components/livestream/index.ts +13 -2
  111. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
  112. package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
  113. package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
  114. package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
  115. package/template/src/components/participants/AllHostParticipants.tsx +41 -53
  116. package/template/src/components/participants/MeParticipant.tsx +9 -10
  117. package/template/src/components/participants/ParticipantName.tsx +2 -1
  118. package/template/src/components/participants/RemoteParticipants.tsx +3 -3
  119. package/template/src/components/precall/LocalMute.native.tsx +91 -0
  120. package/template/src/components/precall/LocalMute.tsx +90 -0
  121. package/template/src/components/precall/VideoPreview.native.tsx +35 -0
  122. package/template/src/components/precall/VideoPreview.tsx +33 -0
  123. package/template/src/components/precall/index.tsx +28 -0
  124. package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
  125. package/template/src/components/precall/joinCallBtn.tsx +91 -0
  126. package/template/src/components/precall/meetingTitle.tsx +26 -0
  127. package/template/src/components/precall/selectDevice.tsx +46 -0
  128. package/template/src/components/precall/textInput.tsx +43 -0
  129. package/template/src/components/precall/usePreCall.tsx +41 -0
  130. package/template/src/components/styles.ts +20 -3
  131. package/template/src/components/useShareLink.tsx +237 -0
  132. package/template/src/components/useUserPreference.tsx +125 -0
  133. package/template/src/components/useWakeLock.tsx +3 -3
  134. package/template/src/custom-events/CustomEvents.ts +238 -0
  135. package/template/src/custom-events/index.tsx +4 -0
  136. package/template/src/custom-events/types.ts +51 -0
  137. package/template/src/language/default-labels/commonLabels.ts +21 -0
  138. package/template/src/language/default-labels/createScreenLabels.ts +22 -0
  139. package/template/src/language/default-labels/index.ts +38 -0
  140. package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
  141. package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
  142. package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
  143. package/template/src/language/default-labels/videoCallScreenLabels.ts +191 -0
  144. package/template/src/language/i18nTypes.ts +10 -0
  145. package/template/src/language/index.ts +18 -0
  146. package/template/src/language/useLanguage.tsx +92 -0
  147. package/template/src/pages/Authenticate.tsx +21 -15
  148. package/template/src/pages/Create.tsx +180 -159
  149. package/template/src/pages/Join.tsx +47 -32
  150. package/template/src/pages/VideoCall.tsx +138 -407
  151. package/template/src/pages/create/useCreate.tsx +37 -0
  152. package/template/src/pages/video-call/CustomLayout.ts +17 -0
  153. package/template/src/pages/video-call/CustomUserContextHolder.tsx +20 -0
  154. package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
  155. package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
  156. package/template/src/pages/video-call/RenderComponent.tsx +52 -0
  157. package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
  158. package/template/src/pages/video-call/VideoComponent.tsx +34 -0
  159. package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
  160. package/template/src/pages/video-call/index.ts +20 -0
  161. package/template/src/rtm/RTMEngine.ts +58 -0
  162. package/template/src/rtm/utils.ts +44 -0
  163. package/template/src/rtm-events/EventUtils.ts +267 -0
  164. package/template/src/rtm-events/EventsQueue.ts +38 -0
  165. package/template/src/rtm-events/constants.ts +42 -0
  166. package/template/src/rtm-events/index.tsx +8 -0
  167. package/template/src/rtm-events/types.ts +7 -0
  168. package/template/src/subComponents/ChatBubble.tsx +21 -12
  169. package/template/src/subComponents/ChatContainer.tsx +79 -30
  170. package/template/src/subComponents/ChatInput.tsx +146 -70
  171. package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
  172. package/template/src/subComponents/Error.tsx +35 -24
  173. package/template/src/subComponents/LanguageSelector.tsx +85 -0
  174. package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
  175. package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
  176. package/template/src/subComponents/LocalAudioMute.tsx +52 -30
  177. package/template/src/subComponents/LocalEndCall.tsx +52 -0
  178. package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
  179. package/template/src/subComponents/LocalVideoMute.tsx +48 -30
  180. package/template/src/subComponents/LogoutButton.tsx +20 -5
  181. package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
  182. package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
  183. package/template/src/subComponents/Recording.tsx +46 -138
  184. package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
  185. package/template/src/subComponents/RemoteEndCall.tsx +18 -7
  186. package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
  187. package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
  188. package/template/src/subComponents/SelectDevice.tsx +88 -45
  189. package/template/src/subComponents/SelectOAuth.tsx +30 -6
  190. package/template/src/subComponents/SidePanelButtons.ts +39 -0
  191. package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
  192. package/template/src/subComponents/TextWithTooltip.tsx +15 -20
  193. package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
  194. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
  195. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
  196. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
  197. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
  198. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
  199. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
  200. package/template/src/subComponents/livestream/index.ts +10 -2
  201. package/template/src/subComponents/recording/useRecording.tsx +209 -0
  202. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
  203. package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
  204. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +61 -31
  205. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
  206. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +104 -144
  207. package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
  208. package/template/src/subComponents/toastConfig.tsx +25 -20
  209. package/template/src/utils/IsAttendeeUser.ts +34 -0
  210. package/template/src/utils/SdkEvents.ts +68 -0
  211. package/template/src/utils/common.tsx +40 -0
  212. package/template/src/utils/eventEmitter.ts +29 -0
  213. package/template/src/utils/getMeetingInvite.ts +53 -0
  214. package/template/src/utils/index.tsx +11 -2
  215. package/template/src/utils/isAudioEnabled.ts +29 -0
  216. package/template/src/utils/isHostUser.ts +33 -0
  217. package/template/src/utils/isMobileOrTablet.native.ts +5 -0
  218. package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
  219. package/template/src/utils/isPSTNUser.ts +30 -0
  220. package/template/src/utils/isSDK.sdk.ts +5 -0
  221. package/template/src/utils/isSDK.ts +5 -0
  222. package/template/src/utils/isScreenShareUser.ts +31 -0
  223. package/template/src/utils/isVideoEnabled.ts +29 -0
  224. package/template/src/utils/useButtonTemplate.tsx +43 -0
  225. package/template/src/utils/useCreateMeeting.ts +74 -0
  226. package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
  227. package/template/src/utils/useGetMeetingPhrase.ts +68 -0
  228. package/template/src/utils/useGetName.ts +19 -0
  229. package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
  230. package/template/src/utils/useJoinMeeting.ts +128 -0
  231. package/template/src/utils/useLayout.tsx +40 -0
  232. package/template/src/utils/useLiveStreamingUids.ts +26 -0
  233. package/template/src/utils/useLocalShareScreenUid.ts +19 -0
  234. package/template/src/utils/useMutePSTN.ts +43 -0
  235. package/template/src/utils/useMuteToggleLocal.ts +109 -0
  236. package/template/src/utils/useNavParams.ts +6 -0
  237. package/template/src/utils/useNavigateTo.ts +8 -0
  238. package/template/src/utils/usePrivateMessages.ts +33 -0
  239. package/template/src/utils/useRemoteEndCall.ts +27 -0
  240. package/template/src/utils/useRemoteMute.ts +64 -0
  241. package/template/src/utils/useSendControlMessage.ts +51 -0
  242. package/template/src/utils/useSendMessage.ts +40 -0
  243. package/template/src/utils/useSetName.ts +18 -0
  244. package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
  245. package/template/src/utils/useSidePanel.tsx +41 -0
  246. package/template/src/utils/useString.ts +61 -0
  247. package/template/src/utils/useUnreadMessageCount.ts +50 -0
  248. package/template/src/utils/useUserList.ts +26 -0
  249. package/template/tsconfig.json +4 -4
  250. package/template/tsconfig_fpeApi.json +103 -0
  251. package/template/tsconfig_rsdk_index.json +105 -0
  252. package/template/tsconfig_wsdk_index.json +104 -0
  253. package/template/webpack.commons.js +40 -16
  254. package/template/webpack.main.config.js +2 -1
  255. package/template/webpack.renderer.config.js +1 -1
  256. package/template/webpack.rsdk.config.js +33 -0
  257. package/template/webpack.ts.config.js +89 -0
  258. package/template/webpack.web.config.js +8 -1
  259. package/template/webpack.wsdk.config.js +34 -0
  260. package/template/agora-rn-uikit/.git/HEAD +0 -1
  261. package/template/agora-rn-uikit/.git/config +0 -16
  262. package/template/agora-rn-uikit/.git/description +0 -1
  263. package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
  264. package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
  265. package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -173
  266. package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
  267. package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
  268. package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
  269. package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
  270. package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
  271. package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
  272. package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
  273. package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
  274. package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
  275. package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
  276. package/template/agora-rn-uikit/.git/index +0 -0
  277. package/template/agora-rn-uikit/.git/info/exclude +0 -6
  278. package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
  279. package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
  280. package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
  281. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
  282. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
  283. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.pack +0 -0
  284. package/template/agora-rn-uikit/.git/packed-refs +0 -24
  285. package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
  286. package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
  287. package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
  288. package/template/agora-rn-uikit/.gitignore +0 -63
  289. package/template/agora-rn-uikit/package-lock.json +0 -7612
  290. package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
  291. package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
  292. package/template/package-lock.json +0 -22923
  293. package/template/react-native-toast-message/.gitignore +0 -5
  294. package/template/react-native-toast-message/.npmignore +0 -5
  295. package/template/react-native-toast-message/package-lock.json +0 -10553
  296. package/template/src/.DS_Store +0 -0
  297. package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
  298. package/template/src/subComponents/.DS_Store +0 -0
  299. package/template/src/subComponents/ScreenshareButton.tsx +0 -257
  300. package/template/src/subComponents/SwitchCamera.tsx +0 -35
  301. package/template/src/utils/hasBrandLogo.tsx +0 -3
  302. package/template/src/utils/mobileWebTest.native.tsx +0 -5
  303. package/template/src/utils/shouldAuthenticate.tsx +0 -7
@@ -9,200 +9,221 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useEffect, useState} from 'react';
13
- import {
14
- View,
15
- Text,
16
- StyleSheet,
17
- Dimensions,
18
- ScrollView,
19
- Platform,
20
- } from 'react-native';
12
+ import React, {useEffect, useState, useContext} from 'react';
13
+ import {View, Text, StyleSheet, ScrollView} from 'react-native';
21
14
  import {useHistory} from '../components/Router';
22
15
  import Checkbox from '../subComponents/Checkbox';
23
- import {gql, useMutation} from '@apollo/client';
24
- import Logo from '../subComponents/Logo';
25
- // import OpenInNativeButton from '../subComponents/OpenInNativeButton';
26
- import Share from '../components/Share';
27
- // import ColorContext from '../components/ColorContext';
28
- // import Illustration from '../subComponents/Illustration';
29
- // import {textInput} from '../../theme.json';
30
16
  import PrimaryButton from '../atoms/PrimaryButton';
31
17
  import SecondaryButton from '../atoms/SecondaryButton';
32
18
  import HorizontalRule from '../atoms/HorizontalRule';
33
19
  import TextInput from '../atoms/TextInput';
34
- import Error from '../subComponents/Error';
35
20
  import Toast from '../../react-native-toast-message';
36
- import hasBrandLogo from '../utils/hasBrandLogo';
21
+ import {ErrorContext} from '../components/common';
22
+ import ShareLink from '../components/Share';
23
+ import Logo from '../components/common/Logo';
24
+ import {isWeb, isValidReactComponent} from '../utils/common';
25
+ import {useFpe, useMeetingInfo} from 'fpe-api';
26
+ import {useString} from '../utils/useString';
27
+ import useCreateMeeting from '../utils/useCreateMeeting';
28
+ import {CreateProvider} from './create/useCreate';
29
+ import useJoinMeeting from '../utils/useJoinMeeting';
30
+ import SDKEvents from '../utils/SdkEvents';
31
+ import {MeetingInfoDefaultValue} from '../components/meeting-info/useMeetingInfo';
32
+ import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
37
33
 
38
- type PasswordInput = {
39
- host: string;
40
- view: string;
41
- };
34
+ const Create = () => {
35
+ const {CreateComponent} = useFpe((data) => {
36
+ let components: {
37
+ CreateComponent?: React.ElementType;
38
+ } = {};
39
+ // commented for v1 release
40
+ // if (
41
+ // data?.components?.create &&
42
+ // typeof data?.components?.create !== 'object'
43
+ // ) {
44
+ // if (
45
+ // data?.components?.create &&
46
+ // isValidReactComponent(data?.components?.create)
47
+ // )
48
+ // components.CreateComponent = data?.components?.create;
49
+ // }
50
+ return components;
51
+ });
42
52
 
43
- const CREATE_CHANNEL = gql`
44
- mutation CreateChannel(
45
- $title: String!
46
- $backendURL: String!
47
- $enablePSTN: Boolean
48
- ) {
49
- createChannel(
50
- title: $title
51
- backendURL: $backendURL
52
- enablePSTN: $enablePSTN
53
- ) {
54
- passphrase {
55
- host
56
- view
57
- }
58
- channel
59
- title
60
- pstn {
61
- number
62
- dtmf
63
- }
64
- }
65
- }
66
- `;
53
+ const useJoin = useJoinMeeting();
67
54
 
68
- const Create = () => {
69
- // const {primaryColor} = useContext(ColorContext);
55
+ const {setGlobalErrorMessage} = useContext(ErrorContext);
70
56
  const history = useHistory();
57
+ const [loading, setLoading] = useState(false);
71
58
  const [roomTitle, onChangeRoomTitle] = useState('');
72
59
  const [pstnCheckbox, setPstnCheckbox] = useState(false);
73
60
  const [hostControlCheckbox, setHostControlCheckbox] = useState(true);
74
- const [urlView, setUrlView] = useState(null);
75
- const [urlHost, setUrlHost] = useState(null);
76
- const [pstn, setPstn] = useState(null);
77
61
  const [roomCreated, setRoomCreated] = useState(false);
78
- const [joinPhrase, setJoinPhrase] = useState(null);
79
- const [createChannel, {data, loading, error}] = useMutation(CREATE_CHANNEL);
62
+ const createRoomFun = useCreateMeeting();
63
+ const {setMeetingInfo} = useSetMeetingInfo();
64
+ const {
65
+ meetingPassphrase: {attendee, host, pstn},
66
+ } = useMeetingInfo();
67
+ //commented for v1 release
68
+ // const createdText = useString('meetingCreatedNotificationLabel')();
69
+ // const hostControlsToggle = useString<boolean>('hostControlsToggle');
70
+ // const pstnToggle = useString<boolean>('pstnToggle');
71
+ // const loadingWithDots = useString('loadingWithDots')();
72
+ // const createMeetingButton = useString('createMeetingButton')();
73
+ // const haveMeetingID = useString('haveMeetingID')();
80
74
 
81
- console.log('mutation data', data);
75
+ const createdText = 'Created';
76
+ const hostControlsToggle = (toggle: boolean) =>
77
+ toggle
78
+ ? 'Restrict Host Controls (Separate host link)'
79
+ : 'Restrict Host Controls (Everyone is a Host)';
80
+ const pstnToggle = (value: boolean) => 'Use PSTN (Join by dialing a number)';
81
+ const meetingNameInputPlaceholder = useString(
82
+ 'meetingNameInputPlaceholder',
83
+ )();
84
+ const loadingWithDots = 'Loading...';
85
+ const createMeetingButton = 'Create Meeting';
86
+ const haveMeetingID = 'Have a Meeting ID?';
82
87
 
83
88
  useEffect(() => {
84
- if (Platform.OS === 'web') {
89
+ if (isWeb) {
85
90
  document.title = $config.APP_NAME;
86
91
  }
92
+ SDKEvents.on('joinMeetingWithPhrase', (phrase) => {
93
+ console.log(
94
+ 'DEBUG(aditya)-SDKEvents: joinMeetingWithPhrase event called',
95
+ );
96
+ useJoin(phrase);
97
+ });
98
+ return () => {
99
+ SDKEvents.off('joinMeetingWithPhrase');
100
+ };
87
101
  }, []);
88
102
 
89
- const createRoom = () => {
103
+ const showShareScreen = () => {
104
+ setRoomCreated(true);
105
+ };
106
+
107
+ useEffect(() => {
108
+ if (attendee) {
109
+ SDKEvents.emit('create', host, attendee, pstn);
110
+ }
111
+ }, [attendee]);
112
+
113
+ const createRoomAndNavigateToShare = async (
114
+ roomTitle: string,
115
+ enablePSTN: boolean,
116
+ isSeparateHostLink: boolean,
117
+ ) => {
90
118
  if (roomTitle !== '') {
91
- console.log('Create room invoked');
92
- createChannel({
93
- variables: {
94
- title: roomTitle,
95
- backendURL: $config.BACKEND_ENDPOINT,
96
- enablePSTN: pstnCheckbox,
97
- },
98
- })
99
- .then((res: any) => {
100
- Toast.show({
101
- text1: 'Created: ' + roomTitle,
102
- visibilityTime: 1000,
103
- });
104
- console.log('promise data', res);
105
- setUrlView(res.data.createChannel.passphrase.view);
106
- setUrlHost(res.data.createChannel.passphrase.host);
107
- setPstn(res.data.createChannel.pstn);
108
- setJoinPhrase(res.data.createChannel.passphrase.host);
109
- setRoomCreated(true);
110
- })
111
- .catch((e) => {
112
- console.log(e);
119
+ setLoading(true);
120
+ try {
121
+ setMeetingInfo(MeetingInfoDefaultValue);
122
+ await createRoomFun(roomTitle, enablePSTN, isSeparateHostLink);
123
+ setLoading(false);
124
+ Toast.show({
125
+ type: 'success',
126
+ text1: createdText + ': ' + roomTitle,
127
+ visibilityTime: 1000,
113
128
  });
129
+ showShareScreen();
130
+ } catch (error) {
131
+ setLoading(false);
132
+ setGlobalErrorMessage(error);
133
+ }
114
134
  }
115
135
  };
116
136
 
117
- const [dim, setDim] = useState([
118
- Dimensions.get('window').width,
119
- Dimensions.get('window').height,
120
- Dimensions.get('window').width > Dimensions.get('window').height,
121
- ]);
122
- let onLayout = (e: any) => {
123
- setDim([e.nativeEvent.layout.width, e.nativeEvent.layout.height]);
124
- };
125
-
126
137
  return (
127
- // <ImageBackground
128
- // style={style.full}
129
- // resizeMode={'cover'}>
130
- // <KeyboardAvoidingView behavior={'height'} style={style.main}>
131
- <ScrollView contentContainerStyle={style.main}>
132
- <View style={style.nav}>
133
- {hasBrandLogo && <Logo />}
134
- {error ? <Error error={error} /> : <></>}
135
- {/* <OpenInNativeButton /> */}
136
- </View>
138
+ <CreateProvider
139
+ value={{
140
+ showShareScreen,
141
+ }}>
137
142
  {!roomCreated ? (
138
- <View style={style.content} onLayout={onLayout}>
139
- <View style={style.leftContent}>
140
- <Text style={style.heading}>{$config.APP_NAME}</Text>
141
- <Text style={style.headline}>{$config.LANDING_SUB_HEADING}</Text>
142
- <View style={style.inputs}>
143
- <TextInput
144
- value={roomTitle}
145
- onChangeText={(text) => onChangeRoomTitle(text)}
146
- onSubmitEditing={() => createRoom()}
147
- placeholder="Name your meeting"
148
- />
149
- <View style={{paddingVertical: 10}}>
150
- <View style={style.checkboxHolder}>
151
- {$config.EVENT_MODE ? (
152
- <></>
153
- ) : (
154
- <>
155
- <Checkbox
156
- disabled={$config.EVENT_MODE}
157
- value={hostControlCheckbox}
158
- onValueChange={setHostControlCheckbox}
159
- />
160
- <Text style={style.checkboxTitle}>
161
- Restrict Host Controls (Separate host link)
162
- </Text>
163
- </>
164
- )}
165
- </View>
166
- {$config.PSTN ? (
167
- <View style={style.checkboxHolder}>
168
- <Checkbox
169
- value={pstnCheckbox}
170
- onValueChange={setPstnCheckbox}
143
+ CreateComponent ? (
144
+ <CreateComponent />
145
+ ) : (
146
+ <ScrollView contentContainerStyle={style.main}>
147
+ <Logo />
148
+ <View style={style.content}>
149
+ <View style={style.leftContent}>
150
+ <Text style={style.heading}>{$config.APP_NAME}</Text>
151
+ <Text style={style.headline}>
152
+ {$config.LANDING_SUB_HEADING}
153
+ </Text>
154
+ <View style={style.inputs}>
155
+ <TextInput
156
+ value={roomTitle}
157
+ onChangeText={(text) => onChangeRoomTitle(text)}
158
+ onSubmitEditing={() =>
159
+ createRoomAndNavigateToShare(
160
+ roomTitle,
161
+ pstnCheckbox,
162
+ hostControlCheckbox,
163
+ )
164
+ }
165
+ placeholder={meetingNameInputPlaceholder}
166
+ />
167
+ <View style={{paddingVertical: 10}}>
168
+ <View style={style.checkboxHolder}>
169
+ {$config.EVENT_MODE ? (
170
+ <></>
171
+ ) : (
172
+ <>
173
+ <Checkbox
174
+ disabled={$config.EVENT_MODE}
175
+ value={hostControlCheckbox}
176
+ onValueChange={setHostControlCheckbox}
177
+ />
178
+ <Text style={style.checkboxTitle}>
179
+ {/* Restrict Host Controls (Separate host link) */}
180
+ {hostControlsToggle(hostControlCheckbox)}
181
+ </Text>
182
+ </>
183
+ )}
184
+ </View>
185
+ {$config.PSTN ? (
186
+ <View style={style.checkboxHolder}>
187
+ <Checkbox
188
+ value={pstnCheckbox}
189
+ onValueChange={setPstnCheckbox}
190
+ />
191
+ <Text style={style.checkboxTitle}>
192
+ {pstnToggle(pstnCheckbox)}
193
+ </Text>
194
+ </View>
195
+ ) : (
196
+ <></>
197
+ )}
198
+ </View>
199
+ <View style={style.btnContainer}>
200
+ <PrimaryButton
201
+ disabled={roomTitle === '' || loading}
202
+ onPress={() =>
203
+ createRoomAndNavigateToShare(
204
+ roomTitle,
205
+ pstnCheckbox,
206
+ hostControlCheckbox,
207
+ )
208
+ }
209
+ text={loading ? loadingWithDots : createMeetingButton}
210
+ />
211
+ <HorizontalRule />
212
+ <SecondaryButton
213
+ onPress={() => history.push('/join')}
214
+ text={haveMeetingID}
171
215
  />
172
- <Text style={style.checkboxTitle}>
173
- Use PSTN (Join by dialing a number)
174
- </Text>
175
216
  </View>
176
- ) : (
177
- <></>
178
- )}
179
- </View>
180
- <View style={style.btnContainer}>
181
- <PrimaryButton
182
- disabled={roomTitle === '' || loading}
183
- onPress={() => createRoom()}
184
- text={loading ? 'Loading...' : 'Create Meeting'}
185
- />
186
- <HorizontalRule />
187
- <SecondaryButton
188
- onPress={() => history.push('/join')}
189
- text={'Have a Meeting ID?'}
190
- />
217
+ </View>
191
218
  </View>
192
219
  </View>
193
- </View>
194
- </View>
220
+ </ScrollView>
221
+ )
195
222
  ) : (
196
- <Share
197
- urlView={urlView}
198
- urlHost={urlHost}
199
- pstn={pstn}
200
- hostControlCheckbox={hostControlCheckbox}
201
- joinPhrase={joinPhrase}
202
- roomTitle={roomTitle}
203
- />
223
+ <></>
204
224
  )}
205
- </ScrollView>
225
+ {roomCreated ? <ShareLink /> : <></>}
226
+ </CreateProvider>
206
227
  );
207
228
  };
208
229
 
@@ -9,54 +9,69 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useContext, useState} from 'react';
12
+ // @ts-nocheck
13
+ import React, {useState} from 'react';
13
14
  import {View, Text, StyleSheet, ScrollView} from 'react-native';
14
15
  import {useHistory} from '../components/Router';
15
- import SessionContext from '../components/SessionContext';
16
- // import OpenInNativeButton from '../subComponents/OpenInNativeButton';
17
16
  import Logo from '../subComponents/Logo';
18
- import hasBrandLogo from '../utils/hasBrandLogo';
17
+ import {
18
+ isValidReactComponent,
19
+ shouldAuthenticate,
20
+ hasBrandLogo,
21
+ } from '../utils/common';
19
22
  import LogoutButton from '../subComponents/LogoutButton';
20
- import ColorContext from '../components/ColorContext';
21
- // import Illustration from '../subComponents/Illustration';
22
- // import {secondaryBtn} from '../../theme.json';
23
23
  import PrimaryButton from '../atoms/PrimaryButton';
24
24
  import SecondaryButton from '../atoms/SecondaryButton';
25
25
  import HorizontalRule from '../atoms/HorizontalRule';
26
26
  import TextInput from '../atoms/TextInput';
27
27
  import Error from '../subComponents/Error';
28
- import shouldAuthenticate from '../utils/shouldAuthenticate';
29
- // const joinFlag = 0;
30
- interface joinProps {
31
- phrase: string;
32
- onChangePhrase: (text: string) => void;
33
- }
34
- const Join = (props: joinProps) => {
28
+ import {useString} from '../utils/useString';
29
+ import useNavigateTo from '../utils/useNavigateTo';
30
+ import {useFpe} from 'fpe-api';
31
+ import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
32
+ import {MeetingInfoDefaultValue} from '../components/meeting-info/useMeetingInfo';
33
+
34
+ const Join = () => {
35
+ //commented for v1 release
36
+ // const meetingIdInputPlaceholder = useString('meetingIdInputPlaceholder')();
37
+ // const enterMeetingButton = useString('enterMeetingButton')();
38
+ // const createMeetingButton = useString('createMeetingButton')();
39
+ const meetingIdInputPlaceholder = 'Enter Meeting ID';
40
+ const enterMeetingButton = 'Enter Meeting';
41
+ const createMeetingButton = 'Create Meeting';
35
42
  const history = useHistory();
36
- const {primaryColor} = useContext(ColorContext);
37
- const {joinSession} = useContext(SessionContext);
43
+ const [phrase, setPhrase] = useState('');
44
+ const navigateTo = useNavigateTo();
38
45
  const [error, setError] = useState<null | {name: string; message: string}>(
39
46
  null,
40
47
  );
41
- // const [dim, setDim] = useState([
42
- // Dimensions.get('window').width,
43
- // Dimensions.get('window').height,
44
- // Dimensions.get('window').width > Dimensions.get('window').height,
45
- // ]);
46
- // let onLayout = (e: any) => {
47
- // setDim([e.nativeEvent.layout.width, e.nativeEvent.layout.height]);
48
- // };
48
+ const {setMeetingInfo} = useSetMeetingInfo();
49
49
  const createMeeting = () => {
50
50
  history.push('/create');
51
51
  };
52
52
 
53
- const phrase = props.phrase;
54
- const onChangePhrase = props.onChangePhrase;
55
53
  const startCall = async () => {
56
- joinSession({phrase});
54
+ setMeetingInfo(MeetingInfoDefaultValue);
55
+ navigateTo(phrase);
57
56
  };
57
+ const {JoinComponent} = useFpe((data) => {
58
+ let components: {
59
+ JoinComponent?: React.ComponentType;
60
+ } = {};
61
+ // commented for v1 release
62
+ // if (
63
+ // data?.components?.join &&
64
+ // typeof data?.components?.join !== 'object' &&
65
+ // isValidReactComponent(data?.components?.join)
66
+ // ) {
67
+ // components.JoinComponent = data?.components?.join;
68
+ // }
69
+ return components;
70
+ });
58
71
 
59
- return (
72
+ return JoinComponent ? (
73
+ <JoinComponent />
74
+ ) : (
60
75
  <ScrollView contentContainerStyle={style.main}>
61
76
  <View style={style.nav}>
62
77
  {hasBrandLogo && <Logo />}
@@ -69,20 +84,20 @@ const Join = (props: joinProps) => {
69
84
  <View style={style.inputs}>
70
85
  <TextInput
71
86
  value={phrase}
72
- onChangeText={(text) => onChangePhrase(text)}
87
+ onChangeText={(text) => setPhrase(text)}
73
88
  onSubmitEditing={() => startCall()}
74
- placeholder="Enter Meeting ID"
89
+ placeholder={meetingIdInputPlaceholder}
75
90
  />
76
91
  <View style={{height: 10}} />
77
92
  <PrimaryButton
78
93
  disabled={phrase === ''}
79
94
  onPress={() => startCall()}
80
- text={'Enter Meeting'}
95
+ text={enterMeetingButton}
81
96
  />
82
97
  <HorizontalRule />
83
98
  <SecondaryButton
84
99
  onPress={() => createMeeting()}
85
- text={'Create a meeting'}
100
+ text={createMeetingButton}
86
101
  />
87
102
  {shouldAuthenticate ? (
88
103
  <LogoutButton setError={setError} /> //setError not available in logout?