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
@@ -1,4 +1,24 @@
1
1
  // DECLARE ENUMS & CONTANTS
2
+ import {ClientRole} from '../../../agora-rn-uikit';
3
+
4
+ export enum RaiseHandValue {
5
+ TRUE = 'TRUE',
6
+ FALSE = 'FALSE',
7
+ }
8
+
9
+ export const RaiseHandAttributeKey = 'raised';
10
+
11
+ export interface raiseHandListInterface {
12
+ [key: string]: raiseHandItemInterface;
13
+ }
14
+
15
+ export interface raiseHandItemInterface {
16
+ role: ClientRole;
17
+ raised: RaiseHandValue;
18
+ ts: number;
19
+ }
20
+
21
+ import {UidType} from '../../../agora-rn-uikit';
2
22
 
3
23
  export enum requestStatus {
4
24
  AwaitingAction = 'AWAITING_ACTION',
@@ -21,6 +41,7 @@ export enum LiveStreamControlMessageEnum {
21
41
  raiseHandApprovedRequestRecall = 'RAISE_HAND_APPROVED_REQUEST_RECALL',
22
42
  notifyAllRequestApproved = 'NOTIFY_REQUEST_APPROVED',
23
43
  notifyAllRequestRejected = 'NOTIFY_REQUEST_REJECTED',
44
+ notifyHostsInChannel = 'NOTIFY_HOSTS_IN_CHANNEL',
24
45
  }
25
46
 
26
47
  export const LSNotificationObject = {
@@ -41,29 +62,27 @@ export const LSNotificationObject = {
41
62
  };
42
63
 
43
64
  export interface liveStreamPropsInterface {
44
- isHost: boolean;
45
- setRtcProps: any;
65
+ children: React.ReactNode;
66
+ value: {setRtcProps: any; rtcProps: any; callActive: boolean};
46
67
  }
47
68
 
48
69
  export interface liveStreamContext {
49
70
  setLastCheckedRequestTimestamp: (timestamp: number) => void;
50
71
  isPendingRequestToReview: boolean;
51
- currLiveStreamRequest: Partial<Record<string, requestInterface>>;
72
+ raiseHandList: Record<string, raiseHandItemInterface>;
52
73
  hostApprovesRequestOfUID: (uid: number) => void;
53
74
  hostRejectsRequestOfUID: (uid: number) => void;
54
75
  audienceSendsRequest: () => void;
55
76
  audienceRecallsRequest: () => void;
56
- raiseHandRequestActive: boolean;
57
- setRaiseHandRequestActive: (state: boolean) => void;
58
77
  }
59
78
 
60
79
  export interface requestInterface {
61
80
  ts: number;
62
81
  status: requestStatus;
63
- uid: string | number;
82
+ uid: UidType;
64
83
  }
65
84
 
66
85
  export interface attrRequestInterface {
67
86
  status: attrRequestStatus;
68
- uid: string | number;
87
+ uid: UidType;
69
88
  }
@@ -1,9 +1,20 @@
1
- import {LiveStreamControlMessageEnum, requestStatus} from './Types';
1
+ import {
2
+ LiveStreamControlMessageEnum,
3
+ requestStatus,
4
+ RaiseHandValue,
5
+ raiseHandListInterface,
6
+ } from './Types';
2
7
 
3
8
  import LiveStreamContext, {
4
9
  LiveStreamContextProvider,
5
10
  } from './LiveStreamContext';
6
11
 
7
- export {LiveStreamContextProvider, LiveStreamControlMessageEnum, requestStatus};
12
+ export {
13
+ LiveStreamContextProvider,
14
+ LiveStreamControlMessageEnum,
15
+ requestStatus,
16
+ RaiseHandValue,
17
+ };
18
+ export type {raiseHandListInterface};
8
19
 
9
20
  export default LiveStreamContext;
@@ -13,7 +13,11 @@ import React from 'react';
13
13
  import {View} from 'react-native';
14
14
  import {LocalRaiseHand} from '../../../subComponents/livestream';
15
15
 
16
- const LiveStreamControls = (props: any) => {
16
+ export interface LiveStreamControlsProps {
17
+ showControls: boolean;
18
+ }
19
+
20
+ const LiveStreamControls = (props: LiveStreamControlsProps) => {
17
21
  const {showControls} = props;
18
22
  if (!$config.RAISE_HAND) return <></>;
19
23
  if (!showControls) return <></>;
@@ -0,0 +1,63 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+ import React, {createContext} from 'react';
13
+ import {createHook} from 'fpe-implementation';
14
+ import {UidType} from '../../../agora-rn-uikit';
15
+ export interface MeetingInfoContextInterface {
16
+ isJoinDataFetched?: boolean;
17
+ isHost: boolean;
18
+ meetingTitle: string;
19
+ meetingPassphrase: {
20
+ attendee: string;
21
+ host?: string;
22
+ pstn?: {
23
+ number: string;
24
+ pin: string;
25
+ };
26
+ };
27
+ isSeparateHostLink: boolean;
28
+ channel?: string;
29
+ uid?: UidType;
30
+ token?: string;
31
+ rtm?: string;
32
+ secret?: string;
33
+ screenShareUid?: string;
34
+ screenShareToken?: string;
35
+ }
36
+
37
+ export const MeetingInfoDefaultValue: MeetingInfoContextInterface = {
38
+ isJoinDataFetched: false,
39
+ isHost: false,
40
+ meetingTitle: '',
41
+ meetingPassphrase: {
42
+ attendee: '',
43
+ },
44
+ isSeparateHostLink: true,
45
+ };
46
+
47
+ const MeetingInfoContext = createContext(MeetingInfoDefaultValue);
48
+
49
+ interface MeetingInfoProviderProps {
50
+ children: React.ReactNode;
51
+ value: MeetingInfoContextInterface;
52
+ }
53
+
54
+ const MeetingInfoProvider = (props: MeetingInfoProviderProps) => {
55
+ return (
56
+ <MeetingInfoContext.Provider value={{...props.value}}>
57
+ {props.children}
58
+ </MeetingInfoContext.Provider>
59
+ );
60
+ };
61
+ const useMeetingInfo = createHook(MeetingInfoContext);
62
+
63
+ export {MeetingInfoProvider, useMeetingInfo};
@@ -0,0 +1,38 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+ import React, {createContext, SetStateAction} from 'react';
13
+ import {createHook} from 'fpe-implementation';
14
+ import {MeetingInfoContextInterface} from './useMeetingInfo';
15
+
16
+ export interface SetMeetingInfoContextInterface {
17
+ setMeetingInfo: React.Dispatch<SetStateAction<MeetingInfoContextInterface>>;
18
+ }
19
+
20
+ const SetMeetingInfoContext = createContext<SetMeetingInfoContextInterface>({
21
+ setMeetingInfo: () => {},
22
+ });
23
+
24
+ interface SetMeetingInfoProviderProps {
25
+ children: React.ReactNode;
26
+ value: SetMeetingInfoContextInterface;
27
+ }
28
+
29
+ const SetMeetingInfoProvider = (props: SetMeetingInfoProviderProps) => {
30
+ return (
31
+ <SetMeetingInfoContext.Provider value={{...props.value}}>
32
+ {props.children}
33
+ </SetMeetingInfoContext.Provider>
34
+ );
35
+ };
36
+ const useSetMeetingInfo = createHook(SetMeetingInfoContext);
37
+
38
+ export {SetMeetingInfoProvider, useSetMeetingInfo};
@@ -3,38 +3,43 @@ import {View, Text} from 'react-native';
3
3
  import RemoteEndCall from '../../subComponents/RemoteEndCall';
4
4
  import ParticipantName from '../../components/participants/ParticipantName';
5
5
  import chatContext from '../ChatContext';
6
+ import {useString} from '../../utils/useString';
7
+ import {useRenderContext} from 'fpe-api';
6
8
 
7
9
  const AllAudienceParticipants = (props: any) => {
8
- const {p_style, isHost, participantList} = props;
10
+ const {p_style, isHost, uids} = props;
11
+ const {renderList} = useRenderContext();
9
12
  const {localUid} = useContext(chatContext);
10
-
13
+ //commented for v1 release
14
+ //const participantListPlaceholder = useString('participantListPlaceholder')();
15
+ const participantListPlaceholder = 'No one has joined yet';
11
16
  return (
12
17
  <View style={p_style.participantContainer}>
13
- {Object.keys(participantList).length == 0 ? (
14
- <Text style={p_style.infoText}>No one has joined yet</Text>
18
+ {uids.length == 0 ? (
19
+ <Text style={p_style.infoText}>{participantListPlaceholder}</Text>
15
20
  ) : (
16
21
  <>
17
22
  {/* Audience should see his name first */}
18
- {Object.entries(participantList)
19
- .filter(([uid, _]: any) => uid === localUid)
20
- .map(([uid, user]: any, index: number) => (
21
- <View style={p_style.participantRow} key={index}>
22
- <ParticipantName value={user.name} />
23
- {isHost && (
24
- <View style={p_style.participantActionContainer}>
25
- <View style={[p_style.actionBtnIcon]}>
26
- <RemoteEndCall uid={uid} isHost={isHost} />
27
- </View>
23
+ {uids.filter((i) => i === localUid).length ? (
24
+ <View style={p_style.participantRow} key={'local' + 0}>
25
+ <ParticipantName value={renderList[localUid]?.name} />
26
+ {isHost && (
27
+ <View style={p_style.participantActionContainer}>
28
+ <View style={[p_style.actionBtnIcon]}>
29
+ <RemoteEndCall uid={localUid} isHost={isHost} />
28
30
  </View>
29
- )}
30
- </View>
31
- ))}
31
+ </View>
32
+ )}
33
+ </View>
34
+ ) : (
35
+ <></>
36
+ )}
32
37
  {/* Others Audience in the call */}
33
- {Object.entries(participantList)
34
- .filter(([uid, _]: any) => uid !== localUid)
35
- .map(([uid, user]: any, index: number) => (
38
+ {uids
39
+ .filter((i) => i !== localUid)
40
+ .map((uid: any, index: number) => (
36
41
  <View style={p_style.participantRow} key={index}>
37
- <ParticipantName value={user.name} />
42
+ <ParticipantName value={renderList[uid]?.name} />
38
43
  {isHost && (
39
44
  <View style={p_style.participantActionContainer}>
40
45
  <View style={[p_style.actionBtnIcon]}>
@@ -1,65 +1,53 @@
1
- import React, {useContext} from 'react';
2
- import {MinUidConsumer, MaxUidConsumer} from '../../../agora-rn-uikit';
3
- import chatContext from '../ChatContext';
4
-
1
+ import React from 'react';
5
2
  import MeParticipant from './MeParticipant';
6
3
  import ScreenshareParticipants from './ScreenshareParticipants';
7
4
  import RemoteParticipants from './RemoteParticipants';
8
- import {UserType} from './../RTMConfigure';
5
+ import {useString} from '../../utils/useString';
6
+ import useUserList from '../../utils/useUserList';
7
+ import {UidType, useLocalUid} from '../../../agora-rn-uikit';
9
8
 
10
9
  export default function AllHostParticipants(props: any) {
11
10
  const {p_style, isHost} = props;
12
- const {userList, localUid} = useContext(chatContext);
13
-
14
- const getParticipantName = (userUID: number | string) => {
15
- if (userUID === 'local')
16
- return userList[localUid] ? userList[localUid].name + ' ' : 'You ';
17
- else if (userUID === 1)
18
- return userList[localUid]
19
- ? userList[localUid].name + "'s screenshare "
20
- : 'Your screenshare ';
21
- else
22
- return userList[userUID]
23
- ? userList[userUID].name + ' '
24
- : String(userUID)[0] === '1'
25
- ? 'PSTN User '
26
- : 'User ';
11
+ const localUid = useLocalUid();
12
+ //commented for v1 release
13
+ //const remoteUserDefaultLabel = useString('remoteUserDefaultLabel')();
14
+ const remoteUserDefaultLabel = 'User';
15
+ const {renderList, renderPosition} = useUserList();
16
+ const getParticipantName = (uid: UidType) => {
17
+ return renderList[uid]?.name || remoteUserDefaultLabel;
27
18
  };
28
19
 
29
20
  return (
30
- <MinUidConsumer>
31
- {(minUsers) => (
32
- <MaxUidConsumer>
33
- {(maxUser) =>
34
- [...minUsers, ...maxUser].map((user) =>
35
- user.uid === 'local' ? (
36
- <MeParticipant
37
- name={getParticipantName(user.uid)}
38
- p_style={p_style}
39
- key={user.uid}
40
- />
41
- ) : user.uid === 1 ? (
42
- <ScreenshareParticipants
43
- name={getParticipantName(user.uid)}
44
- p_styles={p_style}
45
- key={user.uid}
46
- />
47
- ) : (
48
- <RemoteParticipants
49
- name={getParticipantName(user.uid)}
50
- p_styles={p_style}
51
- user={user}
52
- showControls={
53
- userList[user.uid]?.type !== UserType.ScreenShare
54
- }
55
- isHost={isHost}
56
- key={user.uid}
57
- />
58
- ),
59
- )
60
- }
61
- </MaxUidConsumer>
21
+ <>
22
+ {/* User should see his name first */}
23
+ {renderPosition.filter((uid) => uid === localUid).length > 0 && (
24
+ <MeParticipant
25
+ name={getParticipantName(localUid)}
26
+ p_style={p_style}
27
+ key={localUid}
28
+ />
62
29
  )}
63
- </MinUidConsumer>
30
+ {/* Others Users in the call */}
31
+ {renderPosition
32
+ .filter((uid) => uid !== localUid)
33
+ .map((uid) =>
34
+ renderList[uid]?.type === 'screenshare' ? (
35
+ <ScreenshareParticipants
36
+ name={getParticipantName(uid)}
37
+ p_styles={p_style}
38
+ key={uid}
39
+ />
40
+ ) : (
41
+ <RemoteParticipants
42
+ name={getParticipantName(uid)}
43
+ p_styles={p_style}
44
+ user={renderList[uid]}
45
+ showControls={renderList[uid]?.type === 'rtc'}
46
+ isHost={isHost}
47
+ key={uid}
48
+ />
49
+ ),
50
+ )}
51
+ </>
64
52
  );
65
53
  }
@@ -11,8 +11,9 @@
11
11
  */
12
12
  import React from 'react';
13
13
  import {View} from 'react-native';
14
- import {LocalAudioMute, LocalVideoMute} from '../../../agora-rn-uikit';
15
- import {LocalUserContext} from '../../../agora-rn-uikit';
14
+ import {ButtonTemplateName} from '../../utils/useButtonTemplate';
15
+ import LocalAudioMute from '../../subComponents/LocalAudioMute';
16
+ import LocalVideoMute from '../../subComponents/LocalVideoMute';
16
17
  import ParticipantName from './ParticipantName';
17
18
 
18
19
  const MeParticipant = (props: any) => {
@@ -22,14 +23,12 @@ const MeParticipant = (props: any) => {
22
23
  <View style={p_style.participantRow}>
23
24
  <ParticipantName value={name} />
24
25
  <View style={p_style.participantActionContainer}>
25
- <LocalUserContext>
26
- <View style={[p_style.actionBtnIcon, {marginRight: 10}]}>
27
- <LocalAudioMute btnText=" " variant="text" />
28
- </View>
29
- <View style={p_style.actionBtnIcon}>
30
- <LocalVideoMute btnText=" " variant="text" />
31
- </View>
32
- </LocalUserContext>
26
+ <View style={[p_style.actionBtnIcon, {marginRight: 10}]}>
27
+ <LocalAudioMute buttonTemplateName={ButtonTemplateName.topBar} />
28
+ </View>
29
+ <View style={p_style.actionBtnIcon}>
30
+ <LocalVideoMute buttonTemplateName={ButtonTemplateName.topBar} />
31
+ </View>
33
32
  </View>
34
33
  </View>
35
34
  );
@@ -13,10 +13,11 @@ import React from 'react';
13
13
  import {View, StyleSheet, useWindowDimensions, Platform} from 'react-native';
14
14
  import TextWithToolTip from '../../subComponents/TextWithTooltip';
15
15
  import {RFValue} from 'react-native-responsive-fontsize';
16
+ import {isWeb} from '../../utils/common';
16
17
 
17
18
  const ParticipantName = ({value}: {value: string}) => {
18
19
  const {height, width} = useWindowDimensions();
19
- const fontSize = Platform.OS === 'web' ? 14 : 16;
20
+ const fontSize = isWeb ? 14 : 16;
20
21
  return (
21
22
  <View style={{flex: 1}}>
22
23
  <TextWithToolTip
@@ -10,24 +10,24 @@
10
10
  *********************************************
11
11
  */
12
12
  import React from 'react';
13
- import {View, Text} from 'react-native';
13
+ import {View} from 'react-native';
14
14
  import RemoteAudioMute from '../../subComponents/RemoteAudioMute';
15
15
  import RemoteVideoMute from '../../subComponents/RemoteVideoMute';
16
16
  import {ApprovedLiveStreamControlsView} from '../../subComponents/livestream';
17
17
  import RemoteEndCall from '../../subComponents/RemoteEndCall';
18
18
  import ParticipantName from './ParticipantName';
19
+ import {RenderInterface} from '../../../agora-rn-uikit';
19
20
 
20
21
  interface remoteParticipantsInterface {
21
22
  p_styles: any;
22
23
  name: string;
23
- user: any;
24
+ user: RenderInterface;
24
25
  showControls: boolean;
25
26
  isHost: boolean;
26
27
  }
27
28
 
28
29
  const RemoteParticipants = (props: remoteParticipantsInterface) => {
29
30
  const {p_styles, user, name, showControls, isHost} = props;
30
-
31
31
  return (
32
32
  <View style={p_styles.participantRow}>
33
33
  <ParticipantName value={name} />
@@ -0,0 +1,91 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+ import React from 'react';
13
+ import {View, StyleSheet} from 'react-native';
14
+ import {useFpe} from 'fpe-api';
15
+ import {isValidReactComponent} from '../../utils/common';
16
+ import LocalAudioMute, {
17
+ LocalAudioMuteProps,
18
+ } from '../../subComponents/LocalAudioMute';
19
+ import LocalVideoMute, {
20
+ LocalVideoMuteProps,
21
+ } from '../../subComponents/LocalVideoMute';
22
+ import LocalSwitchCamera, {
23
+ LocalSwitchCameraProps,
24
+ } from '../../subComponents/LocalSwitchCamera';
25
+
26
+ const PreCallLocalMute: React.FC = () => {
27
+ const {VideoMute, AudioMute} = useFpe((data) => {
28
+ let components: {
29
+ VideoMute: React.ComponentType<LocalAudioMuteProps>;
30
+ AudioMute: React.ComponentType<LocalVideoMuteProps>;
31
+ } = {
32
+ AudioMute: LocalAudioMute,
33
+ VideoMute: LocalVideoMute,
34
+ };
35
+ // commented for v1 release
36
+ // if (
37
+ // data?.components?.precall &&
38
+ // typeof data?.components?.precall === 'object'
39
+ // ) {
40
+ // if (
41
+ // data.components?.precall?.audioMute &&
42
+ // typeof data.components?.precall?.audioMute !== 'object'
43
+ // ) {
44
+ // if (
45
+ // data.components?.precall?.audioMute &&
46
+ // isValidReactComponent(data.components?.precall?.audioMute)
47
+ // ) {
48
+ // components.AudioMute = data.components?.precall?.audioMute;
49
+ // }
50
+ // }
51
+
52
+ // if (
53
+ // data.components?.precall?.videoMute &&
54
+ // typeof data.components?.precall?.videoMute !== 'object'
55
+ // ) {
56
+ // if (
57
+ // data.components?.precall?.videoMute &&
58
+ // isValidReactComponent(data.components?.precall?.videoMute)
59
+ // ) {
60
+ // components.VideoMute = data.components?.precall?.videoMute;
61
+ // }
62
+ // }
63
+ // }
64
+ return components;
65
+ });
66
+ return (
67
+ <>
68
+ <View style={style.width50}>
69
+ <AudioMute />
70
+ </View>
71
+ <View style={style.width50} />
72
+ <View style={style.width50}>
73
+ <VideoMute />
74
+ </View>
75
+ <View style={style.width50} />
76
+ <View style={style.width50}>
77
+ <LocalSwitchCamera />
78
+ </View>
79
+ </>
80
+ );
81
+ };
82
+ export const PreCallLocalMuteComponentsArray: [
83
+ (props: LocalAudioMuteProps) => JSX.Element,
84
+ (props: LocalVideoMuteProps) => JSX.Element,
85
+ (props: LocalSwitchCameraProps) => JSX.Element,
86
+ ] = [LocalAudioMute, LocalVideoMute, LocalSwitchCamera];
87
+ export default PreCallLocalMute;
88
+
89
+ const style = StyleSheet.create({
90
+ width50: {width: 50},
91
+ });
@@ -0,0 +1,90 @@
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 {View, StyleSheet} from 'react-native';
14
+ import {useFpe} from 'fpe-api';
15
+ import {isValidReactComponent} from '../../utils/common';
16
+ import LocalVideoMute, {
17
+ LocalVideoMuteProps,
18
+ } from '../../subComponents/LocalVideoMute';
19
+ import LocalAudioMute, {
20
+ LocalAudioMuteProps,
21
+ } from '../../subComponents/LocalAudioMute';
22
+
23
+ const PreCallLocalMute: React.FC = () => {
24
+ const {VideoMute, AudioMute} = useFpe((data) => {
25
+ let components: {
26
+ VideoMute: React.ComponentType<LocalAudioMuteProps>;
27
+ AudioMute: React.ComponentType<LocalVideoMuteProps>;
28
+ } = {
29
+ AudioMute: LocalAudioMute,
30
+ VideoMute: LocalVideoMute,
31
+ };
32
+ // commented for v1 release
33
+ // if (
34
+ // data?.components?.precall &&
35
+ // typeof data?.components?.precall === 'object'
36
+ // ) {
37
+ // if (
38
+ // data.components?.precall?.audioMute &&
39
+ // typeof data.components?.precall?.audioMute !== 'object'
40
+ // ) {
41
+ // if (
42
+ // data.components?.precall?.audioMute &&
43
+ // isValidReactComponent(data.components?.precall?.audioMute)
44
+ // ) {
45
+ // components.AudioMute = data.components?.precall?.audioMute;
46
+ // }
47
+ // }
48
+
49
+ // if (
50
+ // data.components?.precall?.videoMute &&
51
+ // typeof data.components?.precall?.videoMute !== 'object'
52
+ // ) {
53
+ // if (
54
+ // data.components?.precall?.videoMute &&
55
+ // isValidReactComponent(data.components?.precall?.videoMute)
56
+ // ) {
57
+ // components.VideoMute = data.components?.precall?.videoMute;
58
+ // }
59
+ // }
60
+ // }
61
+ return components;
62
+ });
63
+ return (
64
+ <View style={style.precallControls}>
65
+ <View style={{alignSelf: 'center'}}>
66
+ <AudioMute />
67
+ </View>
68
+ <View style={{alignSelf: 'center'}}>
69
+ <VideoMute />
70
+ </View>
71
+ </View>
72
+ );
73
+ };
74
+ export const PreCallLocalMuteComponentsArray: [
75
+ (props: LocalAudioMuteProps) => JSX.Element,
76
+ (props: LocalVideoMuteProps) => JSX.Element,
77
+ ] = [LocalAudioMute, LocalVideoMute];
78
+
79
+ export default PreCallLocalMute;
80
+
81
+ const style = StyleSheet.create({
82
+ precallControls: {
83
+ flexDirection: 'row',
84
+ alignSelf: 'center',
85
+ padding: 10,
86
+ width: '40%',
87
+ justifyContent: 'space-around',
88
+ marginVertical: '5%',
89
+ },
90
+ });