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,67 @@
1
+ import React, {useEffect, useState} from 'react';
2
+ import {fpeConfig, FpeProvider, FpeApiInterface} from 'fpe-api';
3
+ import {installFPE as createFPE} from 'fpe-api/install';
4
+ import SDKEvents from './utils/SdkEvents';
5
+ import App from './App';
6
+
7
+ export interface userEventsMapInterface {
8
+ leave: () => void;
9
+ create: (
10
+ hostPhrase: string,
11
+ attendeePhrase?: string,
12
+ pstnNumer?: string,
13
+ ) => void;
14
+ preJoin: (meetingTitle: string, devices: MediaDeviceInfo[]) => void;
15
+ join: (
16
+ meetingTitle: string,
17
+ devices: MediaDeviceInfo[],
18
+ isHost: boolean,
19
+ ) => void;
20
+ }
21
+
22
+ export interface AppBuilderSdkApiInterface {
23
+ addFPE: (fpe: FpeApiInterface) => void;
24
+ createFPE: (fpe: FpeApiInterface) => FpeApiInterface;
25
+ joinMeeting: (joinPhrase: string) => void;
26
+ on: <T extends keyof userEventsMapInterface>(
27
+ userEventName: T,
28
+ callBack: userEventsMapInterface[T],
29
+ ) => void;
30
+ off: (userEventName: keyof userEventsMapInterface) => void;
31
+ }
32
+
33
+ export const AppBuilderSdkApi: AppBuilderSdkApiInterface = {
34
+ addFPE: (fpeConfig: FpeApiInterface) => {
35
+ SDKEvents.emit('addFpe', fpeConfig);
36
+ },
37
+ joinMeeting: (joinPhrase: string) => {
38
+ SDKEvents.emit('joinMeetingWithPhrase', joinPhrase);
39
+ },
40
+ createFPE,
41
+ on: (userEventName, cb) => {
42
+ SDKEvents.on(userEventName, cb);
43
+ },
44
+ off: (userEventName) => {
45
+ SDKEvents.off(userEventName);
46
+ },
47
+ };
48
+
49
+ const SDKAppWrapper = () => {
50
+ const [fpe, setFpe] = useState(fpeConfig);
51
+ useEffect(() => {
52
+ SDKEvents.on('addFpe', (sdkFpeConfig) => {
53
+ console.log('DEBUG(aditya)-SDKEvents: addFpe event called');
54
+ setFpe(sdkFpeConfig);
55
+ });
56
+ // Join event consumed in Create.tsx
57
+ }, []);
58
+ return (
59
+ <>
60
+ <FpeProvider value={fpe}>
61
+ <App />
62
+ </FpeProvider>
63
+ </>
64
+ );
65
+ };
66
+
67
+ export default SDKAppWrapper;
@@ -35,14 +35,20 @@ export default function PrimaryButton(props: ButtonProps) {
35
35
  {backgroundColor: props.disabled ? primaryColor + '80' : primaryColor},
36
36
  ]}
37
37
  {...otherProps}>
38
- {props.text ? (
39
- <Text style={[styles.primaryButtonText as StyleProp<TextStyle>, {color: '#fff'}]}>
40
- {props.text}
41
- </Text>
42
- ) : (
43
- <></>
44
- )}
45
- {children}
38
+ <>
39
+ {props.text ? (
40
+ <Text
41
+ style={[
42
+ styles.primaryButtonText as StyleProp<TextStyle>,
43
+ {color: '#fff'},
44
+ ]}>
45
+ {props.text}
46
+ </Text>
47
+ ) : (
48
+ <></>
49
+ )}
50
+ {children}
51
+ </>
46
52
  </Pressable>
47
53
  );
48
54
  }
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import React, {useContext} from 'react';
13
13
  import {TextInputProps, StyleSheet, TextInput, Platform} from 'react-native';
14
+ import {isWeb} from '../utils/common';
14
15
  import {textInput} from '../../theme.json';
15
16
  import ColorContext from '../components/ColorContext';
16
17
 
@@ -19,7 +20,13 @@ const PrimaryButton = (props: TextInputProps) => {
19
20
  const {style, ...otherProps} = props;
20
21
  return (
21
22
  <TextInput
22
- style={[styles.textInput, styles.textWrapFix, style, styles.noOutline, {borderColor: primaryColor, color: $config.PRIMARY_FONT_COLOR}]}
23
+ style={[
24
+ styles.textInput,
25
+ styles.textWrapFix,
26
+ style,
27
+ styles.noOutline,
28
+ {borderColor: primaryColor, color: $config.PRIMARY_FONT_COLOR},
29
+ ]}
23
30
  placeholderTextColor={$config.PRIMARY_FONT_COLOR + '70'}
24
31
  {...otherProps}
25
32
  autoCorrect={false}
@@ -31,10 +38,11 @@ export default PrimaryButton;
31
38
 
32
39
  const styles = StyleSheet.create({
33
40
  textInput,
34
- noOutline: Platform.OS === 'web' ? { outlineStyle: "none" } : {},
41
+ // @ts-ignore
42
+ noOutline: isWeb ? {outlineStyle: 'none'} : {},
35
43
  textWrapFix: Platform.select({
36
44
  ios: {
37
- paddingVertical: 5
38
- }
39
- })
45
+ paddingVertical: 5,
46
+ },
47
+ }),
40
48
  });
@@ -9,25 +9,31 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useState, useContext, useEffect} from 'react';
12
+ import React, {useState, useContext} from 'react';
13
13
  import {
14
14
  View,
15
- Platform,
16
15
  Text,
17
16
  StyleSheet,
18
17
  TouchableOpacity,
19
18
  Dimensions,
20
- useWindowDimensions,
21
19
  } from 'react-native';
22
- import {RFValue} from 'react-native-responsive-fontsize';
23
20
  import ChatContainer from '../subComponents/ChatContainer';
24
21
  import ChatInput from '../subComponents/ChatInput';
25
22
  import ChatParticipants from '../subComponents/chat/ChatParticipants';
26
23
  import ColorContext from './ColorContext';
27
- import chatContext from './ChatContext';
24
+ import {useChatNotification} from './chat-notification/useChatNotification';
25
+ import {useString} from '../utils/useString';
26
+ import {isIOS, isValidReactComponent, isWeb} from '../utils/common';
27
+ import {useChatUIControl} from './chat-ui/useChatUIControl';
28
+ import {useFpe} from 'fpe-api';
29
+ import {UidType} from '../../agora-rn-uikit';
28
30
 
29
- const Chat = (props: any) => {
30
- const {height, width} = useWindowDimensions();
31
+ const Chat = () => {
32
+ // commented for v1 release
33
+ // const groupChatLabel = useString('groupChatLabel')();
34
+ // const privateChatLabel = useString('privateChatLabel')();
35
+ const groupChatLabel = 'Group';
36
+ const privateChatLabel = 'Private';
31
37
  const [dim, setDim] = useState([
32
38
  Dimensions.get('window').width,
33
39
  Dimensions.get('window').height,
@@ -35,154 +41,180 @@ const Chat = (props: any) => {
35
41
  ]);
36
42
  const isSmall = dim[0] < 700;
37
43
 
38
- const {userList} = useContext(chatContext);
39
-
40
44
  const {
41
- setChatDisplayed,
42
- pendingPrivateNotification,
43
- pendingPublicNotification,
44
- lastCheckedPrivateState,
45
- privateMessageCountMap,
46
- setPrivateMessageLastSeen,
47
- setPrivateChatDisplayed,
48
- } = props;
49
- const {primaryColor} = useContext(ColorContext);
50
- const [groupActive, setGroupActive] = useState(true);
51
- const [privateActive, setPrivateActive] = useState(false);
52
- const [selectedUserID, setSelectedUser] = useState('');
53
-
54
- //Initally private state should be false
55
- useEffect(() => {
56
- setPrivateChatDisplayed(false);
57
- }, []);
45
+ groupActive,
46
+ setGroupActive,
47
+ privateActive,
48
+ setPrivateActive,
49
+ setSelectedChatUserId: setSelectedUser,
50
+ } = useChatUIControl();
51
+ const {
52
+ unreadGroupMessageCount,
53
+ setUnreadGroupMessageCount,
54
+ unreadPrivateMessageCount,
55
+ setUnreadPrivateMessageCount,
56
+ setUnreadIndividualMessageCount,
57
+ unreadIndividualMessageCount,
58
+ } = useChatNotification();
58
59
 
59
- useEffect(() => {
60
- if (privateActive && selectedUserID) {
61
- setPrivateMessageLastSeen({
62
- userId: selectedUserID,
63
- lastSeenCount: privateMessageCountMap[selectedUserID],
64
- });
65
- }
66
- }, [pendingPrivateNotification]);
60
+ const {primaryColor} = useContext(ColorContext);
67
61
 
68
62
  const selectGroup = () => {
69
63
  setPrivateActive(false);
70
64
  setGroupActive(true);
71
- setPrivateChatDisplayed(false);
65
+ setUnreadGroupMessageCount(0);
66
+ setSelectedUser(0);
72
67
  };
73
68
  const selectPrivate = () => {
74
69
  setGroupActive(false);
75
- setPrivateChatDisplayed(true);
70
+ setSelectedUser(0);
71
+ setPrivateActive(false);
76
72
  };
77
- const selectUser = (userUID: any) => {
73
+ const selectUser = (userUID: UidType) => {
78
74
  setSelectedUser(userUID);
79
75
  setPrivateActive(true);
76
+ setUnreadIndividualMessageCount((prevState) => {
77
+ return {
78
+ ...prevState,
79
+ [userUID]: 0,
80
+ };
81
+ });
82
+ setUnreadPrivateMessageCount(
83
+ unreadPrivateMessageCount - (unreadIndividualMessageCount[userUID] || 0),
84
+ );
80
85
  };
81
86
 
87
+ const {ChatAfterView, ChatBeforeView} = useFpe((data) => {
88
+ let components: {
89
+ ChatAfterView: React.ComponentType;
90
+ ChatBeforeView: React.ComponentType;
91
+ } = {
92
+ ChatAfterView: React.Fragment,
93
+ ChatBeforeView: React.Fragment,
94
+ };
95
+ if (
96
+ data?.components?.videoCall &&
97
+ typeof data?.components?.videoCall === 'object'
98
+ ) {
99
+ // commented for v1 release
100
+ // if (
101
+ // data?.components?.videoCall?.chat &&
102
+ // typeof data?.components?.videoCall?.chat === 'object'
103
+ // ) {
104
+ // if (
105
+ // data?.components?.videoCall?.chat?.after &&
106
+ // isValidReactComponent(data?.components?.videoCall?.chat?.after)
107
+ // ) {
108
+ // components.ChatAfterView = data?.components?.videoCall?.chat?.after;
109
+ // }
110
+ // if (
111
+ // data?.components?.videoCall?.chat?.before &&
112
+ // isValidReactComponent(data?.components?.videoCall?.chat?.before)
113
+ // ) {
114
+ // components.ChatBeforeView = data?.components?.videoCall?.chat?.before;
115
+ // }
116
+ // }
117
+ }
118
+ return components;
119
+ });
120
+
82
121
  return (
83
- <View
84
- style={
85
- Platform.OS === 'web'
86
- ? !isSmall
87
- ? style.chatView
122
+ <>
123
+ <View
124
+ style={
125
+ isWeb
126
+ ? !isSmall
127
+ ? style.chatView
128
+ : style.chatViewNative
88
129
  : style.chatViewNative
89
- : style.chatViewNative
90
- }>
91
- <View style={style.chatNav}>
92
- <TouchableOpacity
93
- onPress={selectGroup}
94
- style={
95
- groupActive
96
- ? [style.groupActive, {borderColor: primaryColor}]
97
- : [
98
- style.group,
99
- {
100
- borderColor: primaryColor,
101
- borderTopColor: primaryColor + '80',
102
- },
103
- ]
104
- }>
105
- {pendingPublicNotification !== 0 ? (
106
- <View style={style.chatNotification}>
107
- <Text>{pendingPublicNotification}</Text>
108
- </View>
109
- ) : null}
110
- <Text style={groupActive ? style.groupTextActive : style.groupText}>
111
- Group
112
- </Text>
113
- </TouchableOpacity>
114
- <TouchableOpacity
115
- onPress={selectPrivate}
116
- style={
117
- !groupActive
118
- ? [style.privateActive, {borderColor: primaryColor}]
119
- : [
120
- style.private,
121
- {
122
- borderColor: primaryColor,
123
- borderTopColor: primaryColor + '80',
124
- },
125
- ]
126
- }>
127
- {pendingPrivateNotification !== 0 ? (
128
- <View style={style.chatNotification}>
129
- <Text>{pendingPrivateNotification}</Text>
130
- </View>
131
- ) : null}
132
- <Text style={!groupActive ? style.groupTextActive : style.groupText}>
133
- Private
134
- </Text>
135
- </TouchableOpacity>
136
- </View>
137
- {groupActive ? (
138
- <>
139
- <ChatContainer privateActive={privateActive} />
140
- <View style={[style.chatInputLineSeparator, {marginBottom: 0}]} />
141
- <View>
142
- <View style={style.chatInputContainer}>
143
- <View style={[style.chatInputLineSeparator, {opacity: 0.3}]} />
144
- <ChatInput privateActive={privateActive} />
130
+ }>
131
+ {/**
132
+ * In Native device we are setting absolute view. so placed ChatBeforeView and ChatAfterView inside the main view
133
+ */}
134
+ <ChatBeforeView />
135
+ <View style={style.chatNav}>
136
+ <TouchableOpacity
137
+ onPress={selectGroup}
138
+ style={
139
+ groupActive
140
+ ? [style.groupActive, {borderColor: primaryColor}]
141
+ : [
142
+ style.group,
143
+ {
144
+ borderColor: primaryColor,
145
+ borderTopColor: primaryColor + '80',
146
+ },
147
+ ]
148
+ }>
149
+ {unreadGroupMessageCount !== 0 ? (
150
+ <View style={style.chatNotification}>
151
+ <Text>{unreadGroupMessageCount}</Text>
152
+ </View>
153
+ ) : null}
154
+ <Text style={groupActive ? style.groupTextActive : style.groupText}>
155
+ {groupChatLabel}
156
+ </Text>
157
+ </TouchableOpacity>
158
+ <TouchableOpacity
159
+ onPress={selectPrivate}
160
+ style={
161
+ !groupActive
162
+ ? [style.privateActive, {borderColor: primaryColor}]
163
+ : [
164
+ style.private,
165
+ {
166
+ borderColor: primaryColor,
167
+ borderTopColor: primaryColor + '80',
168
+ },
169
+ ]
170
+ }>
171
+ {unreadPrivateMessageCount !== 0 ? (
172
+ <View style={style.chatNotification}>
173
+ <Text>{unreadPrivateMessageCount}</Text>
174
+ </View>
175
+ ) : null}
176
+ <Text
177
+ style={!groupActive ? style.groupTextActive : style.groupText}>
178
+ {privateChatLabel}
179
+ </Text>
180
+ </TouchableOpacity>
181
+ </View>
182
+ {groupActive ? (
183
+ <>
184
+ <ChatContainer privateActive={privateActive} />
185
+ <View style={[style.chatInputLineSeparator, {marginBottom: 0}]} />
186
+ <View>
187
+ <View style={style.chatInputContainer}>
188
+ <View style={[style.chatInputLineSeparator, {opacity: 0.3}]} />
189
+ <ChatInput />
190
+ </View>
145
191
  </View>
146
- </View>
147
- </>
148
- ) : (
149
- <>
150
- {!privateActive ? (
151
- <ChatParticipants
152
- selectUser={selectUser}
153
- setPrivateMessageLastSeen={setPrivateMessageLastSeen}
154
- privateMessageCountMap={privateMessageCountMap}
155
- lastCheckedPrivateState={lastCheckedPrivateState}
156
- />
157
- ) : (
158
- <>
159
- <ChatContainer
160
- privateActive={privateActive}
161
- setPrivateActive={setPrivateActive}
162
- selectedUserID={selectedUserID}
163
- selectedUsername={
164
- userList[selectedUserID]
165
- ? userList[selectedUserID]?.name + ' '
166
- : 'User '
167
- }
168
- />
169
- <View style={[style.chatInputLineSeparator, {marginBottom: 0}]} />
170
- <View>
171
- <View style={style.chatInputContainer}>
172
- <View
173
- style={[style.chatInputLineSeparator, {opacity: 0.3}]}
174
- />
175
- <ChatInput
176
- privateActive={privateActive}
177
- selectedUserID={selectedUserID}
178
- />
192
+ </>
193
+ ) : (
194
+ <>
195
+ {!privateActive ? (
196
+ <ChatParticipants selectUser={selectUser} />
197
+ ) : (
198
+ <>
199
+ <ChatContainer selectPrivate={selectPrivate} />
200
+ <View
201
+ style={[style.chatInputLineSeparator, {marginBottom: 0}]}
202
+ />
203
+ <View>
204
+ <View style={style.chatInputContainer}>
205
+ <View
206
+ style={[style.chatInputLineSeparator, {opacity: 0.3}]}
207
+ />
208
+ <ChatInput />
209
+ </View>
179
210
  </View>
180
- </View>
181
- </>
182
- )}
183
- </>
184
- )}
185
- </View>
211
+ </>
212
+ )}
213
+ </>
214
+ )}
215
+ <ChatAfterView />
216
+ </View>
217
+ </>
186
218
  );
187
219
  };
188
220
 
@@ -299,7 +331,7 @@ const style = StyleSheet.create({
299
331
  justifyContent: 'center',
300
332
  backgroundColor: $config.PRIMARY_COLOR,
301
333
  color: $config.SECONDARY_FONT_COLOR,
302
- fontFamily: Platform.OS === 'ios' ? 'Helvetica' : 'sans-serif',
334
+ fontFamily: isIOS ? 'Helvetica' : 'sans-serif',
303
335
  borderRadius: 10,
304
336
  position: 'absolute',
305
337
  left: 25,
@@ -313,7 +345,7 @@ const style = StyleSheet.create({
313
345
  justifyContent: 'center',
314
346
  backgroundColor: $config.PRIMARY_COLOR,
315
347
  color: $config.SECONDARY_FONT_COLOR,
316
- fontFamily: Platform.OS === 'ios' ? 'Helvetica' : 'sans-serif',
348
+ fontFamily: isIOS ? 'Helvetica' : 'sans-serif',
317
349
  borderRadius: 10,
318
350
  position: 'absolute',
319
351
  right: 20,
@@ -9,20 +9,20 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import RtmEngine, {RtmAttribute} from 'agora-react-native-rtm';
13
- import {createContext} from 'react';
14
- import {rtmEventsInterface} from './RTMEvents';
12
+ import RtmEngine from 'agora-react-native-rtm';
13
+ import {UidType} from '../../agora-rn-uikit';
14
+ import {createContext, SetStateAction} from 'react';
15
15
 
16
- export interface channelMessage {
16
+ export interface ChatBubbleProps {
17
17
  isLocal: boolean;
18
- msg: string;
19
- ts: string;
20
- uid: string;
18
+ message: string;
19
+ timestamp: string;
20
+ uid: UidType;
21
21
  }
22
22
 
23
23
  export interface messageStoreInterface {
24
24
  ts: string;
25
- uid: string;
25
+ uid: UidType;
26
26
  msg: string;
27
27
  }
28
28
 
@@ -49,23 +49,17 @@ export enum attrRequestTypes {
49
49
  none = 'NONE',
50
50
  }
51
51
 
52
- interface chatContext {
53
- messageStore: messageStoreInterface | any;
54
- privateMessageStore: any;
52
+ export interface chatContext {
53
+ hasUserJoinedRTM: boolean;
55
54
  sendMessage: (msg: string) => void;
56
- sendMessageToUid: (msg: string, uid: number) => void;
55
+ sendMessageToUid: (msg: string, uid: number | string) => void;
57
56
  sendControlMessage: (msg: string) => void;
58
57
  sendControlMessageToUid: (msg: string, uid: number) => void;
59
- addOrUpdateLocalUserAttributes: (attributes: RtmAttribute[]) => void;
60
- broadcastUserAttributes: (
61
- attributes: RtmAttribute[],
62
- ctrlMsg: controlMessageEnum,
63
- ) => void;
64
58
  engine: RtmEngine;
65
- localUid: string;
66
- userList: any;
59
+ localUid: UidType;
67
60
  onlineUsersCount: number;
68
- events: rtmEventsInterface;
61
+ displayName: string;
62
+ setDisplayName: React.Dispatch<SetStateAction<string>>;
69
63
  }
70
64
 
71
65
  export enum controlMessageEnum {
@@ -76,8 +70,6 @@ export enum controlMessageEnum {
76
70
  kickUser = '5',
77
71
  cloudRecordingActive = '6',
78
72
  cloudRecordingUnactive = '7',
79
- clientRoleChanged = 'CLIENT_ROLE_CHANGED',
80
- // TODO move to livestream provider
81
73
  }
82
74
 
83
75
  const ChatContext = createContext(null as unknown as chatContext);
@@ -12,7 +12,7 @@
12
12
  import React from 'react';
13
13
  import ColorContext from './ColorContext';
14
14
 
15
- const ColorConfigure: React.FC = (props: any) => {
15
+ const ColorConfigure = (props: {children: React.ReactNode}) => {
16
16
  const primaryColor = $config.PRIMARY_COLOR;
17
17
  console.log(primaryColor);
18
18
  return (
@@ -20,7 +20,7 @@ const ColorConfigure: React.FC = (props: any) => {
20
20
  value={{
21
21
  primaryColor: primaryColor,
22
22
  }}>
23
- {true ? props.children : <></>}
23
+ {props.children}
24
24
  </ColorContext.Provider>
25
25
  );
26
26
  };