agora-appbuilder-core 3.0.9 → 4.0.0-api.1

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 (305) hide show
  1. package/Readme.md +6 -0
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +5871 -4728
  4. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  5. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  6. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  7. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +10 -6
  8. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +28 -8
  9. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +7 -15
  10. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
  11. package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
  12. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  13. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +4 -2
  14. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +4 -2
  15. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  16. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -6
  17. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +4 -4
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +4 -4
  20. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  21. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +6 -6
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +6 -6
  23. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +23 -0
  24. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +6 -6
  25. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +7 -7
  26. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -7
  27. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +10 -10
  28. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -6
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -6
  30. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -5
  31. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
  32. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  33. package/template/agora-rn-uikit/src/Rtc/Create.tsx +72 -5
  34. package/template/agora-rn-uikit/src/Rtc/Join.tsx +5 -4
  35. package/template/agora-rn-uikit/src/RtcConfigure.tsx +76 -49
  36. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +17 -7
  37. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +17 -11
  38. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -2
  39. package/template/agora-rn-uikit/src/index.ts +17 -9
  40. package/template/android/app/build.gradle +1 -0
  41. package/template/android/app/src/main/AndroidManifest.xml +22 -15
  42. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  43. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  44. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
  45. package/template/android/app/src/main/res/values/colors.xml +7 -0
  46. package/template/android/build.gradle +3 -3
  47. package/template/babel.config.js +1 -0
  48. package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
  49. package/template/customization-api/action-library.ts +10 -14
  50. package/template/customization-api/app-state.ts +4 -6
  51. package/template/customization-api/customEvents.ts +2 -2
  52. package/template/customization-api/customize.ts +1 -1
  53. package/template/customization-api/sub-components.ts +4 -12
  54. package/template/customization-api/typeDefinition.ts +15 -38
  55. package/template/customization-implementation/createHook.ts +24 -6
  56. package/template/customization-implementation/index.ts +1 -1
  57. package/template/customization-implementation/useCustomization.tsx +5 -7
  58. package/template/electron/index.html +27 -27
  59. package/template/electron/renderer/index.js +1 -0
  60. package/template/global.d.ts +26 -4
  61. package/template/index.rsdk.tsx +1 -0
  62. package/template/index.web.js +2 -1
  63. package/template/index.wsdk.tsx +9 -2
  64. package/template/ios/HelloWorld/Info.plist +14 -1
  65. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
  66. package/template/metro.config.js +1 -1
  67. package/template/package.json +18 -7
  68. package/template/react-native-toast-message/index.d.ts +43 -43
  69. package/template/react-native-toast-message/src/colors/index.js +3 -2
  70. package/template/react-native-toast-message/src/components/base/index.js +46 -59
  71. package/template/react-native-toast-message/src/components/base/styles.js +16 -32
  72. package/template/react-native-toast-message/src/components/checkbox.js +178 -0
  73. package/template/react-native-toast-message/src/components/error.js +3 -2
  74. package/template/react-native-toast-message/src/components/info.js +3 -2
  75. package/template/react-native-toast-message/src/components/success.js +3 -2
  76. package/template/react-native-toast-message/src/index.js +122 -31
  77. package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
  78. package/template/react-native-toast-message/src/styles.js +3 -4
  79. package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
  80. package/template/react-native.config.js +7 -0
  81. package/template/src/App.tsx +19 -14
  82. package/template/src/AppWrapper.tsx +74 -29
  83. package/template/src/SDKAppWrapper.tsx +60 -64
  84. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  85. package/template/src/assets/font-styles.css +329 -0
  86. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  87. package/template/src/assets/fonts/icomoon.ttf +0 -0
  88. package/template/src/assets/permission.png +0 -0
  89. package/template/src/assets/selection.json +1 -0
  90. package/template/src/atoms/ActionMenu.tsx +236 -0
  91. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
  92. package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
  93. package/template/src/atoms/AnimatedRings.native.tsx +68 -0
  94. package/template/src/atoms/AnimatedRings.tsx +70 -0
  95. package/template/src/atoms/Card.tsx +61 -0
  96. package/template/src/atoms/CircularProgress.native.tsx +121 -0
  97. package/template/src/atoms/CircularProgress.tsx +102 -0
  98. package/template/src/atoms/CustomIcon.tsx +88 -0
  99. package/template/src/atoms/CustomSwitch.tsx +287 -0
  100. package/template/src/atoms/Dropdown.tsx +306 -0
  101. package/template/src/atoms/HorizontalRule.tsx +3 -1
  102. package/template/src/atoms/IconButton.tsx +162 -0
  103. package/template/src/atoms/ImageIcon.tsx +98 -0
  104. package/template/src/atoms/InfoBubble.tsx +291 -0
  105. package/template/src/atoms/Input.tsx +87 -0
  106. package/template/src/atoms/InviteInfo.tsx +166 -0
  107. package/template/src/atoms/LinkButton.tsx +28 -0
  108. package/template/src/atoms/OutlineButton.tsx +61 -0
  109. package/template/src/atoms/ParticipantsCount.tsx +74 -0
  110. package/template/src/atoms/Popup.tsx +147 -0
  111. package/template/src/atoms/PrimaryButton.tsx +51 -26
  112. package/template/src/atoms/RecordingInfo.tsx +52 -0
  113. package/template/src/atoms/SecondaryButton.tsx +8 -5
  114. package/template/src/atoms/Spacer.tsx +22 -0
  115. package/template/src/atoms/TertiaryButton.tsx +78 -0
  116. package/template/src/atoms/TextInput.tsx +12 -14
  117. package/template/src/atoms/Toggle.tsx +47 -0
  118. package/template/src/atoms/Toolbar.tsx +68 -0
  119. package/template/src/atoms/ToolbarItem.tsx +63 -0
  120. package/template/src/atoms/Tooltip.native.tsx +65 -0
  121. package/template/src/atoms/Tooltip.tsx +94 -0
  122. package/template/src/atoms/UserAvatar.tsx +60 -0
  123. package/template/src/components/Chat.tsx +164 -278
  124. package/template/src/components/ChatContext.ts +8 -1
  125. package/template/src/components/ColorConfigure.tsx +1 -1
  126. package/template/src/components/ColorContext.ts +1 -1
  127. package/template/src/components/CommonStyles.ts +44 -0
  128. package/template/src/components/Controls.tsx +331 -73
  129. package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +8 -6
  130. package/template/src/components/DeviceConfigure.tsx +511 -106
  131. package/template/src/components/DeviceContext.tsx +8 -4
  132. package/template/src/components/EventsConfigure.tsx +192 -10
  133. package/template/src/components/GraphQLProvider.tsx +1 -1
  134. package/template/src/components/GridVideo.tsx +60 -45
  135. package/template/src/components/HostControlView.tsx +114 -35
  136. package/template/src/components/Navbar.tsx +219 -437
  137. package/template/src/components/Navigation.tsx +15 -1
  138. package/template/src/components/NetworkQualityContext.tsx +22 -22
  139. package/template/src/components/ParticipantsView.tsx +178 -156
  140. package/template/src/components/PinnedVideo.tsx +206 -121
  141. package/template/src/components/Precall.native.tsx +358 -119
  142. package/template/src/components/Precall.tsx +272 -138
  143. package/template/src/components/RTMConfigure.tsx +66 -19
  144. package/template/src/components/Router.electron.ts +1 -0
  145. package/template/src/components/Router.native.ts +1 -0
  146. package/template/src/components/Router.sdk.ts +1 -0
  147. package/template/src/components/Router.ts +1 -0
  148. package/template/src/components/SdkApiContext.tsx +161 -0
  149. package/template/src/components/Settings.tsx +26 -95
  150. package/template/src/components/SettingsView.tsx +251 -56
  151. package/template/src/components/Share.tsx +305 -276
  152. package/template/src/components/StorageContext.tsx +30 -3
  153. package/template/src/components/ToastComponent.tsx +8 -0
  154. package/template/src/components/chat-messages/useChatMessages.tsx +100 -52
  155. package/template/src/components/chat-ui/useChatUIControls.tsx +76 -0
  156. package/template/src/components/common/Error.tsx +20 -6
  157. package/template/src/components/common/Logo.tsx +16 -15
  158. package/template/src/components/contexts/LiveStreamDataContext.tsx +16 -11
  159. package/template/src/components/contexts/VideoMeetingDataContext.tsx +41 -11
  160. package/template/src/components/contexts/WhiteboardContext.tsx +3 -3
  161. package/template/src/components/livestream/LiveStreamContext.tsx +284 -50
  162. package/template/src/components/livestream/Types.ts +39 -14
  163. package/template/src/components/livestream/index.ts +1 -0
  164. package/template/src/components/livestream/views/LiveStreamControls.tsx +9 -4
  165. package/template/src/components/participants/AllAudienceParticipants.tsx +102 -31
  166. package/template/src/components/participants/AllHostParticipants.tsx +106 -35
  167. package/template/src/components/participants/Participant.tsx +300 -0
  168. package/template/src/components/participants/ParticipantName.tsx +13 -7
  169. package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
  170. package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
  171. package/template/src/components/participants/UserActionMenuOptions.tsx +396 -0
  172. package/template/src/components/popups/InvitePopup.tsx +115 -0
  173. package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
  174. package/template/src/components/precall/LocalMute.tsx +84 -14
  175. package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
  176. package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
  177. package/template/src/components/precall/PermissionHelper.tsx +126 -0
  178. package/template/src/components/precall/PreCallSettings.tsx +52 -0
  179. package/template/src/components/precall/VideoPreview.native.tsx +51 -6
  180. package/template/src/components/precall/VideoPreview.tsx +164 -8
  181. package/template/src/components/precall/joinCallBtn.native.tsx +2 -2
  182. package/template/src/components/precall/joinCallBtn.tsx +17 -4
  183. package/template/src/components/precall/meetingTitle.tsx +17 -14
  184. package/template/src/components/precall/selectDevice.tsx +1 -21
  185. package/template/src/components/precall/textInput.tsx +34 -6
  186. package/template/src/components/precall/usePreCall.tsx +39 -1
  187. package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +34 -10
  188. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  189. package/template/src/components/styles.ts +42 -21
  190. package/template/src/components/useShareLink.tsx +19 -21
  191. package/template/src/components/useToast.tsx +41 -0
  192. package/template/src/components/useUserPreference.tsx +9 -6
  193. package/template/src/components/useVideoCall.tsx +84 -0
  194. package/template/src/language/default-labels/createScreenLabels.ts +3 -3
  195. package/template/src/language/default-labels/joinScreenLabels.ts +2 -2
  196. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  197. package/template/src/language/default-labels/shareLinkScreenLabels.ts +5 -5
  198. package/template/src/language/default-labels/videoCallScreenLabels.ts +5 -5
  199. package/template/src/pages/Authenticate.tsx +5 -15
  200. package/template/src/pages/Create.tsx +304 -191
  201. package/template/src/pages/Endcall.tsx +148 -0
  202. package/template/src/pages/Join.tsx +96 -70
  203. package/template/src/pages/VideoCall.tsx +179 -69
  204. package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
  205. package/template/src/pages/video-call/ActionSheet.tsx +226 -0
  206. package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
  207. package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
  208. package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
  209. package/template/src/pages/video-call/DefaultLayouts.ts +6 -6
  210. package/template/src/pages/video-call/NameWithMicIcon.tsx +93 -49
  211. package/template/src/pages/video-call/RenderComponent.tsx +6 -30
  212. package/template/src/pages/video-call/SidePanelHeader.tsx +186 -0
  213. package/template/src/pages/video-call/VideoCallMobileView.tsx +138 -0
  214. package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
  215. package/template/src/pages/video-call/VideoCallScreen.tsx +109 -66
  216. package/template/src/pages/video-call/VideoComponent.tsx +20 -4
  217. package/template/src/pages/video-call/VideoRenderer.tsx +227 -61
  218. package/template/src/pages/video-call/index.ts +35 -7
  219. package/template/src/rtm/RTMEngine.ts +8 -0
  220. package/template/src/rtm-events/constants.ts +3 -1
  221. package/template/src/rtm-events-api/Events.ts +5 -4
  222. package/template/src/rtm-events-api/LocalEvents.ts +6 -0
  223. package/template/src/rtm-events-api/types.ts +5 -5
  224. package/template/src/subComponents/ChatBubble.tsx +125 -84
  225. package/template/src/subComponents/ChatContainer.tsx +280 -93
  226. package/template/src/subComponents/ChatInput.ios.tsx +175 -0
  227. package/template/src/subComponents/ChatInput.tsx +72 -115
  228. package/template/src/subComponents/Checkbox.native.tsx +16 -5
  229. package/template/src/subComponents/Checkbox.tsx +2 -2
  230. package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
  231. package/template/src/subComponents/EndcallPopup.tsx +107 -0
  232. package/template/src/subComponents/FallbackLogo.tsx +122 -40
  233. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  234. package/template/src/subComponents/LayoutIconButton.tsx +201 -0
  235. package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
  236. package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
  237. package/template/src/subComponents/LocalAudioMute.tsx +119 -27
  238. package/template/src/subComponents/LocalEndCall.tsx +73 -35
  239. package/template/src/subComponents/LocalSwitchCamera.tsx +19 -32
  240. package/template/src/subComponents/LocalVideoMute.tsx +117 -27
  241. package/template/src/subComponents/Logo.tsx +3 -4
  242. package/template/src/subComponents/LogoutButton.tsx +1 -1
  243. package/template/src/subComponents/NetworkQualityPill.tsx +66 -68
  244. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  245. package/template/src/subComponents/Recording.tsx +28 -29
  246. package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
  247. package/template/src/subComponents/RemoteEndCall.tsx +8 -5
  248. package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
  249. package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
  250. package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
  251. package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
  252. package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
  253. package/template/src/subComponents/SelectDevice.tsx +404 -61
  254. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
  255. package/template/src/subComponents/SelectOAuth.tsx +9 -8
  256. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  257. package/template/src/subComponents/SidePanelHeader.tsx +112 -0
  258. package/template/src/subComponents/ToastConfig.tsx +150 -10
  259. package/template/src/subComponents/chat/ChatParticipants.tsx +188 -79
  260. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +97 -34
  261. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
  262. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +8 -8
  263. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
  264. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
  265. package/template/src/subComponents/recording/useRecording.tsx +81 -29
  266. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
  267. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +23 -12
  268. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +44 -19
  269. package/template/src/theme/index.ts +46 -0
  270. package/template/src/utils/PlatformWrapper.tsx +21 -0
  271. package/template/src/utils/SdkEvents.ts +23 -14
  272. package/template/src/utils/SdkMethodEvents.ts +81 -0
  273. package/template/src/utils/common.tsx +155 -1
  274. package/template/src/utils/hexadecimalTransparency.ts +108 -0
  275. package/template/src/utils/index.tsx +19 -0
  276. package/template/src/utils/isMobileOrTablet.ts +7 -2
  277. package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
  278. package/template/src/utils/useActiveSpeaker.ts +42 -0
  279. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
  280. package/template/src/utils/{useButtonTemplate.tsx → useFocus.tsx} +19 -16
  281. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  282. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  283. package/template/src/utils/useIsHandRaised.ts +13 -0
  284. package/template/src/utils/useIsPSTN.ts +3 -3
  285. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  286. package/template/src/utils/{useJoinMeeting.ts → useJoinRoom.ts} +27 -21
  287. package/template/src/utils/useMutePSTN.ts +2 -2
  288. package/template/src/utils/useMuteToggleLocal.ts +58 -5
  289. package/template/src/utils/useRemoteEndCall.ts +4 -4
  290. package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
  291. package/template/src/utils/useRemoteMute.ts +7 -7
  292. package/template/src/utils/useRemoteRequest.ts +84 -0
  293. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  294. package/template/src/utils/useSwitchCamera.tsx +19 -0
  295. package/template/src/utils/useToolbar.tsx +59 -0
  296. package/template/web/index.html +5 -0
  297. package/template/webpack.commons.js +13 -8
  298. package/template/webpack.rsdk.config.js +1 -2
  299. package/template/webpack.web.config.js +1 -0
  300. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  301. package/template/src/assets/icons.ts +0 -102
  302. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
  303. package/template/src/components/participants/MeParticipant.tsx +0 -38
  304. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
  305. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
@@ -12,14 +12,18 @@
12
12
  // @ts-nocheck
13
13
  import React, {useState, useContext, useEffect, useRef} from 'react';
14
14
  import RtmEngine from 'agora-react-native-rtm';
15
- import {PropsContext, useLocalUid} from '../../agora-rn-uikit';
15
+ import {
16
+ ContentInterface,
17
+ DispatchContext,
18
+ PropsContext,
19
+ useLocalUid,
20
+ } from '../../agora-rn-uikit';
16
21
  import ChatContext from './ChatContext';
17
- import {RtcContext} from '../../agora-rn-uikit';
18
22
  import {Platform} from 'react-native';
19
23
  import {backOff} from 'exponential-backoff';
20
24
  import {useString} from '../utils/useString';
21
- import {isAndroid, isWebInternal} from '../utils/common';
22
- import {useRender, useRtc} from 'customization-api';
25
+ import {isAndroid, isWeb, isWebInternal} from '../utils/common';
26
+ import {useContent} from 'customization-api';
23
27
  import {
24
28
  safeJsonParse,
25
29
  timeNow,
@@ -28,7 +32,7 @@ import {
28
32
  get32BitUid,
29
33
  } from '../rtm/utils';
30
34
  import {EventUtils, EventsQueue} from '../rtm-events';
31
- import {EventPersistLevel} from '../rtm-events-api';
35
+ import {PersistanceLevel} from '../rtm-events-api';
32
36
  import RTMEngine from '../rtm/RTMEngine';
33
37
  import {filterObject} from '../utils';
34
38
 
@@ -37,12 +41,13 @@ export enum UserType {
37
41
  }
38
42
 
39
43
  const RtmConfigure = (props: any) => {
44
+ const rtmInitTimstamp = new Date().getTime();
40
45
  const localUid = useLocalUid();
41
46
  const {callActive} = props;
42
47
  const {rtcProps} = useContext(PropsContext);
43
- const {RtcEngine, dispatch} = useRtc();
44
- const {renderList, activeUids} = useRender();
45
- const renderListRef = useRef({renderList: renderList});
48
+ const {dispatch} = useContext(DispatchContext);
49
+ const {defaultContent, activeUids} = useContent();
50
+ const defaultContentRef = useRef({defaultContent: defaultContent});
46
51
  const activeUidsRef = useRef({activeUids: activeUids});
47
52
 
48
53
  /**
@@ -54,8 +59,8 @@ const RtmConfigure = (props: any) => {
54
59
  }, [activeUids]);
55
60
 
56
61
  useEffect(() => {
57
- renderListRef.current.renderList = renderList;
58
- }, [renderList]);
62
+ defaultContentRef.current.defaultContent = defaultContent;
63
+ }, [defaultContent]);
59
64
 
60
65
  const [login, setLogin] = useState<boolean>(false);
61
66
 
@@ -76,21 +81,37 @@ const RtmConfigure = (props: any) => {
76
81
  React.useEffect(() => {
77
82
  setTotalOnlineUsers(
78
83
  Object.keys(
79
- filterObject(renderList, ([k, v]) => v?.type === 'rtc' && !v.offline),
84
+ filterObject(
85
+ defaultContent,
86
+ ([k, v]) => v?.type === 'rtc' && !v.offline,
87
+ ),
80
88
  ).length,
81
89
  );
82
- }, [renderList]);
90
+ }, [defaultContent]);
83
91
 
84
92
  React.useEffect(() => {
85
- const handBrowserClose = () => {
93
+ const handBrowserClose = (ev) => {
94
+ ev.preventDefault();
95
+ return (ev.returnValue = 'Are you sure you want to exit?');
96
+ };
97
+ const logoutRtm = () => {
86
98
  engine.current.leaveChannel(rtcProps.channel);
87
99
  };
88
100
 
89
101
  if (!isWebInternal()) return;
90
- window.addEventListener('beforeunload', handBrowserClose);
102
+ window.addEventListener(
103
+ 'beforeunload',
104
+ isWeb() ? handBrowserClose : () => {},
105
+ );
106
+
107
+ window.addEventListener('pagehide', logoutRtm);
91
108
  // cleanup this component
92
109
  return () => {
93
- window.removeEventListener('beforeunload', handBrowserClose);
110
+ window.removeEventListener(
111
+ 'beforeunload',
112
+ isWeb() ? handBrowserClose : () => {},
113
+ );
114
+ window.removeEventListener('pagehide', logoutRtm);
94
115
  };
95
116
  }, []);
96
117
 
@@ -100,6 +121,7 @@ const RtmConfigure = (props: any) => {
100
121
  uid: localUid.toString(),
101
122
  token: rtcProps.rtm,
102
123
  });
124
+ RTMEngine.getInstance().setLocalUID(localUid.toString());
103
125
  timerValueRef.current = 5;
104
126
  setAttribute();
105
127
  } catch (error) {
@@ -130,7 +152,12 @@ const RtmConfigure = (props: any) => {
130
152
 
131
153
  const joinChannel = async () => {
132
154
  try {
133
- await engine.current.joinChannel(rtcProps.channel);
155
+ if (RTMEngine.getInstance().channelUid !== rtcProps.channel) {
156
+ await engine.current.joinChannel(rtcProps.channel);
157
+ RTMEngine.getInstance().setChannelId(rtcProps.channel);
158
+ } else {
159
+ console.log('RTM already joined channel skipping');
160
+ }
134
161
  timerValueRef.current = 5;
135
162
  await getMembers();
136
163
  } catch (error) {
@@ -143,7 +170,7 @@ const RtmConfigure = (props: any) => {
143
170
 
144
171
  const updateRenderListState = (
145
172
  uid: number,
146
- data: Partial<RenderInterface>,
173
+ data: Partial<ContentInterface>,
147
174
  ) => {
148
175
  dispatch({type: 'UpdateRenderList', value: [uid, data]});
149
176
  };
@@ -196,6 +223,9 @@ const RtmConfigure = (props: any) => {
196
223
  screenUid: screenUid,
197
224
  //below thing for livestreaming
198
225
  type: 'rtc',
226
+ uid,
227
+ offline: false,
228
+ lastMessageTimeStamp: 0,
199
229
  };
200
230
  updateRenderListState(uid, userData);
201
231
  //end- updating user data in rtc
@@ -203,6 +233,7 @@ const RtmConfigure = (props: any) => {
203
233
  //start - updating screenshare data in rtc
204
234
  const screenShareUser = {
205
235
  type: UserType.ScreenShare,
236
+ parentUid: uid,
206
237
  };
207
238
  updateRenderListState(screenUid, screenShareUser);
208
239
  //end - updating screenshare data in rtc
@@ -242,7 +273,7 @@ const RtmConfigure = (props: any) => {
242
273
 
243
274
  const init = async () => {
244
275
  engine.current = RTMEngine.getInstance().engine;
245
- RTMEngine.getInstance().setLoginInfo(localUid.toString(), rtcProps.channel);
276
+ RTMEngine.getInstance();
246
277
 
247
278
  engine.current.on('connectionStateChanged', (evt: any) => {
248
279
  //console.log(evt);
@@ -286,6 +317,9 @@ const RtmConfigure = (props: any) => {
286
317
  screenUid: screenUid,
287
318
  //below thing for livestreaming
288
319
  type: 'rtc',
320
+ uid,
321
+ offline: false,
322
+ lastMessageTimeStamp: 0,
289
323
  };
290
324
  updateRenderListState(uid, userData);
291
325
  //end- updating user data in rtc
@@ -293,6 +327,7 @@ const RtmConfigure = (props: any) => {
293
327
  //start - updating screenshare data in rtc
294
328
  const screenShareUser = {
295
329
  type: UserType.ScreenShare,
330
+ parentUid: uid,
296
331
  };
297
332
  updateRenderListState(screenUid, screenShareUser);
298
333
  //end - updating screenshare data in rtc
@@ -383,7 +418,7 @@ const RtmConfigure = (props: any) => {
383
418
  console.log('CUSTOM_EVENT_API: inside eventDispatcher ', data);
384
419
  const {evt, value} = data;
385
420
  // Step 1: Set local attributes
386
- if (value?.persistLevel === EventPersistLevel.LEVEL3) {
421
+ if (value?.persistLevel === PersistanceLevel.Session) {
387
422
  const rtmAttribute = {key: evt, value: value};
388
423
  await engine.current.addOrUpdateLocalUserAttributes([rtmAttribute]);
389
424
  }
@@ -392,6 +427,17 @@ const RtmConfigure = (props: any) => {
392
427
  const {payload, persistLevel, source} = JSON.parse(value);
393
428
  console.log('CUSTOM_EVENT_API: emiting event..: ');
394
429
  EventUtils.emitEvent(evt, source, {payload, persistLevel, sender, ts});
430
+ // Because async gets evaluated in a different order when in an sdk
431
+ if (evt === 'name') {
432
+ setTimeout(() => {
433
+ EventUtils.emitEvent(evt, source, {
434
+ payload,
435
+ persistLevel,
436
+ sender,
437
+ ts,
438
+ });
439
+ }, 200);
440
+ }
395
441
  } catch (error) {
396
442
  console.log('CUSTOM_EVENT_API: error while emiting event: ', error);
397
443
  }
@@ -418,6 +464,7 @@ const RtmConfigure = (props: any) => {
418
464
  return (
419
465
  <ChatContext.Provider
420
466
  value={{
467
+ rtmInitTimstamp,
421
468
  hasUserJoinedRTM,
422
469
  engine: engine.current,
423
470
  localUid: localUid,
@@ -17,4 +17,5 @@ export {
17
17
  Redirect,
18
18
  useHistory,
19
19
  useParams,
20
+ Prompt,
20
21
  } from 'react-router-dom';
@@ -18,4 +18,5 @@ export {
18
18
  useHistory,
19
19
  useParams,
20
20
  BackButton,
21
+ Prompt,
21
22
  } from 'react-router-native';
@@ -17,4 +17,5 @@ export {
17
17
  Redirect,
18
18
  useHistory,
19
19
  useParams,
20
+ Prompt,
20
21
  } from 'react-router-dom';
@@ -17,4 +17,5 @@ export {
17
17
  Redirect,
18
18
  useHistory,
19
19
  useParams,
20
+ Prompt,
20
21
  } from 'react-router-dom';
@@ -0,0 +1,161 @@
1
+ import React, {createContext, useState, useEffect} from 'react';
2
+ import SDKMethodEventsManager, {
3
+ _InternalSDKMethodEventsMap,
4
+ } from '../utils/SdkMethodEvents';
5
+ import {
6
+ validateMeetingInfoData,
7
+ RoomInfoContextInterface,
8
+ } from './room-info/useRoomInfo';
9
+ import {CustomizationApiInterface} from 'customization-api';
10
+ import {Unsubscribe} from 'nanoevents';
11
+
12
+ type SdkApiContextInterface = {
13
+ join:
14
+ | {
15
+ initialized: true;
16
+ phrase: string;
17
+ meetingDetails?: Partial<RoomInfoContextInterface['data']>;
18
+ skipPrecall: boolean;
19
+ promise: {
20
+ res: Parameters<_InternalSDKMethodEventsMap['join']>[0];
21
+ rej: Parameters<_InternalSDKMethodEventsMap['join']>[1];
22
+ };
23
+ }
24
+ | {
25
+ initialized: false;
26
+ };
27
+ customize: {
28
+ customization?: CustomizationApiInterface;
29
+ promise?: {
30
+ res: Parameters<_InternalSDKMethodEventsMap['customize']>[0];
31
+ rej: Parameters<_InternalSDKMethodEventsMap['customize']>[1];
32
+ };
33
+ };
34
+ clearState: (key: keyof _InternalSDKMethodEventsMap) => void;
35
+ };
36
+
37
+ const SdkApiInitState: SdkApiContextInterface = {
38
+ join: {
39
+ initialized: false,
40
+ },
41
+ customize: {},
42
+ clearState: () => {},
43
+ };
44
+
45
+ export const SDK_MEETING_TAG = 'sdk-initiated-meeting';
46
+
47
+ export const SdkApiContext = createContext(SdkApiInitState);
48
+
49
+ let moduleEventsUnsub: any[] = [];
50
+
51
+ type commonEventHandlers = {
52
+ [K in keyof _InternalSDKMethodEventsMap]?: (
53
+ setter: (p: SdkApiContextInterface[K]) => void,
54
+ ) => Unsubscribe;
55
+ };
56
+
57
+ const commonEventHandlers: commonEventHandlers = {
58
+ join: (setter) => {
59
+ return SDKMethodEventsManager.on(
60
+ 'join',
61
+ (res, rej, roomDetail, skipPrecall) => {
62
+ if (typeof roomDetail === 'object') {
63
+ if (!validateMeetingInfoData(roomDetail)) {
64
+ rej(new Error('Invalid meeting details'));
65
+ return;
66
+ }
67
+ setter({
68
+ initialized: true,
69
+ phrase: SDK_MEETING_TAG,
70
+ meetingDetails: roomDetail,
71
+ skipPrecall,
72
+ promise: {res, rej},
73
+ });
74
+ } else if (
75
+ typeof roomDetail === 'string' &&
76
+ roomDetail.trim().length > 0
77
+ ) {
78
+ setter({
79
+ initialized: true,
80
+ phrase: roomDetail,
81
+ skipPrecall,
82
+ promise: {res, rej},
83
+ });
84
+ } else {
85
+ rej(new Error('Invalid room detail'));
86
+ }
87
+ },
88
+ );
89
+ },
90
+ customize: (setter) => {
91
+ return SDKMethodEventsManager.on('customize', (res, rej, customization) => {
92
+ setter({
93
+ customization: customization,
94
+ });
95
+ res();
96
+ });
97
+ },
98
+ };
99
+
100
+ const registerListener = () => {
101
+ moduleEventsUnsub = [
102
+ commonEventHandlers.customize((state) => {
103
+ SdkApiInitState.customize = state;
104
+ }),
105
+ commonEventHandlers.join((state) => {
106
+ SdkApiInitState.join = state;
107
+ }),
108
+ ];
109
+ };
110
+
111
+ const deRegisterListener = () => {
112
+ moduleEventsUnsub.forEach((v) => v());
113
+ };
114
+
115
+ const SdkApiContextProvider: React.FC = (props) => {
116
+ const [joinState, setJoinState] = useState(SdkApiInitState.join);
117
+ const [userCustomization, setUserCustomization] = useState(
118
+ SdkApiInitState.customize,
119
+ );
120
+
121
+ const clearState: SdkApiContextInterface['clearState'] = (key) => {
122
+ switch (key) {
123
+ case 'join':
124
+ setJoinState(SdkApiInitState.join);
125
+ return;
126
+ case 'customize':
127
+ setUserCustomization(SdkApiInitState.customize);
128
+ }
129
+ };
130
+
131
+ useEffect(() => {
132
+ deRegisterListener();
133
+ console.log('[SDKContext] join state is ', joinState);
134
+ const unsub = [
135
+ commonEventHandlers.customize((state) => {
136
+ setUserCustomization(state);
137
+ }),
138
+ commonEventHandlers.join((state) => {
139
+ setJoinState(state);
140
+ }),
141
+ ];
142
+
143
+ return () => {
144
+ unsub.forEach((v) => v());
145
+ registerListener();
146
+ };
147
+ }, []);
148
+
149
+ return (
150
+ <SdkApiContext.Provider
151
+ value={{
152
+ join: joinState,
153
+ customize: userCustomization,
154
+ clearState,
155
+ }}>
156
+ {props.children}
157
+ </SdkApiContext.Provider>
158
+ );
159
+ };
160
+
161
+ export default SdkApiContextProvider;
@@ -13,126 +13,62 @@ import React, {useContext} from 'react';
13
13
  import {StyleSheet, View} from 'react-native';
14
14
  import ColorContext from './ColorContext';
15
15
  import {SidePanelType} from '../subComponents/SidePanelEnum';
16
- import {BtnTemplate, BtnTemplateInterface} from '../../agora-rn-uikit';
17
16
  import {useSidePanel} from '../utils/useSidePanel';
18
- import {
19
- ButtonTemplateName,
20
- useButtonTemplate,
21
- } from '../utils/useButtonTemplate';
22
17
  import {useString} from '../utils/useString';
23
- import Styles from './styles';
18
+ import IconButton, {IconButtonProps} from '../atoms/IconButton';
24
19
 
25
20
  export interface SettingsIconButtonProps {
26
- buttonTemplateName?: ButtonTemplateName;
27
- render?: (
28
- onPress: () => void,
29
- isPanelActive: boolean,
30
- buttonTemplateName?: ButtonTemplateName,
31
- ) => JSX.Element;
21
+ render?: (onPress: () => void, isPanelActive: boolean) => JSX.Element;
32
22
  }
33
23
 
34
24
  const Settings = (props: SettingsIconButtonProps) => {
35
- const {primaryColor} = useContext(ColorContext);
36
25
  const {sidePanel, setSidePanel} = useSidePanel();
37
26
  //commented for v1 release
38
27
  //const settingsLabel = useString('settingsLabel')();
39
28
  const settingsLabel = 'Settings';
40
- const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
41
- const {buttonTemplateName = defaultTemplateValue} = props;
42
29
  const isPanelActive = sidePanel === SidePanelType.Settings;
43
30
  const onPress = () => {
44
31
  isPanelActive
45
32
  ? setSidePanel(SidePanelType.None)
46
33
  : setSidePanel(SidePanelType.Settings);
47
34
  };
48
- let btnTemplateProps: BtnTemplateInterface = {
35
+ let iconButtonProps: IconButtonProps = {
49
36
  onPress: onPress,
50
- name: isPanelActive ? 'settingsFilled' : 'settings',
37
+
38
+ iconProps: {
39
+ name: 'settings',
40
+ tintColor: isPanelActive
41
+ ? $config.PRIMARY_ACTION_TEXT_COLOR
42
+ : $config.SECONDARY_ACTION_COLOR,
43
+ iconBackgroundColor: isPanelActive
44
+ ? $config.PRIMARY_ACTION_BRAND_COLOR
45
+ : '',
46
+ },
47
+ btnTextProps: {
48
+ text: $config.ICON_TEXT ? settingsLabel : '',
49
+ textColor: $config.FONT_COLOR,
50
+ },
51
51
  };
52
- if (buttonTemplateName === ButtonTemplateName.bottomBar) {
53
- btnTemplateProps.btnText = settingsLabel;
54
- btnTemplateProps.style = Styles.localButtonWithoutBG as Object;
55
- } else {
56
- btnTemplateProps.style = [
57
- style.localButtonWithMatchingStyle,
58
- {borderColor: primaryColor},
59
- ];
60
- }
52
+
61
53
  return props?.render ? (
62
- props.render(onPress, isPanelActive, buttonTemplateName)
54
+ props.render(onPress, isPanelActive)
63
55
  ) : (
64
- <BtnTemplate {...btnTemplateProps} />
56
+ <>
57
+ <View>
58
+ <IconButton {...iconButtonProps} />
59
+ </View>
60
+ </>
65
61
  );
66
62
  };
67
63
 
68
64
  export const SettingsWithViewWrapper = (props: SettingsIconButtonProps) => {
69
- return (
70
- <View style={[style.navItem, style.navSmItem]}>
71
- <Settings {...props} />
72
- </View>
73
- );
65
+ return <Settings {...props} />;
74
66
  };
75
67
 
76
68
  const style = StyleSheet.create({
77
- navItem: {
78
- height: '100%',
79
- alignItems: 'center',
80
- position: 'relative',
81
- },
82
- navSmItem: {
83
- flexGrow: 0,
84
- flexShrink: 0,
85
- flexBasis: '15%',
86
- },
87
- main: {
88
- width: '50%',
89
- height: '80%',
90
- left: '25%',
91
- backgroundColor: $config.SECONDARY_FONT_COLOR,
92
- justifyContent: 'space-evenly',
93
- alignContent: 'center',
94
- paddingVertical: 5,
95
- flexDirection: 'column',
96
- },
97
- popupPickerHolder: {
98
- // height: '40%',
99
- justifyContent: 'space-around',
100
- paddingHorizontal: '8%',
101
- },
102
- buttonIcon: {
103
- // width: 30,
104
- // height: 30,
105
- width: '100%',
106
- height: '100%',
107
- tintColor: $config.PRIMARY_COLOR,
108
- },
109
- heading: {
110
- fontSize: 30,
111
- fontWeight: '700',
112
- color: $config.PRIMARY_FONT_COLOR,
113
- // marginBottom: 20,
114
- alignSelf: 'center',
115
- },
116
- primaryBtn: {
117
- width: '60%',
118
- alignSelf: 'center',
119
- backgroundColor: $config.PRIMARY_COLOR,
120
- maxWidth: 400,
121
- minHeight: 45,
122
- },
123
- primaryBtnText: {
124
- width: '100%',
125
- height: 45,
126
- lineHeight: 45,
127
- fontSize: 16,
128
- textAlign: 'center',
129
- textAlignVertical: 'center',
130
- color: $config.SECONDARY_FONT_COLOR,
131
- },
132
69
  localButton: {
133
70
  borderRadius: 2,
134
- borderColor: $config.PRIMARY_COLOR,
135
- // borderWidth: 1,
71
+ borderColor: $config.PRIMARY_ACTION_BRAND_COLOR,
136
72
  width: 30,
137
73
  height: 30,
138
74
  display: 'flex',
@@ -141,11 +77,6 @@ const style = StyleSheet.create({
141
77
  justifyContent: 'center',
142
78
  resizeMode: 'contain',
143
79
  },
144
- localButtonWithMatchingStyle: {
145
- width: '100%',
146
- height: '100%',
147
- resizeMode: 'contain',
148
- },
149
80
  });
150
81
 
151
82
  export default Settings;