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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/Readme.md +7 -1
  2. package/package.json +4 -3
  3. package/template/Gulpfile.js +306 -87
  4. package/template/_gitignore +4 -1
  5. package/template/_package-lock.json +2297 -2533
  6. package/template/agora-rn-uikit/.git/HEAD +1 -1
  7. package/template/agora-rn-uikit/.git/config +3 -3
  8. package/template/agora-rn-uikit/.git/index +0 -0
  9. package/template/agora-rn-uikit/.git/logs/HEAD +2 -2
  10. package/template/agora-rn-uikit/.git/logs/refs/heads/master +1 -1
  11. package/template/agora-rn-uikit/.git/logs/refs/heads/release/fpe-1.0.0 +1 -0
  12. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +1 -1
  13. package/template/agora-rn-uikit/.git/objects/pack/pack-f274a85fccfc9b5112d154bb3b6d34cb4b8dedde.idx +0 -0
  14. package/template/agora-rn-uikit/.git/objects/pack/{pack-0061d00cd98162a329a32b537488a35d0abeb069.pack → pack-f274a85fccfc9b5112d154bb3b6d34cb4b8dedde.pack} +0 -0
  15. package/template/agora-rn-uikit/.git/packed-refs +5 -1
  16. package/template/agora-rn-uikit/.git/refs/heads/release/fpe-1.0.0 +1 -0
  17. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
  18. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
  19. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
  20. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
  21. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
  22. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
  23. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
  24. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
  25. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
  26. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
  27. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
  28. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
  29. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
  30. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
  31. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
  32. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
  33. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
  34. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
  35. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
  36. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
  37. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
  38. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
  39. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
  40. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
  41. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
  42. package/template/agora-rn-uikit/src/Rtc/Create.tsx +14 -2
  43. package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
  44. package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
  45. package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
  46. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
  47. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
  48. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
  49. package/template/agora-rn-uikit/src/index.ts +12 -12
  50. package/template/babel.config.js +17 -1
  51. package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
  52. package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
  53. package/template/bridge/rtc/webNg/Types.ts +14 -0
  54. package/template/bridge/rtc/webNg/index.ts +5 -2
  55. package/template/bridge/rtm/web/index.ts +13 -7
  56. package/template/electron-builder.js +3 -2
  57. package/template/esbuild.rsdk.go +226 -0
  58. package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
  59. package/template/fpe-api/components.ts +42 -0
  60. package/template/fpe-api/context.ts +45 -0
  61. package/template/fpe-api/fpeEvents.ts +9 -0
  62. package/template/fpe-api/index.ts +21 -0
  63. package/template/fpe-api/install.ts +128 -0
  64. package/template/fpe-api/typeDefinition.ts +143 -0
  65. package/template/fpe-api/useFpe.tsx +35 -0
  66. package/template/fpe-api/utils.ts +62 -0
  67. package/template/fpe-implementation/createHook.ts +33 -0
  68. package/template/fpe-implementation/dummyFpe.ts +17 -0
  69. package/template/fpe-implementation/index.ts +1 -0
  70. package/template/fpe-todo.txt +14 -0
  71. package/template/fpe.config.js +25 -0
  72. package/template/global.d.ts +4 -0
  73. package/template/index.rsdk.tsx +27 -0
  74. package/template/index.wsdk.tsx +27 -0
  75. package/template/package-lock.json +2297 -2533
  76. package/template/package.json +28 -12
  77. package/template/react-native-toast-message/src/index.js +9 -10
  78. package/template/react-native-toast-message/src/index.wsdk.js +419 -0
  79. package/template/src/App.tsx +97 -65
  80. package/template/src/AppWrapper.tsx +79 -0
  81. package/template/src/SDKAppWrapper.tsx +67 -0
  82. package/template/src/atoms/PrimaryButton.tsx +14 -8
  83. package/template/src/atoms/TextInput.tsx +13 -5
  84. package/template/src/components/Chat.tsx +171 -139
  85. package/template/src/components/ChatContext.ts +14 -22
  86. package/template/src/components/ColorConfigure.tsx +2 -2
  87. package/template/src/components/Controls.native.tsx +72 -62
  88. package/template/src/components/Controls.tsx +90 -69
  89. package/template/src/components/DeviceConfigure.tsx +1 -1
  90. package/template/src/components/DeviceContext.tsx +14 -7
  91. package/template/src/components/GraphQLProvider.tsx +9 -2
  92. package/template/src/components/GridVideo.tsx +20 -159
  93. package/template/src/components/HostControlView.tsx +54 -15
  94. package/template/src/components/Navbar.tsx +408 -157
  95. package/template/src/components/NetworkQualityContext.tsx +29 -22
  96. package/template/src/components/ParticipantsView.tsx +97 -119
  97. package/template/src/components/PinnedVideo.tsx +41 -188
  98. package/template/src/components/Precall.native.tsx +131 -97
  99. package/template/src/components/Precall.tsx +193 -158
  100. package/template/src/components/RTMConfigure.tsx +320 -398
  101. package/template/src/components/Router.sdk.ts +20 -0
  102. package/template/src/components/SessionContext.tsx +6 -3
  103. package/template/src/components/Settings.native.tsx +3 -0
  104. package/template/src/components/Settings.tsx +65 -31
  105. package/template/src/components/SettingsView.tsx +14 -8
  106. package/template/src/components/Share.tsx +188 -220
  107. package/template/src/components/StorageContext.tsx +5 -5
  108. package/template/src/components/StoreToken.tsx +5 -1
  109. package/template/src/components/chat-messages/useChatMessages.tsx +202 -0
  110. package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
  111. package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
  112. package/template/src/components/common/Error.tsx +54 -0
  113. package/template/src/components/common/Logo.tsx +35 -0
  114. package/template/src/components/common/index.tsx +8 -0
  115. package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
  116. package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
  117. package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
  118. package/template/src/components/dimension/DimensionContext.ts +27 -0
  119. package/template/src/components/dimension/DimensionProvider.tsx +34 -0
  120. package/template/src/components/livestream/LiveStreamContext.tsx +293 -272
  121. package/template/src/components/livestream/Types.ts +26 -7
  122. package/template/src/components/livestream/index.ts +13 -2
  123. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
  124. package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
  125. package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
  126. package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
  127. package/template/src/components/participants/AllHostParticipants.tsx +36 -53
  128. package/template/src/components/participants/MeParticipant.tsx +9 -10
  129. package/template/src/components/participants/ParticipantName.tsx +2 -1
  130. package/template/src/components/participants/RemoteParticipants.tsx +3 -3
  131. package/template/src/components/precall/LocalMute.native.tsx +91 -0
  132. package/template/src/components/precall/LocalMute.tsx +90 -0
  133. package/template/src/components/precall/VideoPreview.native.tsx +35 -0
  134. package/template/src/components/precall/VideoPreview.tsx +33 -0
  135. package/template/src/components/precall/index.tsx +28 -0
  136. package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
  137. package/template/src/components/precall/joinCallBtn.tsx +91 -0
  138. package/template/src/components/precall/meetingTitle.tsx +26 -0
  139. package/template/src/components/precall/selectDevice.tsx +46 -0
  140. package/template/src/components/precall/textInput.tsx +43 -0
  141. package/template/src/components/precall/usePreCall.tsx +41 -0
  142. package/template/src/components/styles.ts +20 -3
  143. package/template/src/components/useShareLink.tsx +222 -0
  144. package/template/src/components/useWakeLock.tsx +3 -3
  145. package/template/src/custom-events/CustomEvents.ts +197 -0
  146. package/template/src/custom-events/index.tsx +4 -0
  147. package/template/src/custom-events/types.ts +51 -0
  148. package/template/src/language/default-labels/commonLabels.ts +21 -0
  149. package/template/src/language/default-labels/createScreenLabels.ts +22 -0
  150. package/template/src/language/default-labels/index.ts +38 -0
  151. package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
  152. package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
  153. package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
  154. package/template/src/language/default-labels/videoCallScreenLabels.ts +189 -0
  155. package/template/src/language/i18nTypes.ts +10 -0
  156. package/template/src/language/index.ts +18 -0
  157. package/template/src/language/useLanguage.tsx +92 -0
  158. package/template/src/pages/Authenticate.tsx +21 -15
  159. package/template/src/pages/Create.tsx +176 -159
  160. package/template/src/pages/Join.tsx +44 -32
  161. package/template/src/pages/VideoCall.tsx +134 -406
  162. package/template/src/pages/create/useCreate.tsx +37 -0
  163. package/template/src/pages/video-call/CustomLayout.ts +17 -0
  164. package/template/src/pages/video-call/CustomUserContextHolder.tsx +12 -0
  165. package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
  166. package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
  167. package/template/src/pages/video-call/RenderComponent.tsx +52 -0
  168. package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
  169. package/template/src/pages/video-call/VideoComponent.tsx +34 -0
  170. package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
  171. package/template/src/pages/video-call/index.ts +20 -0
  172. package/template/src/rtm/RTMEngine.ts +58 -0
  173. package/template/src/rtm/utils.ts +28 -0
  174. package/template/src/rtm-events/EventUtils.ts +268 -0
  175. package/template/src/rtm-events/EventsQueue.ts +38 -0
  176. package/template/src/rtm-events/constants.ts +40 -0
  177. package/template/src/rtm-events/index.tsx +8 -0
  178. package/template/src/rtm-events/types.ts +7 -0
  179. package/template/src/subComponents/ChatBubble.tsx +18 -11
  180. package/template/src/subComponents/ChatContainer.tsx +78 -29
  181. package/template/src/subComponents/ChatInput.tsx +146 -70
  182. package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
  183. package/template/src/subComponents/Error.tsx +35 -24
  184. package/template/src/subComponents/LanguageSelector.tsx +85 -0
  185. package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
  186. package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
  187. package/template/src/subComponents/LocalAudioMute.tsx +52 -30
  188. package/template/src/subComponents/LocalEndCall.tsx +52 -0
  189. package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
  190. package/template/src/subComponents/LocalVideoMute.tsx +48 -30
  191. package/template/src/subComponents/LogoutButton.tsx +20 -5
  192. package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
  193. package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
  194. package/template/src/subComponents/Recording.tsx +46 -138
  195. package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
  196. package/template/src/subComponents/RemoteEndCall.tsx +18 -7
  197. package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
  198. package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
  199. package/template/src/subComponents/SelectDevice.tsx +88 -45
  200. package/template/src/subComponents/SelectOAuth.tsx +30 -6
  201. package/template/src/subComponents/SidePanelButtons.ts +39 -0
  202. package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
  203. package/template/src/subComponents/TextWithTooltip.tsx +15 -20
  204. package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
  205. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
  206. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
  207. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
  208. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
  209. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
  210. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
  211. package/template/src/subComponents/livestream/index.ts +10 -2
  212. package/template/src/subComponents/recording/useRecording.tsx +209 -0
  213. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
  214. package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
  215. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +59 -31
  216. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
  217. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +97 -138
  218. package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
  219. package/template/src/subComponents/toastConfig.tsx +25 -20
  220. package/template/src/utils/IsAttendeeUser.ts +34 -0
  221. package/template/src/utils/SdkEvents.ts +68 -0
  222. package/template/src/utils/common.tsx +40 -0
  223. package/template/src/utils/eventEmitter.ts +29 -0
  224. package/template/src/utils/getMeetingInvite.ts +30 -0
  225. package/template/src/utils/index.tsx +11 -2
  226. package/template/src/utils/isAudioEnabled.ts +29 -0
  227. package/template/src/utils/isHostUser.ts +33 -0
  228. package/template/src/utils/isMobileOrTablet.native.ts +5 -0
  229. package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
  230. package/template/src/utils/isPSTNUser.ts +30 -0
  231. package/template/src/utils/isSDK.sdk.ts +5 -0
  232. package/template/src/utils/isSDK.ts +5 -0
  233. package/template/src/utils/isScreenShareUser.ts +31 -0
  234. package/template/src/utils/isVideoEnabled.ts +29 -0
  235. package/template/src/utils/useButtonTemplate.tsx +43 -0
  236. package/template/src/utils/useCreateMeeting.ts +74 -0
  237. package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
  238. package/template/src/utils/useGetMeetingPhrase.ts +68 -0
  239. package/template/src/utils/useGetName.ts +20 -0
  240. package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
  241. package/template/src/utils/useJoinMeeting.ts +120 -0
  242. package/template/src/utils/useLayout.tsx +40 -0
  243. package/template/src/utils/useLiveStreamingUids.ts +26 -0
  244. package/template/src/utils/useMutePSTN.ts +43 -0
  245. package/template/src/utils/useMuteToggleLocal.ts +109 -0
  246. package/template/src/utils/useNavParams.ts +6 -0
  247. package/template/src/utils/useNavigateTo.ts +8 -0
  248. package/template/src/utils/usePrivateMessages.ts +33 -0
  249. package/template/src/utils/useRemoteEndCall.ts +27 -0
  250. package/template/src/utils/useRemoteMute.ts +64 -0
  251. package/template/src/utils/useSendControlMessage.ts +51 -0
  252. package/template/src/utils/useSendMessage.ts +40 -0
  253. package/template/src/utils/useSetName.ts +20 -0
  254. package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
  255. package/template/src/utils/useSidePanel.tsx +41 -0
  256. package/template/src/utils/useString.ts +61 -0
  257. package/template/src/utils/useUnreadMessageCount.ts +50 -0
  258. package/template/src/utils/useUserList.ts +26 -0
  259. package/template/tsconfig.json +4 -4
  260. package/template/tsconfig_fpeApi.json +103 -0
  261. package/template/tsconfig_rsdk_index.json +105 -0
  262. package/template/tsconfig_wsdk_index.json +104 -0
  263. package/template/webpack.commons.js +40 -16
  264. package/template/webpack.main.config.js +2 -1
  265. package/template/webpack.renderer.config.js +1 -1
  266. package/template/webpack.rsdk.config.js +33 -0
  267. package/template/webpack.ts.config.js +89 -0
  268. package/template/webpack.web.config.js +8 -1
  269. package/template/webpack.wsdk.config.js +34 -0
  270. package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
  271. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
  272. package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
  273. package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
  274. package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
  275. package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
  276. package/template/src/subComponents/ScreenshareButton.tsx +0 -257
  277. package/template/src/subComponents/SwitchCamera.tsx +0 -35
  278. package/template/src/utils/hasBrandLogo.tsx +0 -3
  279. package/template/src/utils/mobileWebTest.native.tsx +0 -5
  280. package/template/src/utils/shouldAuthenticate.tsx +0 -7
@@ -0,0 +1,128 @@
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 {FpeApiInterface} from './typeDefinition';
13
+ import ReactIs from 'react-is';
14
+ /**
15
+ *
16
+ * @param config FPE options to override the UI components and customize the application
17
+ * @returns config options
18
+ */
19
+
20
+ function isString(data: any) {
21
+ if (data && typeof data === 'string') {
22
+ return true;
23
+ }
24
+ return false;
25
+ }
26
+
27
+ function isFunction(data: any) {
28
+ if (data && typeof data === 'function') {
29
+ return true;
30
+ }
31
+ return false;
32
+ }
33
+
34
+ function isObject(data: any) {
35
+ if (data && typeof data === 'object') {
36
+ return true;
37
+ }
38
+ return false;
39
+ }
40
+
41
+ function isComponent(data: any) {
42
+ if (data && ReactIs.isValidElementType(data)) {
43
+ return true;
44
+ }
45
+ return false;
46
+ }
47
+
48
+ function validateComponents(components: any) {
49
+ for (const key in components) {
50
+ let comp = components[key];
51
+ if (comp) {
52
+ if (isComponent(comp) || isObject(comp)) {
53
+ if (isObject(comp)) {
54
+ validateComponents(comp);
55
+ }
56
+ } else {
57
+ console.error(
58
+ `InstallFPE:Error ${key} should be a react component or object`,
59
+ );
60
+ }
61
+ }
62
+ }
63
+ }
64
+
65
+ function validateLifecycle(data: any) {
66
+ for (const key in data) {
67
+ const callback = data[key];
68
+ if (callback && !isFunction(callback)) {
69
+ console.error(
70
+ `InstallFPE:Error ${key} should be a function that return async function`,
71
+ );
72
+ }
73
+ }
74
+ }
75
+
76
+ function validateCustomRoutes(routes: any) {
77
+ if (routes && !Array.isArray(routes)) {
78
+ console.error(`InstallFPE:Error customRoutes should be an array`);
79
+ }
80
+ }
81
+
82
+ function validateAppRoot(data: any) {
83
+ if (data && !isComponent(data)) {
84
+ console.error(`InstallFPE:Error appRoot should be a react component`);
85
+ }
86
+ }
87
+
88
+ function validatei18n(data: any) {
89
+ if (data) {
90
+ if (!Array.isArray(data)) {
91
+ console.error(`InstallFPE:Error i18n should be an array`);
92
+ } else {
93
+ data.map((item) => {
94
+ const langData = item.data;
95
+ for (const key in langData) {
96
+ const value = langData[key];
97
+ if (value) {
98
+ if (!(isString(value) || isFunction(value))) {
99
+ console.error(
100
+ `InstallFPE:Error ${item.locale} ${key} should be a string or function`,
101
+ );
102
+ }
103
+ }
104
+ }
105
+ });
106
+ }
107
+ }
108
+ }
109
+ export const installFPE = (config: FpeApiInterface) => {
110
+ //validating the components
111
+ config?.components && validateComponents(config.components);
112
+
113
+ //validating the custom routes
114
+ //commented for v1 release
115
+ //config?.customRoutes && validateCustomRoutes(config.customRoutes);
116
+
117
+ //validating the app root
118
+ config?.appRoot && validateAppRoot(config.appRoot);
119
+
120
+ //validating the i18n
121
+ config?.i18n && validatei18n(config.i18n);
122
+
123
+ //validating the lifecycle
124
+ //commented for v1 release
125
+ //config?.lifecycle && validateLifecycle(config?.lifecycle);
126
+
127
+ return config;
128
+ };
@@ -0,0 +1,143 @@
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 from 'react';
13
+ export type {ChatBubbleProps} from '../src/components/ChatContext';
14
+ import {ChatBubbleProps} from '../src/components/ChatContext';
15
+ import {
16
+ RenderInterface,
17
+ RenderStateInterface,
18
+ UidType,
19
+ } from '../agora-rn-uikit';
20
+ import {i18nInterface} from '../src/language/i18nTypes';
21
+ import {IconsInterface} from '../agora-rn-uikit/src/Controls/Icons';
22
+ export type {
23
+ ChatTextInputProps,
24
+ ChatSendButtonProps,
25
+ } from '../src/subComponents/ChatInput';
26
+ import {
27
+ ChatTextInputProps,
28
+ ChatSendButtonProps,
29
+ } from '../src/subComponents/ChatInput';
30
+
31
+ export const CUSTOM_ROUTES_PREFIX = '/r/';
32
+
33
+ interface BeforeAndAfterInterface {
34
+ // commented for v1 release
35
+ // before?: React.ComponentType;
36
+ // after?: React.ComponentType;
37
+ }
38
+
39
+ export interface PreCallInterface extends BeforeAndAfterInterface {
40
+ preview?: React.ComponentType;
41
+ audioMute?: React.ComponentType;
42
+ videoMute?: React.ComponentType;
43
+ meetingName?: React.ComponentType;
44
+ deviceSelect?: React.ComponentType;
45
+ joinButton?: React.ComponentType;
46
+ textBox?: React.ComponentType;
47
+ }
48
+ export interface ChatCmpInterface extends BeforeAndAfterInterface {
49
+ chatBubble?: React.ComponentType<ChatBubbleProps>;
50
+ chatInput?: React.ComponentType<ChatTextInputProps>;
51
+ chatSentButton?: React.ComponentType<ChatSendButtonProps>;
52
+ }
53
+
54
+ export interface renderComponentInterface {
55
+ user: RenderInterface;
56
+ }
57
+
58
+ export interface renderComponentObjectInterface {
59
+ [key: string]: React.ComponentType<renderComponentInterface>;
60
+ }
61
+
62
+ export type layoutComponent = React.ComponentType<{
63
+ renderData: RenderStateInterface['renderPosition'];
64
+ }>;
65
+
66
+ export interface layoutObjectBase {
67
+ name: string;
68
+ label: string;
69
+ component: layoutComponent;
70
+ }
71
+
72
+ export interface layoutObjectWithIcon extends layoutObjectBase {
73
+ icon: string;
74
+ iconName?: never;
75
+ }
76
+ export interface layoutObjectWithIconName extends layoutObjectBase {
77
+ icon?: never;
78
+ iconName: keyof IconsInterface;
79
+ }
80
+ export type layoutObjectType = layoutObjectWithIcon | layoutObjectWithIconName;
81
+
82
+ export interface VideoCallInterface extends BeforeAndAfterInterface {
83
+ // commented for v1 release
84
+ //topBar?: React.ComponentType;
85
+ //settingsPanel?: React.ComponentType;
86
+ participantsPanel?: React.ComponentType;
87
+ bottomBar?: React.ComponentType;
88
+ // commented for v1 release
89
+ //chat?: ChatCmpInterface;
90
+ customContent?: renderComponentObjectInterface;
91
+ customLayout?: (layouts: layoutObjectType[]) => layoutObjectType[];
92
+ }
93
+
94
+ export type ComponentsInterface = {
95
+ // commented for v1 release
96
+ //precall?: PreCallInterface | React.ComponentType;
97
+ //create?: React.ComponentType;
98
+ //share?: React.ComponentType;
99
+ //join?: React.ComponentType;
100
+ videoCall?: VideoCallInterface | React.ComponentType;
101
+ };
102
+
103
+ export interface CustomRoutesInterface {
104
+ path: string;
105
+ component: React.ComponentType;
106
+ exact?: boolean;
107
+ componentProps?: object;
108
+ isPrivateRoute?: boolean;
109
+ routeProps?: object;
110
+ failureRedirectTo?: string;
111
+ }
112
+
113
+ export type CustomHookType = () => () => Promise<void>;
114
+
115
+ export interface FpeApiInterface {
116
+ /**
117
+ * components used to replace whole screen or subcomponents
118
+ */
119
+ components?: ComponentsInterface;
120
+ /**
121
+ * custom routes used to add new page/routes
122
+ */
123
+ // commented for v1 release
124
+ //customRoutes?: CustomRoutesInterface[];
125
+ /**
126
+ * Custom context/api provider wrapped in root level
127
+ */
128
+ appRoot?: React.ComponentType;
129
+ /**
130
+ * Internationlization
131
+ */
132
+ i18n?: i18nInterface[];
133
+ /**
134
+ * Life cycle events
135
+ */
136
+ // commented for v1 release
137
+ // lifecycle?: {
138
+ // useBeforeJoin?: CustomHookType;
139
+ // useBeforeCreate?: CustomHookType;
140
+ // };
141
+ // commented for v1 release
142
+ //customUserContext?: () => any;
143
+ }
@@ -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
+ import React from 'react';
13
+ import fpeConfig from 'test-fpe';
14
+ import {FpeApiInterface} from './typeDefinition';
15
+ import {createHook} from 'fpe-implementation';
16
+
17
+ const FpeContext: React.Context<FpeApiInterface> =
18
+ React.createContext(fpeConfig);
19
+
20
+ export interface FpeProviderInterface {
21
+ children: React.ReactNode;
22
+ value: FpeApiInterface;
23
+ }
24
+
25
+ const FpeProvider = (props: FpeProviderInterface) => {
26
+ return (
27
+ <FpeContext.Provider value={props.value}>
28
+ {props.children}
29
+ </FpeContext.Provider>
30
+ );
31
+ };
32
+
33
+ const useFpe = createHook(FpeContext);
34
+
35
+ export {useFpe, FpeProvider};
@@ -0,0 +1,62 @@
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
+ // commented for v1 release
13
+ //export {default as useIsScreenShare} from '../src/utils/isScreenShareUser';
14
+ export {default as useIsHost} from '../src/utils/isHostUser';
15
+ export {default as useIsAttendee} from '../src/utils/IsAttendeeUser';
16
+ export {default as useIsPSTN} from '../src/utils/isPSTNUser';
17
+ export {default as useUserList} from '../src/utils/useUserList';
18
+ // commented for v1 release
19
+ //export {default as useGroupMessages} from '../src/utils/useGroupMessages';
20
+ //export {default as usePrivateMessages} from '../src/utils/usePrivateMessages';
21
+ export {default as useIsAudioEnabled} from '../src/utils/isAudioEnabled';
22
+ export {default as useIsVideoEnabled} from '../src/utils/isVideoEnabled';
23
+ export {default as useSetName} from '../src/utils/useSetName';
24
+ export {default as useGetName} from '../src/utils/useGetName';
25
+ // commented for v1 release
26
+ //export {useSidePanel} from '../src/utils/useSidePanel';
27
+ // commented for v1 release
28
+ // export {
29
+ // default as useUnreadMessageCount,
30
+ // UNREAD_MESSAGE_COUNT_TYPE,
31
+ // } from '../src/utils/useUnreadMessageCount';
32
+ // export {
33
+ // default as useSetUnreadMessageCount,
34
+ // SET_UNREAD_MESSAGE_COUNT_TYPE,
35
+ // } from '../src/utils/useSetUnreadMessageCount';
36
+ export {default as useNavigateTo} from '../src/utils/useNavigateTo';
37
+ export {default as useNavParams} from '../src/utils/useNavParams';
38
+ export {default as useCreateMeeting} from '../src/utils/useCreateMeeting';
39
+ export {default as useJoinMeeting} from '../src/utils/useJoinMeeting';
40
+ // commented for v1 release
41
+ // export {
42
+ // default as useSendMessage,
43
+ // MESSAGE_TYPE,
44
+ // } from '../src/utils/useSendMessage';
45
+ // export {controlMessageEnum} from '../src/components/ChatContext';
46
+ // export {
47
+ // default as useSendControlMessage,
48
+ // CONTROL_MESSAGE_TYPE,
49
+ // } from '../src/utils/useSendControlMessage';
50
+ export {
51
+ MUTE_LOCAL_TYPE,
52
+ default as useMuteToggleLocal,
53
+ } from '../src/utils/useMuteToggleLocal';
54
+ export {default as useRemoteEndcall} from '../src/utils/useRemoteEndCall';
55
+ export {
56
+ default as useRemoteMute,
57
+ MUTE_REMOTE_TYPE,
58
+ } from '../src/utils/useRemoteMute';
59
+ export {ToggleState} from '../agora-rn-uikit/src/Contexts/PropsContext';
60
+
61
+ //export common function
62
+ export * from '../src/utils/common';
@@ -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
+ import React, { useContext } from 'react';
13
+ /**
14
+ *
15
+ * @param context - any context data which we want to extract the data.
16
+ * @returns useContextWithSelector in which we can pass selector function to extract data from the context that we passed.
17
+ */
18
+ function createHook<T>(context: React.Context<T>) {
19
+
20
+ function useContextWithSelector<U>(contextSelector: (data: T) => U): U;
21
+ function useContextWithSelector(): T;
22
+ /**
23
+ *
24
+ * @param contextSelector is used to pass callback function used to select data from the context data
25
+ * @returns the data selected from the context
26
+ */
27
+ function useContextWithSelector<U>(contextSelector?: (data: T) => U): U | T {
28
+ const data = useContext(context);
29
+ return contextSelector ? contextSelector(data) : data
30
+ }
31
+ return useContextWithSelector;
32
+ }
33
+ export default createHook;
@@ -0,0 +1,17 @@
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 { installFPE } from "fpe-api/install";
13
+ /**
14
+ * Dummy FPE used to load when project doesn't have the FPE.
15
+ */
16
+ const data = installFPE({});
17
+ export default data;
@@ -0,0 +1 @@
1
+ export { default as createHook } from './createHook';
@@ -0,0 +1,14 @@
1
+ 1. test-fpe name should be changed
2
+ - template/_gitignore
3
+ - babel.config.js
4
+ - webpack.config.js
5
+ - fpe.config.js
6
+ - fpe-api index.ts
7
+ - fpe-api useFPE
8
+ 2. What if user called custom context without wrapping provider
9
+ - useContext will return the default vaule. so we can't identify whether is wrapped with the provider or not.
10
+ 3. CustomUserContext
11
+ 4. Add sibling into view without overriding
12
+ 5. Translation labels
13
+ - some of keys
14
+ 6.Layout dropdown implementation
@@ -0,0 +1,25 @@
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
+ /*
14
+ getFpePath - will return test-fpe if exists otherwise it will return the dummy fpe path
15
+ */
16
+ const fs = require("fs");
17
+ const FpePath = './test-fpe/index.ts'
18
+ const FpeDummyPath = './fpe-implementation/dummyFpe.ts'
19
+ const getFpePath = () => {
20
+ if (fs.existsSync(FpePath)) {
21
+ return FpePath
22
+ }
23
+ return FpeDummyPath
24
+ }
25
+ module.exports = getFpePath
@@ -77,3 +77,7 @@ interface ConfigInterface {
77
77
  LOG_ENABLED: boolean;
78
78
  }
79
79
  declare var $config: ConfigInterface;
80
+ declare module 'test-fpe'{
81
+ const data:{}
82
+ export default data;
83
+ }
@@ -0,0 +1,27 @@
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
+ * @format
14
+ */
15
+ import SDKAppWrapper,{AppBuilderSdkApi,AppBuilderSdkApiInterface} from './src/SDKAppWrapper';
16
+ import React from 'react';
17
+ export * from 'fpe-api';
18
+
19
+ interface AppBuilderReactSdkInterface extends AppBuilderSdkApiInterface {
20
+ View: React.FC;
21
+ }
22
+
23
+ const AppBuilderReactSdkApi: AppBuilderReactSdkInterface = {
24
+ ...AppBuilderSdkApi,
25
+ View: SDKAppWrapper,
26
+ }
27
+ export default AppBuilderReactSdkApi;
@@ -0,0 +1,27 @@
1
+ import {AppRegistry} from 'react-native';
2
+ import SDKAppWrapper,{AppBuilderSdkApi,AppBuilderSdkApiInterface} from './src/SDKAppWrapper';
3
+ export * from 'fpe-api';
4
+
5
+ interface AppBuilderWebSdkInterface extends AppBuilderSdkApiInterface {
6
+ }
7
+
8
+ const AppBuilderWebSdkApi: AppBuilderWebSdkInterface = AppBuilderSdkApi;
9
+
10
+ // init code
11
+ class AppBuilder extends HTMLElement {
12
+ connectedCallback() {
13
+ this.style.height = '100%';
14
+ this.style.width = '100%';
15
+ this.style.display = 'flex';
16
+ this.style.flex = '1';
17
+ AppRegistry.registerComponent('App', () => SDKAppWrapper);
18
+ AppRegistry.runApplication('App', {
19
+ // initialProps: {passphrase: this.getAttribute('passphrase')},
20
+ rootTag: this,
21
+ });
22
+ }
23
+ }
24
+
25
+ customElements.define('app-builder', AppBuilder);
26
+
27
+ export default AppBuilderWebSdkApi;