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
@@ -10,21 +10,24 @@
10
10
  *********************************************
11
11
  */
12
12
  // @ts-nocheck
13
- import React, {useState, useContext, useEffect} from 'react';
14
- import {View, StyleSheet, Text} from 'react-native';
13
+ import React, {useState, useContext, useEffect, useRef} from 'react';
14
+ import {View, StyleSheet, Text, useWindowDimensions} from 'react-native';
15
15
  import {
16
16
  RtcConfigure,
17
17
  PropsProvider,
18
18
  ClientRole,
19
19
  ChannelProfile,
20
20
  LocalUserContext,
21
+ UidType,
22
+ CallbacksInterface,
23
+ ToggleState,
21
24
  } from '../../agora-rn-uikit';
22
25
  import styles from '../components/styles';
23
26
  import {useParams, useHistory} from '../components/Router';
24
27
  import RtmConfigure from '../components/RTMConfigure';
25
28
  import DeviceConfigure from '../components/DeviceConfigure';
26
29
  import Logo from '../subComponents/Logo';
27
- import {useHasBrandLogo, isArray} from '../utils/common';
30
+ import {useHasBrandLogo, isArray, isMobileUA} from '../utils/common';
28
31
  import {SidePanelType} from '../subComponents/SidePanelEnum';
29
32
  import {videoView} from '../../theme.json';
30
33
  import {LiveStreamContextProvider} from '../components/livestream';
@@ -37,14 +40,17 @@ import Precall from '../components/Precall';
37
40
  import {useString} from '../utils/useString';
38
41
  import useLayoutsData from './video-call/useLayoutsData';
39
42
  import {RecordingProvider} from '../subComponents/recording/useRecording';
40
- import useJoinMeeting from '../utils/useJoinMeeting';
41
- import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
43
+ import useJoinRoom from '../utils/useJoinRoom';
44
+ import {
45
+ useRoomInfo,
46
+ RoomInfoDefaultValue,
47
+ validateMeetingInfoData,
48
+ } from '../components/room-info/useRoomInfo';
42
49
  import {SidePanelProvider} from '../utils/useSidePanel';
43
50
  import VideoCallScreen from './video-call/VideoCallScreen';
44
51
  import {NetworkQualityProvider} from '../components/NetworkQualityContext';
45
- import CustomUserContextHolder from './video-call/CustomUserContextHolder';
46
52
  import {ChatNotificationProvider} from '../components/chat-notification/useChatNotification';
47
- import {ChatUIControlProvider} from '../components/chat-ui/useChatUIControl';
53
+ import {ChatUIControlsProvider} from '../components/chat-ui/useChatUIControls';
48
54
  import {ChatMessagesProvider} from '../components/chat-messages/useChatMessages';
49
55
  import {ScreenShareProvider} from '../components/contexts/ScreenShareContext';
50
56
  import {LiveStreamDataProvider} from '../components/contexts/LiveStreamDataContext';
@@ -54,6 +60,12 @@ import {useWakeLock} from '../components/useWakeLock';
54
60
  import SDKEvents from '../utils/SdkEvents';
55
61
  import {UserPreferenceProvider} from '../components/useUserPreference';
56
62
  import EventsConfigure from '../components/EventsConfigure';
63
+ import PermissionHelper from '../components/precall/PermissionHelper';
64
+ import {currentFocus, FocusProvider} from '../utils/useFocus';
65
+ import {VideoCallProvider} from '../components/useVideoCall';
66
+ import {SdkApiContext, SDK_MEETING_TAG} from '../components/SdkApiContext';
67
+ import isSDK from '../utils/isSDK';
68
+ import {useSetRoomInfo} from '../components/room-info/useSetRoomInfo';
57
69
 
58
70
  enum RnEncryptionEnum {
59
71
  /**
@@ -99,6 +111,9 @@ const VideoCall: React.FC = () => {
99
111
  const [isRecordingActive, setRecordingActive] = useState(false);
100
112
  const [queryComplete, setQueryComplete] = useState(false);
101
113
  const [sidePanel, setSidePanel] = useState<SidePanelType>(SidePanelType.None);
114
+ const [currentFocus, setFocus] = useState<currentFocus>({
115
+ editName: false,
116
+ });
102
117
  const {phrase} = useParams<{phrase: string}>();
103
118
  // commented for v1 release
104
119
  //const lifecycle = useCustomization((data) => data.lifecycle);
@@ -118,13 +133,21 @@ const VideoCall: React.FC = () => {
118
133
  role: ClientRole.Broadcaster,
119
134
  geoFencing: $config.GEO_FENCING,
120
135
  audioRoom: $config.AUDIO_ROOM,
136
+ activeSpeaker: $config.ACTIVE_SPEAKER,
121
137
  });
122
138
 
123
- const useJoin = useJoinMeeting();
139
+ const {join: SdkJoinState, clearState} = useContext(SdkApiContext);
140
+ const history = useHistory();
141
+ const currentMeetingPhrase = useRef(history.location.pathname);
142
+
143
+ const useJoin = useJoinRoom();
144
+ const {setRoomInfo} = useSetRoomInfo();
145
+ const {isJoinDataFetched, data} = useRoomInfo();
124
146
 
125
147
  React.useEffect(() => {
126
148
  return () => {
127
149
  console.log('Videocall unmounted');
150
+ setRoomInfo(RoomInfoDefaultValue);
128
151
  if (awake) {
129
152
  release();
130
153
  }
@@ -132,17 +155,56 @@ const VideoCall: React.FC = () => {
132
155
  }, []);
133
156
 
134
157
  useEffect(() => {
135
- useJoin(phrase)
136
- .then(() => {})
137
- .catch((error) => {
138
- setGlobalErrorMessage(error);
139
- });
158
+ if (!SdkJoinState.phrase) {
159
+ useJoin(phrase)
160
+ .then(() => {})
161
+ .catch((error) => {
162
+ setGlobalErrorMessage(error);
163
+ history.push('/');
164
+ });
165
+ }
140
166
  }, []);
141
167
 
142
- const {isJoinDataFetched, data} = useMeetingInfo();
168
+ useEffect(() => {
169
+ if (!isSDK() || !SdkJoinState.initialized) {
170
+ return;
171
+ }
172
+ const {
173
+ phrase: sdkMeetingPhrase,
174
+ meetingDetails: sdkMeetingDetails,
175
+ skipPrecall,
176
+ promise,
177
+ } = SdkJoinState;
178
+
179
+ const sdkMeetingPath = `/${sdkMeetingPhrase}`;
180
+
181
+ setCallActive(skipPrecall);
182
+
183
+ if (sdkMeetingDetails) {
184
+ setQueryComplete(false);
185
+ setRoomInfo((roomInfo) => {
186
+ return {
187
+ isJoinDataFetched: true,
188
+ data: {
189
+ ...roomInfo.data,
190
+ ...sdkMeetingDetails,
191
+ },
192
+ };
193
+ });
194
+ } else if (sdkMeetingPhrase) {
195
+ setQueryComplete(false);
196
+ currentMeetingPhrase.current = sdkMeetingPath;
197
+ useJoin(sdkMeetingPhrase).catch((error) => {
198
+ setGlobalErrorMessage(error);
199
+ history.push('/');
200
+ currentMeetingPhrase.current = '';
201
+ promise.rej(error);
202
+ });
203
+ }
204
+ }, [SdkJoinState]);
143
205
 
144
206
  React.useEffect(() => {
145
- if (isJoinDataFetched === true) {
207
+ if (isJoinDataFetched === true && !queryComplete) {
146
208
  setRtcProps({
147
209
  appId: $config.APP_ID,
148
210
  channel: data.channel,
@@ -163,25 +225,60 @@ const VideoCall: React.FC = () => {
163
225
  role: data.isHost ? ClientRole.Broadcaster : ClientRole.Audience,
164
226
  geoFencing: $config.GEO_FENCING,
165
227
  audioRoom: $config.AUDIO_ROOM,
228
+ activeSpeaker: $config.ACTIVE_SPEAKER,
166
229
  });
167
230
 
168
231
  // 1. Store the display name from API
169
232
  // if (data.username) {
170
233
  // setUsername(data.username);
171
234
  // }
172
- queryComplete ? {} : setQueryComplete(isJoinDataFetched);
235
+ setQueryComplete(true);
173
236
  }
174
- }, [isJoinDataFetched]);
237
+ }, [isJoinDataFetched, data, queryComplete]);
175
238
 
176
- const history = useHistory();
177
- const callbacks = {
178
- EndCall: () =>
239
+ const callbacks: CallbacksInterface = {
240
+ // RtcLeft: () => {},
241
+ // RtcJoined: () => {
242
+ // if (SdkJoinState.phrase && SdkJoinState.skipPrecall) {
243
+ // SdkJoinState.promise?.res();
244
+ // }
245
+ // },
246
+ EndCall: () => {
247
+ clearState('join');
179
248
  setTimeout(() => {
180
249
  SDKEvents.emit('leave');
181
250
  history.push('/');
182
- }, 0),
251
+ }, 0);
252
+ },
253
+ UserJoined: (uid: UidType) => {
254
+ console.log('UIKIT Callback: UserJoined', uid);
255
+ SDKEvents.emit('rtc-user-joined', uid);
256
+ },
257
+ UserOffline: (uid: UidType) => {
258
+ console.log('UIKIT Callback: UserOffline', uid);
259
+ SDKEvents.emit('rtc-user-joined', uid);
260
+ },
261
+ RemoteAudioStateChanged: (uid: UidType, status: 0 | 2) => {
262
+ console.log('UIKIT Callback: RemoteAudioStateChanged', uid, status);
263
+ if (status === 0) {
264
+ SDKEvents.emit('rtc-user-unpublished', uid, 'audio');
265
+ } else {
266
+ SDKEvents.emit('rtc-user-published', uid, 'audio');
267
+ }
268
+ },
269
+ RemoteVideoStateChanged: (uid: UidType, status: 0 | 2) => {
270
+ console.log('UIKIT Callback: RemoteVideoStateChanged', uid, status);
271
+ if (status === 0) {
272
+ SDKEvents.emit('rtc-user-unpublished', uid, 'video');
273
+ } else {
274
+ SDKEvents.emit('rtc-user-published', uid, 'video');
275
+ }
276
+ },
183
277
  };
184
-
278
+ const [isCameraAvailable, setCameraAvailable] = useState(false);
279
+ const [isMicAvailable, setMicAvailable] = useState(false);
280
+ const [isSpeakerAvailable, setSpeakerAvailable] = useState(false);
281
+ const [isPermissionRequested, setIsPermissionRequested] = useState(false);
185
282
  return (
186
283
  <>
187
284
  {queryComplete ? (
@@ -203,52 +300,65 @@ const VideoCall: React.FC = () => {
203
300
  }}>
204
301
  <RtcConfigure>
205
302
  <DeviceConfigure>
206
- <ChatUIControlProvider>
303
+ <ChatUIControlsProvider>
207
304
  <ChatNotificationProvider>
208
305
  <LayoutProvider
209
306
  value={{
210
307
  currentLayout,
211
308
  setLayout,
212
309
  }}>
213
- <SidePanelProvider
214
- value={{
215
- sidePanel,
216
- setSidePanel,
217
- }}>
218
- <ChatMessagesProvider>
219
- <ScreenShareProvider>
220
- <RtmConfigure
221
- setRecordingActive={setRecordingActive}
222
- callActive={callActive}>
223
- <UserPreferenceProvider>
224
- <EventsConfigure>
225
- <WhiteboardProvider>
226
- <RecordingProvider
227
- value={{
228
- setRecordingActive,
229
- isRecordingActive,
230
- }}>
231
- <ScreenshareConfigure>
232
- <LiveStreamContextProvider
233
- value={{
234
- setRtcProps,
235
- rtcProps,
236
- callActive,
237
- }}>
238
- <LiveStreamDataProvider>
239
- <LocalUserContext
240
- localUid={rtcProps?.uid || 0}>
241
- <CustomUserContextHolder>
310
+ <FocusProvider value={{currentFocus, setFocus}}>
311
+ <SidePanelProvider
312
+ value={{
313
+ sidePanel,
314
+ setSidePanel,
315
+ }}>
316
+ <ChatMessagesProvider>
317
+ <ScreenShareProvider>
318
+ <RtmConfigure
319
+ setRecordingActive={setRecordingActive}
320
+ callActive={callActive}>
321
+ <UserPreferenceProvider>
322
+ <EventsConfigure>
323
+ <WhiteboardProvider>
324
+ <RecordingProvider
325
+ value={{
326
+ setRecordingActive,
327
+ isRecordingActive,
328
+ }}>
329
+ <ScreenshareConfigure>
330
+ <LiveStreamContextProvider
331
+ value={{
332
+ setRtcProps,
333
+ rtcProps,
334
+ callActive,
335
+ }}>
336
+ <LiveStreamDataProvider>
337
+ <LocalUserContext
338
+ localUid={rtcProps?.uid}>
242
339
  <NetworkQualityProvider>
340
+ {!isMobileUA() && (
341
+ <PermissionHelper />
342
+ )}
243
343
  {callActive ? (
244
344
  <VideoMeetingDataProvider>
245
- <VideoCallScreen />
345
+ <VideoCallProvider>
346
+ <VideoCallScreen />
347
+ </VideoCallProvider>
246
348
  </VideoMeetingDataProvider>
247
349
  ) : $config.PRECALL ? (
248
350
  <PreCallProvider
249
351
  value={{
250
352
  callActive,
251
353
  setCallActive,
354
+ isCameraAvailable,
355
+ isMicAvailable,
356
+ setCameraAvailable,
357
+ setMicAvailable,
358
+ isPermissionRequested,
359
+ setIsPermissionRequested,
360
+ isSpeakerAvailable,
361
+ setSpeakerAvailable,
252
362
  }}>
253
363
  <Precall />
254
364
  </PreCallProvider>
@@ -256,22 +366,22 @@ const VideoCall: React.FC = () => {
256
366
  <></>
257
367
  )}
258
368
  </NetworkQualityProvider>
259
- </CustomUserContextHolder>
260
- </LocalUserContext>
261
- </LiveStreamDataProvider>
262
- </LiveStreamContextProvider>
263
- </ScreenshareConfigure>
264
- </RecordingProvider>
265
- </WhiteboardProvider>
266
- </EventsConfigure>
267
- </UserPreferenceProvider>
268
- </RtmConfigure>
269
- </ScreenShareProvider>
270
- </ChatMessagesProvider>
271
- </SidePanelProvider>
369
+ </LocalUserContext>
370
+ </LiveStreamDataProvider>
371
+ </LiveStreamContextProvider>
372
+ </ScreenshareConfigure>
373
+ </RecordingProvider>
374
+ </WhiteboardProvider>
375
+ </EventsConfigure>
376
+ </UserPreferenceProvider>
377
+ </RtmConfigure>
378
+ </ScreenShareProvider>
379
+ </ChatMessagesProvider>
380
+ </SidePanelProvider>
381
+ </FocusProvider>
272
382
  </LayoutProvider>
273
383
  </ChatNotificationProvider>
274
- </ChatUIControlProvider>
384
+ </ChatUIControlsProvider>
275
385
  </DeviceConfigure>
276
386
  </RtcConfigure>
277
387
  </PropsProvider>
@@ -302,7 +412,7 @@ const styleProps = {
302
412
  recording: styles.localButton,
303
413
  screenshare: styles.localButton,
304
414
  },
305
- theme: $config.PRIMARY_COLOR,
415
+ theme: $config.PRIMARY_ACTION_BRAND_COLOR,
306
416
  remoteBtnStyles: {
307
417
  muteRemoteAudio: styles.remoteButton,
308
418
  muteRemoteVideo: styles.remoteButton,
@@ -330,7 +440,7 @@ const style = StyleSheet.create({
330
440
  justifyContent: 'center',
331
441
  marginBottom: 30,
332
442
  },
333
- loaderText: {fontWeight: '500', color: $config.PRIMARY_FONT_COLOR},
443
+ loaderText: {fontWeight: '500', color: $config.FONT_COLOR},
334
444
  });
335
445
 
336
446
  export default VideoCall;
@@ -0,0 +1,215 @@
1
+ import {
2
+ StyleSheet,
3
+ Text,
4
+ TouchableOpacity,
5
+ View,
6
+ Modal,
7
+ TouchableWithoutFeedback,
8
+ } from 'react-native';
9
+ import React, {useCallback, useRef, useState} from 'react';
10
+ import BottomSheet, {
11
+ BottomSheetModal,
12
+ BottomSheetModalProvider,
13
+ BottomSheetView,
14
+ } from '@gorhom/bottom-sheet';
15
+ import KeyboardManager from 'react-native-keyboard-manager';
16
+
17
+ import Chat from '../../components/Chat';
18
+ import ParticipantView from '../../components/ParticipantsView';
19
+ import SettingsView from '../../components/SettingsView';
20
+ import ActionSheetContent from './ActionSheetContent';
21
+ import {SidePanelType} from '../../subComponents/SidePanelEnum';
22
+ import {useSidePanel} from '../../utils/useSidePanel';
23
+ import {isIOS} from '../../utils/common';
24
+ import ActionSheetHandle from './ActionSheetHandle';
25
+ import Spacer from '../../atoms/Spacer';
26
+
27
+ //topbar btn template is used to show icons without label text (as in desktop : bottomBar)
28
+
29
+ const ActionSheet = () => {
30
+ const [isExpanded, setIsExpanded] = React.useState(false);
31
+ const {sidePanel, setSidePanel} = useSidePanel();
32
+ const bottomSheetRef = useRef<BottomSheetModal>(null);
33
+ const chatSheetRef = useRef<BottomSheetModal>(null);
34
+ const participantsSheetRef = useRef<BottomSheetModal>(null);
35
+ const settingsSheetRef = useRef<BottomSheetModal>(null);
36
+
37
+ // callbacks
38
+ const handleSheetChanges = useCallback((index: number) => {
39
+ bottomSheetRef.current?.snapToIndex(index);
40
+ index === 0 ? setIsExpanded(false) : setIsExpanded(true);
41
+ }, []);
42
+
43
+ React.useEffect(() => {
44
+ bottomSheetRef?.current.present();
45
+ }, []);
46
+
47
+ // updating on sidepanel changes
48
+ React.useEffect(() => {
49
+ switch (sidePanel) {
50
+ case SidePanelType.Participants: {
51
+ participantsSheetRef?.current.present();
52
+ break;
53
+ }
54
+ case SidePanelType.Chat: {
55
+ chatSheetRef?.current.present();
56
+ break;
57
+ }
58
+ case SidePanelType.Settings: {
59
+ settingsSheetRef?.current.present();
60
+ break;
61
+ }
62
+ case SidePanelType.None: {
63
+ chatSheetRef?.current.close();
64
+ participantsSheetRef?.current.close();
65
+ settingsSheetRef?.current.close();
66
+ handleSheetChanges(0);
67
+ }
68
+ default:
69
+ bottomSheetRef?.current.present();
70
+ }
71
+ }, [sidePanel]);
72
+
73
+ React.useEffect(() => {
74
+ if (isIOS()) {
75
+ KeyboardManager.setEnable(false);
76
+ return () => KeyboardManager.setEnable(true);
77
+ }
78
+ }, []);
79
+
80
+ function onDismiss() {
81
+ setSidePanel(SidePanelType.None);
82
+ }
83
+
84
+ return (
85
+ <BottomSheetModalProvider>
86
+ {isExpanded && (
87
+ <TouchableWithoutFeedback onPress={() => handleSheetChanges(0)}>
88
+ <View style={[styles.backDrop]} />
89
+ </TouchableWithoutFeedback>
90
+ )}
91
+ {/* Controls Action Sheet*/}
92
+ <BottomSheetModal
93
+ snapPoints={[100, 350]}
94
+ ref={bottomSheetRef}
95
+ onChange={handleSheetChanges}
96
+ enablePanDownToClose={false}
97
+ style={styles.container}
98
+ backgroundStyle={styles.backgroundStyle}
99
+ stackBehavior="push"
100
+ handleComponent={() => (
101
+ <>
102
+ <ActionSheetHandle sidePanel={SidePanelType.None} />
103
+ <Spacer size={12} />
104
+ </>
105
+ )}
106
+ handleIndicatorStyle={styles.handleIndicatorStyle}>
107
+ <BottomSheetView>
108
+ <ActionSheetContent
109
+ handleSheetChanges={handleSheetChanges}
110
+ isExpanded={isExpanded}
111
+ />
112
+ </BottomSheetView>
113
+ </BottomSheetModal>
114
+
115
+ {/* Chat Action Sheet */}
116
+ <BottomSheetModal
117
+ snapPoints={['100%']}
118
+ name="ChatSheet"
119
+ onDismiss={onDismiss}
120
+ ref={chatSheetRef}
121
+ style={styles.container}
122
+ backgroundStyle={styles.backgroundStyle}
123
+ handleIndicatorStyle={styles.handleIndicatorStyle}
124
+ enableContentPanningGesture={false}
125
+ handleComponent={() => (
126
+ <ActionSheetHandle sidePanel={SidePanelType.Chat} />
127
+ )}
128
+ keyboardBehavior="extend"
129
+ stackBehavior="push">
130
+ <BottomSheetView>
131
+ <Chat showHeader={false} />
132
+ </BottomSheetView>
133
+ </BottomSheetModal>
134
+
135
+ {/* Participants Action Sheet */}
136
+ <BottomSheetModal
137
+ snapPoints={['100%']}
138
+ ref={participantsSheetRef}
139
+ onDismiss={onDismiss}
140
+ name="ParticipantsSheet"
141
+ style={styles.container}
142
+ backgroundStyle={styles.backgroundStyle}
143
+ handleIndicatorStyle={styles.handleIndicatorStyle}
144
+ enableContentPanningGesture={false}
145
+ handleComponent={() => (
146
+ <ActionSheetHandle sidePanel={SidePanelType.Participants} />
147
+ )}
148
+ stackBehavior="push">
149
+ <BottomSheetView>
150
+ <ParticipantView showHeader={false} />
151
+ </BottomSheetView>
152
+ </BottomSheetModal>
153
+
154
+ {/* Settings Action Sheet */}
155
+ <BottomSheetModal
156
+ snapPoints={['100%']}
157
+ ref={settingsSheetRef}
158
+ name="SettingsSheet"
159
+ onDismiss={onDismiss}
160
+ style={styles.container}
161
+ backgroundStyle={styles.backgroundStyle}
162
+ handleIndicatorStyle={styles.handleIndicatorStyle}
163
+ enableContentPanningGesture={false}
164
+ handleComponent={() => (
165
+ <ActionSheetHandle sidePanel={SidePanelType.Settings} />
166
+ )}
167
+ stackBehavior="push">
168
+ <BottomSheetView>
169
+ <SettingsView showHeader={false} />
170
+ </BottomSheetView>
171
+ </BottomSheetModal>
172
+ </BottomSheetModalProvider>
173
+ );
174
+ };
175
+
176
+ export default ActionSheet;
177
+
178
+ const styles = StyleSheet.create({
179
+ content: {
180
+ paddingHorizontal: 20,
181
+ },
182
+ row: {
183
+ flexDirection: 'row',
184
+ justifyContent: 'space-between',
185
+ paddingVertical: 24,
186
+ paddingHorizontal: 16,
187
+ borderColor: '#EDF0F1',
188
+ flexWrap: 'wrap',
189
+ },
190
+
191
+ container: {
192
+ shadowColor: '#000000',
193
+ shadowOffset: {width: 0, height: -4},
194
+ shadowOpacity: 0.1,
195
+ shadowRadius: 4,
196
+ },
197
+ backgroundStyle: {
198
+ backgroundColor: $config.CARD_LAYER_1_COLOR,
199
+ },
200
+
201
+ handleIndicatorStyle: {
202
+ // backgroundColor: $config.SEMANTIC_NEUTRAL,
203
+ // width: 40,
204
+ // height: 4,
205
+ },
206
+ backDrop: {
207
+ position: 'absolute',
208
+ top: 0,
209
+ bottom: 0,
210
+ left: 0,
211
+ right: 0,
212
+ backgroundColor: $config.CARD_LAYER_1_COLOR,
213
+ opacity: 0.5,
214
+ },
215
+ });