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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +74 -7
  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 +97 -50
  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
@@ -1,86 +1,252 @@
1
- import React, {useContext} from 'react';
2
- import {View, StyleSheet} from 'react-native';
3
- import {RenderInterface, UidType} from '../../../agora-rn-uikit';
1
+ import React, {useState, useRef, useContext, useEffect} from 'react';
2
+ import {View, StyleSheet, Platform} from 'react-native';
3
+ import {
4
+ DispatchContext,
5
+ PropsContext,
6
+ ContentInterface,
7
+ UidType,
8
+ } from '../../../agora-rn-uikit';
4
9
  import ScreenShareNotice from '../../subComponents/ScreenShareNotice';
5
10
  import {MaxVideoView} from '../../../agora-rn-uikit';
6
11
  import FallbackLogo from '../../subComponents/FallbackLogo';
7
- import ColorContext from '../../components/ColorContext';
8
12
  import NetworkQualityPill from '../../subComponents/NetworkQualityPill';
9
13
  import NameWithMicIcon from './NameWithMicIcon';
14
+ import useActiveSpeaker from '../../utils/useActiveSpeaker';
15
+ import {useLayout, useContent} from 'customization-api';
16
+ import {getGridLayoutName, getPinnedLayoutName} from './DefaultLayouts';
17
+ import IconButton from '../../atoms/IconButton';
18
+ import UserActionMenuOptionsOptions from '../../components/participants/UserActionMenuOptions';
19
+ import {isMobileUA, isWebInternal} from '../../utils/common';
20
+ import ThemeConfig from '../../theme';
21
+ import {createHook} from 'customization-implementation';
10
22
 
11
23
  interface VideoRendererProps {
12
- user: RenderInterface;
24
+ user: ContentInterface;
25
+ isMax?: boolean;
13
26
  }
14
- const VideoRenderer: React.FC<VideoRendererProps> = ({user}) => {
15
- const {primaryColor} = useContext(ColorContext);
27
+ const VideoRenderer: React.FC<VideoRendererProps> = ({user, isMax = false}) => {
28
+ const {dispatch} = useContext(DispatchContext);
29
+ const activeSpeaker = useActiveSpeaker();
30
+ const {pinnedUid, activeUids} = useContent();
31
+ const isActiveSpeaker = activeSpeaker === user.uid;
32
+ const [isHovered, setIsHovered] = useState(false);
33
+ const {rtcProps} = useContext(PropsContext);
34
+ const {currentLayout} = useLayout();
35
+ const showReplacePin =
36
+ pinnedUid && !isMax && isHovered && currentLayout === getPinnedLayoutName();
37
+ const showPinForMe =
38
+ !pinnedUid &&
39
+ !isMax &&
40
+ isHovered &&
41
+ currentLayout === getPinnedLayoutName();
42
+ const [videoTileWidth, setVideoTileWidth] = useState(0);
43
+ const [avatarSize, setAvatarSize] = useState(100);
44
+ const videoMoreMenuRef = useRef(null);
45
+ const [actionMenuVisible, setActionMenuVisible] = React.useState(false);
16
46
  return (
17
- <View style={maxStyle.container}>
18
- <ScreenShareNotice uid={user.uid} />
19
- <NetworkQualityPill
20
- user={user}
21
- primaryColor={primaryColor}
22
- rootStyle={{
23
- marginLeft: 25,
24
- top: 8,
25
- right: 10,
26
- }}
27
- small
28
- />
29
- <MaxVideoView
30
- fallback={() => {
31
- return FallbackLogo(user?.name);
47
+ <>
48
+ <UserActionMenuOptionsOptions
49
+ actionMenuVisible={actionMenuVisible}
50
+ setActionMenuVisible={(flag) => {
51
+ //once user clicks action menu item -> hide the action menu and set parent isHovered false
52
+ if (!flag) {
53
+ setIsHovered(false);
54
+ }
55
+ setActionMenuVisible(flag);
32
56
  }}
33
57
  user={user}
34
- key={user.uid}
58
+ btnRef={videoMoreMenuRef}
59
+ from={'video-tile'}
35
60
  />
36
- <View style={maxStyle.nameHolder}>
37
- <NameWithMicIcon user={user} />
61
+ <PlatformWrapper isHovered={isHovered} setIsHovered={setIsHovered}>
62
+ <View
63
+ onLayout={({
64
+ nativeEvent: {
65
+ layout: {x, y, width, height},
66
+ },
67
+ }) => {
68
+ setVideoTileWidth(width);
69
+ setAvatarSize(Math.floor(width * 0.35));
70
+ }}
71
+ style={[
72
+ maxStyle.container,
73
+ isActiveSpeaker
74
+ ? maxStyle.activeContainerStyle
75
+ : user.video
76
+ ? maxStyle.noVideoStyle
77
+ : maxStyle.nonActiveContainerStyle,
78
+ ]}>
79
+ {!showReplacePin && !showPinForMe && (
80
+ <ScreenShareNotice uid={user.uid} isMax={isMax} />
81
+ )}
82
+ <NetworkQualityPill uid={user.uid} />
83
+ <MaxVideoView
84
+ fallback={() => {
85
+ return FallbackLogo(
86
+ user?.name,
87
+ isActiveSpeaker,
88
+ (showReplacePin || showPinForMe) && !isMobileUA()
89
+ ? true
90
+ : false,
91
+ isMax,
92
+ avatarSize,
93
+ );
94
+ }}
95
+ user={user}
96
+ containerStyle={{
97
+ width: '100%',
98
+ height: '100%',
99
+ }}
100
+ key={user.uid}
101
+ />
102
+ <VideoContainerProvider value={{videoTileWidth}}>
103
+ <NameWithMicIcon name={user.name} muted={!user.audio} />
104
+ </VideoContainerProvider>
105
+ {user.uid !== rtcProps?.screenShareUid &&
106
+ (isHovered || actionMenuVisible || isMobileUA()) ? (
107
+ <MoreMenu
108
+ videoMoreMenuRef={videoMoreMenuRef}
109
+ setActionMenuVisible={setActionMenuVisible}
110
+ />
111
+ ) : (
112
+ <></>
113
+ )}
114
+ {(showReplacePin || showPinForMe) && !isMobileUA() ? (
115
+ <IconButton
116
+ onPress={() => {
117
+ dispatch({type: 'UserPin', value: [user.uid]});
118
+ }}
119
+ containerStyle={maxStyle.replacePinContainer}
120
+ btnTextProps={{
121
+ text: showReplacePin ? 'Replace Pin' : 'Pin for me',
122
+ textColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
123
+ textStyle: {
124
+ marginTop: 0,
125
+ fontWeight: '700',
126
+ marginLeft: 6,
127
+ },
128
+ }}
129
+ iconProps={{
130
+ name: 'pin-filled',
131
+ iconSize: 20,
132
+ iconType: 'plain',
133
+ tintColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
134
+ }}
135
+ />
136
+ ) : (
137
+ <></>
138
+ )}
139
+ </View>
140
+ </PlatformWrapper>
141
+ </>
142
+ );
143
+ };
144
+
145
+ interface MoreMenuProps {
146
+ setActionMenuVisible: (f: boolean) => void;
147
+ videoMoreMenuRef: any;
148
+ }
149
+ const MoreMenu = ({setActionMenuVisible, videoMoreMenuRef}: MoreMenuProps) => {
150
+ const {activeUids} = useContent();
151
+ const {currentLayout} = useLayout();
152
+ const reduceSpace =
153
+ isMobileUA() &&
154
+ activeUids.length > 4 &&
155
+ currentLayout === getGridLayoutName();
156
+ return (
157
+ <>
158
+ <View
159
+ ref={videoMoreMenuRef}
160
+ collapsable={false}
161
+ style={{
162
+ position: 'absolute',
163
+ right: reduceSpace ? 2 : 8,
164
+ bottom: reduceSpace ? 2 : 8,
165
+ zIndex: 999,
166
+ }}>
167
+ <IconButton
168
+ onPress={() => {
169
+ setActionMenuVisible(true);
170
+ }}
171
+ iconProps={{
172
+ iconContainerStyle: {
173
+ padding: reduceSpace && activeUids.length > 12 ? 2 : 8,
174
+ backgroundColor: $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR,
175
+ },
176
+ name: 'more-menu',
177
+ iconSize: 20,
178
+ tintColor: $config.SECONDARY_ACTION_COLOR,
179
+ }}
180
+ />
38
181
  </View>
39
- </View>
182
+ </>
183
+ );
184
+ };
185
+
186
+ const PlatformWrapper = ({children, setIsHovered, isHovered}) => {
187
+ return isWebInternal() && !isMobileUA() ? (
188
+ <div
189
+ style={{width: '100%', height: '100%'}}
190
+ /**
191
+ * why onMouseOver is used instead of onMouseEnter
192
+ * when user clicks close icon the participant then video tile will expand and
193
+ * cursor will directly land on child elements. so onhover kabab menu icon is not displayed
194
+ *
195
+ * As per doc
196
+ * The mouseover event triggers when the mouse pointer enters the div element, and its child elements.
197
+ * The mouseenter event is only triggered when the mouse pointer enters the div element.
198
+ * */
199
+ onMouseOver={() => {
200
+ !isHovered && setIsHovered(true);
201
+ }}
202
+ onMouseLeave={() => {
203
+ setIsHovered(false);
204
+ }}>
205
+ {children}
206
+ </div>
207
+ ) : (
208
+ <>{children}</>
40
209
  );
41
210
  };
42
211
 
43
212
  const maxStyle = StyleSheet.create({
44
- container: {width: '100%', height: '100%'},
45
- width80: {width: '80%'},
46
- width100: {width: '100%'},
47
- flex2: {flex: 2},
48
- flex4: {flex: 4, backgroundColor: '#ffffff00'},
49
- flex1: {flex: 1},
50
- nameHolder: {
51
- marginTop: -25,
52
- backgroundColor: $config.SECONDARY_FONT_COLOR + 'aa',
53
- alignSelf: 'flex-end',
54
- paddingHorizontal: 8,
55
- height: 25,
56
- borderTopLeftRadius: 15,
57
- borderBottomRightRadius: 15,
213
+ replacePinContainer: {
214
+ zIndex: 999,
215
+ paddingHorizontal: 12,
216
+ paddingVertical: 10,
217
+ backgroundColor: $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR,
218
+ borderRadius: 8,
58
219
  flexDirection: 'row',
59
- zIndex: 5,
60
- maxWidth: '100%',
220
+ position: 'absolute',
221
+ left: 0,
222
+ right: 0,
223
+ top: 0,
224
+ bottom: 0,
225
+ margin: 'auto',
226
+ maxWidth: 120,
227
+ maxHeight: 32,
228
+ },
229
+ container: {
230
+ width: '100%',
231
+ height: '100%',
232
+ position: 'relative',
233
+ overflow: 'hidden',
234
+ borderRadius: ThemeConfig.BorderRadius.small,
235
+ borderWidth: 2,
61
236
  },
62
- name: {
63
- color: $config.PRIMARY_FONT_COLOR,
64
- lineHeight: 25,
65
- fontWeight: '700',
66
- flexShrink: 1,
237
+ activeContainerStyle: {
238
+ borderColor: $config.PRIMARY_ACTION_BRAND_COLOR,
67
239
  },
68
- MicBackdrop: {
69
- width: 20,
70
- height: 20,
71
- borderRadius: 15,
72
- marginHorizontal: 10,
73
- backgroundColor: $config.SECONDARY_FONT_COLOR,
74
- display: 'flex',
75
- alignSelf: 'center',
76
- justifyContent: 'center',
240
+ nonActiveContainerStyle: {
241
+ borderColor: 'transparent',
77
242
  },
78
- MicIcon: {
79
- width: '80%',
80
- height: '80%',
81
- alignSelf: 'center',
82
- resizeMode: 'contain',
243
+ noVideoStyle: {
244
+ borderColor: 'transparent',
83
245
  },
84
246
  });
85
247
 
248
+ const VideoContainerContext = React.createContext({videoTileWidth: 0});
249
+ const VideoContainerProvider = VideoContainerContext.Provider;
250
+ export const useVideoContainer = createHook(VideoContainerContext);
251
+
86
252
  export default VideoRenderer;
@@ -1,20 +1,48 @@
1
1
  import ParticipantsView from '../../components/ParticipantsView';
2
2
  import Chat from '../../components/Chat';
3
- import Navbar, {NavBarComponentsArray} from '../../components/Navbar';
3
+ import Navbar, {
4
+ ParticipantsCountView,
5
+ ParticipantsIconButton,
6
+ ChatIconButton,
7
+ SettingsIconButton,
8
+ } from '../../components/Navbar';
9
+ import CopyJoinInfo from '../../subComponents/CopyJoinInfo';
10
+ import LayoutIconButton from '../../subComponents/LayoutIconButton';
4
11
  import SettingsView from '../../components/SettingsView';
5
- import Controls, {ControlsComponentsArray} from '../../components/Controls';
12
+ import Controls from '../../components/Controls';
13
+ import LiveStreamControls from '../../components/livestream/views/LiveStreamControls';
14
+ import LocalEndcall from '../../subComponents/LocalEndCall';
15
+ import LocalAudioMute from '../../subComponents/LocalAudioMute';
16
+ import LocalVideoMute from '../../subComponents/LocalVideoMute';
17
+ import Recording from '../../subComponents/Recording';
18
+ import LocalSwitchCamera from '../../subComponents/LocalSwitchCamera';
19
+ import ScreenshareButton from '../../subComponents/screenshare/ScreenshareButton';
20
+
6
21
  import ChatBubble from '../../subComponents/ChatBubble';
7
- import {ChatTextInput, ChatSendButton} from '../../subComponents/ChatInput';
22
+ import {ChatInput} from '../../subComponents/ChatInput';
8
23
 
24
+ const ToolbarComponents = {
25
+ CopyJoinInfo,
26
+ ParticipantsCountView,
27
+ ParticipantsIconButton,
28
+ ChatIconButton,
29
+ LayoutIconButton,
30
+ SettingsIconButton,
31
+ LocalAudioMute,
32
+ LocalVideoMute,
33
+ LocalSwitchCamera,
34
+ ScreenshareButton,
35
+ Recording,
36
+ LocalEndcall,
37
+ LiveStreamControls,
38
+ };
9
39
  export {
10
40
  ParticipantsView,
11
41
  Chat,
12
42
  Navbar,
13
- NavBarComponentsArray,
14
43
  SettingsView,
15
44
  Controls,
16
- ControlsComponentsArray,
17
45
  ChatBubble,
18
- ChatTextInput,
19
- ChatSendButton,
46
+ ChatInput,
47
+ ToolbarComponents,
20
48
  };
@@ -47,6 +47,12 @@ class RTMEngine {
47
47
 
48
48
  return RTMEngine._instance;
49
49
  }
50
+ setLocalUID(localUID: string) {
51
+ this.localUID = localUID;
52
+ }
53
+ setChannelId(channelID: string) {
54
+ this.channelId = channelID;
55
+ }
50
56
 
51
57
  setLoginInfo(localUID: string, channelID: string) {
52
58
  this.localUID = localUID;
@@ -62,6 +68,8 @@ class RTMEngine {
62
68
  try {
63
69
  this.destroyClientInstance();
64
70
  RTMEngine._instance = null;
71
+ this.localUID = '';
72
+ this.channelId = '';
65
73
  } catch (error) {
66
74
  console.log('Error destroying instance error: ', error);
67
75
  }
@@ -2,6 +2,7 @@
2
2
  // 1. RECORDING
3
3
  const RECORDING_STARTED = 'RECORDING_STARTED';
4
4
  const RECORDING_STOPPED = 'RECORDING_STOPPED';
5
+ const RECORDING_STOP_REQUEST = 'RECORDING_STOP_REQUEST';
5
6
  // 2. SCREENSHARE
6
7
  const SCREENSHARE_STARTED = 'SCREENSHARE_STARTED';
7
8
  const SCREENSHARE_STOPPED = 'SCREENSHARE_STOPPED';
@@ -9,6 +10,7 @@ const SCREENSHARE_STOPPED = 'SCREENSHARE_STOPPED';
9
10
  const EventActions = {
10
11
  RECORDING_STARTED,
11
12
  RECORDING_STOPPED,
13
+ RECORDING_STOP_REQUEST,
12
14
  SCREENSHARE_STARTED,
13
15
  SCREENSHARE_STOPPED,
14
16
  };
@@ -28,7 +30,7 @@ const PUBLIC_CHAT_MESSAGE = 'PUBLIC_CHAT_MESSAGE';
28
30
  const PRIVATE_CHAT_MESSAGE = 'PRIVATE_CHAT_MESSAGE';
29
31
  // 4. NAME ATTRIBUTE
30
32
  const NAME_ATTRIBUTE = 'name';
31
- // 5. VIDEO MEETING ROLE
33
+ // 5. VIDEO ROOM ROLE
32
34
  const VIDEO_MEETING_HOST = 'VIDEO_MEETING_HOST';
33
35
  const VIDEO_MEETING_ATTENDEE = 'VIDEO_MEETING_ATTENDEE';
34
36
  const EventNames = {
@@ -18,7 +18,7 @@ import {
18
18
  ReceiverUid,
19
19
  EventCallback,
20
20
  EventSource,
21
- EventPersistLevel,
21
+ PersistanceLevel,
22
22
  } from './types';
23
23
  import {adjustUID} from '../rtm/utils';
24
24
 
@@ -165,6 +165,7 @@ class Events {
165
165
  if (!this._validateEvt(eventName) || !this._validateListener(listener))
166
166
  return;
167
167
  EventUtils.addListener(eventName, listener, this.source);
168
+ console.log('CUSTOM_EVENT_API event listener registered', eventName);
168
169
  return () => {
169
170
  EventUtils.removeListener(eventName, listener, this.source);
170
171
  };
@@ -218,7 +219,7 @@ class Events {
218
219
  send = async (
219
220
  eventName: string = '',
220
221
  payload: string = '',
221
- persistLevel: EventPersistLevel = EventPersistLevel.LEVEL1,
222
+ persistLevel: PersistanceLevel = PersistanceLevel.None,
222
223
  receiver: ReceiverUid = -1,
223
224
  ) => {
224
225
  if (!this._validateEvt(eventName)) return;
@@ -235,8 +236,8 @@ class Events {
235
236
  };
236
237
 
237
238
  if (
238
- persistLevel === EventPersistLevel.LEVEL2 ||
239
- persistLevel === EventPersistLevel.LEVEL3
239
+ persistLevel === PersistanceLevel.Sender ||
240
+ persistLevel === PersistanceLevel.Session
240
241
  ) {
241
242
  try {
242
243
  await this._persist(eventName, persistValue);
@@ -0,0 +1,6 @@
1
+ import {EventEmitter} from 'events';
2
+ export enum LocalEventsEnum {
3
+ ACTIVE_SPEAKER = 'ACTIVE_SPEAKER',
4
+ }
5
+ const LocalEventEmitter = new EventEmitter();
6
+ export default LocalEventEmitter;
@@ -8,14 +8,14 @@ export enum EventSource {
8
8
  core = 'core',
9
9
  fpe = 'fpe',
10
10
  }
11
- export enum EventPersistLevel {
12
- 'LEVEL1' = 1,
13
- 'LEVEL2',
14
- 'LEVEL3',
11
+ export enum PersistanceLevel {
12
+ 'None' = 1,
13
+ 'Sender',
14
+ 'Session',
15
15
  }
16
16
  interface EventCallbackPayload {
17
17
  payload: string;
18
- persistLevel: EventPersistLevel;
18
+ persistLevel: PersistanceLevel;
19
19
  sender: UidType;
20
20
  ts: number;
21
21
  }