agora-appbuilder-core 3.0.9 → 3.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) 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/Contexts/LocalUserContext.tsx +4 -0
  5. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +18 -0
  6. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +2 -0
  7. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
  8. package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
  9. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  10. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +11 -0
  11. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +1 -0
  12. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +1 -0
  13. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +24 -0
  14. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +1 -0
  15. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +1 -0
  16. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -0
  17. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +2 -0
  18. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -0
  19. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -0
  20. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -0
  21. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
  22. package/template/agora-rn-uikit/src/Reducer/index.ts +3 -0
  23. package/template/agora-rn-uikit/src/Rtc/Create.tsx +89 -1
  24. package/template/agora-rn-uikit/src/RtcConfigure.tsx +39 -2
  25. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +15 -5
  26. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +15 -9
  27. package/template/agora-rn-uikit/src/index.ts +3 -1
  28. package/template/android/app/build.gradle +1 -0
  29. package/template/android/app/src/main/AndroidManifest.xml +22 -15
  30. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  31. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  32. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
  33. package/template/android/app/src/main/res/values/colors.xml +7 -0
  34. package/template/android/build.gradle +3 -3
  35. package/template/babel.config.js +1 -0
  36. package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
  37. package/template/customization-api/sub-components.ts +1 -1
  38. package/template/customization-api/typeDefinition.ts +2 -1
  39. package/template/electron/index.html +27 -27
  40. package/template/electron/renderer/index.js +1 -0
  41. package/template/global.d.ts +25 -4
  42. package/template/index.rsdk.tsx +1 -0
  43. package/template/index.web.js +2 -1
  44. package/template/index.wsdk.tsx +1 -1
  45. package/template/ios/HelloWorld/Info.plist +14 -1
  46. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
  47. package/template/metro.config.js +1 -1
  48. package/template/package.json +18 -7
  49. package/template/react-native-toast-message/index.d.ts +43 -43
  50. package/template/react-native-toast-message/src/colors/index.js +3 -2
  51. package/template/react-native-toast-message/src/components/base/index.js +46 -59
  52. package/template/react-native-toast-message/src/components/base/styles.js +16 -32
  53. package/template/react-native-toast-message/src/components/checkbox.js +178 -0
  54. package/template/react-native-toast-message/src/components/error.js +3 -2
  55. package/template/react-native-toast-message/src/components/info.js +3 -2
  56. package/template/react-native-toast-message/src/components/success.js +3 -2
  57. package/template/react-native-toast-message/src/index.js +122 -31
  58. package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
  59. package/template/react-native-toast-message/src/styles.js +3 -4
  60. package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
  61. package/template/react-native.config.js +7 -0
  62. package/template/src/App.tsx +6 -0
  63. package/template/src/AppWrapper.tsx +63 -28
  64. package/template/src/assets/font-styles.css +329 -0
  65. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  66. package/template/src/assets/fonts/icomoon.ttf +0 -0
  67. package/template/src/assets/permission.png +0 -0
  68. package/template/src/assets/selection.json +1 -0
  69. package/template/src/atoms/ActionMenu.tsx +236 -0
  70. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
  71. package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
  72. package/template/src/atoms/AnimatedRings.native.tsx +68 -0
  73. package/template/src/atoms/AnimatedRings.tsx +70 -0
  74. package/template/src/atoms/Card.tsx +61 -0
  75. package/template/src/atoms/CircularProgress.native.tsx +121 -0
  76. package/template/src/atoms/CircularProgress.tsx +102 -0
  77. package/template/src/atoms/CustomIcon.tsx +88 -0
  78. package/template/src/atoms/CustomSwitch.tsx +287 -0
  79. package/template/src/atoms/Dropdown.tsx +306 -0
  80. package/template/src/atoms/HorizontalRule.tsx +3 -1
  81. package/template/src/atoms/IconButton.tsx +162 -0
  82. package/template/src/atoms/ImageIcon.tsx +98 -0
  83. package/template/src/atoms/InfoBubble.tsx +291 -0
  84. package/template/src/atoms/Input.tsx +87 -0
  85. package/template/src/atoms/InviteInfo.tsx +166 -0
  86. package/template/src/atoms/LinkButton.tsx +28 -0
  87. package/template/src/atoms/OutlineButton.tsx +61 -0
  88. package/template/src/atoms/ParticipantsCount.tsx +73 -0
  89. package/template/src/atoms/Popup.tsx +147 -0
  90. package/template/src/atoms/PrimaryButton.tsx +51 -26
  91. package/template/src/atoms/RecordingInfo.tsx +49 -0
  92. package/template/src/atoms/SecondaryButton.tsx +8 -5
  93. package/template/src/atoms/Spacer.tsx +22 -0
  94. package/template/src/atoms/TertiaryButton.tsx +78 -0
  95. package/template/src/atoms/TextInput.tsx +12 -14
  96. package/template/src/atoms/Toggle.tsx +47 -0
  97. package/template/src/atoms/Tooltip.native.tsx +65 -0
  98. package/template/src/atoms/Tooltip.tsx +94 -0
  99. package/template/src/atoms/UserAvatar.tsx +60 -0
  100. package/template/src/components/Chat.tsx +86 -214
  101. package/template/src/components/ChatContext.ts +8 -1
  102. package/template/src/components/ColorConfigure.tsx +1 -1
  103. package/template/src/components/ColorContext.ts +1 -1
  104. package/template/src/components/CommonStyles.ts +44 -0
  105. package/template/src/components/Controls.tsx +342 -42
  106. package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +6 -4
  107. package/template/src/components/DeviceConfigure.tsx +461 -101
  108. package/template/src/components/DeviceContext.tsx +8 -4
  109. package/template/src/components/EventsConfigure.tsx +144 -7
  110. package/template/src/components/GraphQLProvider.tsx +1 -1
  111. package/template/src/components/GridVideo.tsx +59 -44
  112. package/template/src/components/HostControlView.tsx +114 -35
  113. package/template/src/components/Navbar.tsx +216 -398
  114. package/template/src/components/NetworkQualityContext.tsx +20 -20
  115. package/template/src/components/ParticipantsView.tsx +177 -154
  116. package/template/src/components/PinnedVideo.tsx +207 -120
  117. package/template/src/components/Precall.native.tsx +358 -119
  118. package/template/src/components/Precall.tsx +269 -135
  119. package/template/src/components/RTMConfigure.tsx +27 -4
  120. package/template/src/components/Router.electron.ts +1 -0
  121. package/template/src/components/Router.native.ts +1 -0
  122. package/template/src/components/Router.sdk.ts +1 -0
  123. package/template/src/components/Router.ts +1 -0
  124. package/template/src/components/Settings.tsx +26 -95
  125. package/template/src/components/SettingsView.tsx +251 -56
  126. package/template/src/components/Share.tsx +302 -273
  127. package/template/src/components/StorageContext.tsx +30 -3
  128. package/template/src/components/ToastComponent.tsx +8 -0
  129. package/template/src/components/chat-messages/useChatMessages.tsx +69 -23
  130. package/template/src/components/chat-ui/useChatUIControl.tsx +7 -0
  131. package/template/src/components/common/Error.tsx +20 -6
  132. package/template/src/components/common/Logo.tsx +16 -15
  133. package/template/src/components/contexts/LiveStreamDataContext.tsx +10 -5
  134. package/template/src/components/contexts/VideoMeetingDataContext.tsx +37 -7
  135. package/template/src/components/livestream/LiveStreamContext.tsx +270 -36
  136. package/template/src/components/livestream/Types.ts +39 -14
  137. package/template/src/components/livestream/index.ts +1 -0
  138. package/template/src/components/livestream/views/LiveStreamControls.tsx +12 -4
  139. package/template/src/components/participants/AllAudienceParticipants.tsx +101 -30
  140. package/template/src/components/participants/AllHostParticipants.tsx +103 -34
  141. package/template/src/components/participants/Participant.tsx +302 -0
  142. package/template/src/components/participants/ParticipantName.tsx +13 -7
  143. package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
  144. package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
  145. package/template/src/components/participants/UserActionMenuOptions.tsx +398 -0
  146. package/template/src/components/popups/InvitePopup.tsx +115 -0
  147. package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
  148. package/template/src/components/precall/LocalMute.tsx +84 -14
  149. package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
  150. package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
  151. package/template/src/components/precall/PermissionHelper.tsx +126 -0
  152. package/template/src/components/precall/PreCallSettings.tsx +52 -0
  153. package/template/src/components/precall/VideoPreview.native.tsx +48 -3
  154. package/template/src/components/precall/VideoPreview.tsx +163 -7
  155. package/template/src/components/precall/joinCallBtn.tsx +15 -2
  156. package/template/src/components/precall/meetingTitle.tsx +15 -12
  157. package/template/src/components/precall/selectDevice.tsx +1 -21
  158. package/template/src/components/precall/textInput.tsx +32 -4
  159. package/template/src/components/precall/usePreCall.tsx +16 -0
  160. package/template/src/components/styles.ts +42 -21
  161. package/template/src/components/useShareLink.tsx +12 -14
  162. package/template/src/components/useToast.tsx +41 -0
  163. package/template/src/components/useVideoCall.tsx +65 -0
  164. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  165. package/template/src/pages/Authenticate.tsx +5 -15
  166. package/template/src/pages/Create.tsx +293 -165
  167. package/template/src/pages/Endcall.tsx +148 -0
  168. package/template/src/pages/Join.tsx +93 -67
  169. package/template/src/pages/VideoCall.tsx +89 -64
  170. package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
  171. package/template/src/pages/video-call/ActionSheet.tsx +226 -0
  172. package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
  173. package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
  174. package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
  175. package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
  176. package/template/src/pages/video-call/NameWithMicIcon.tsx +120 -44
  177. package/template/src/pages/video-call/RenderComponent.tsx +3 -2
  178. package/template/src/pages/video-call/SidePanelHeader.tsx +190 -0
  179. package/template/src/pages/video-call/VideoCallMobileView.tsx +139 -0
  180. package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
  181. package/template/src/pages/video-call/VideoCallScreen.tsx +45 -9
  182. package/template/src/pages/video-call/VideoComponent.tsx +18 -3
  183. package/template/src/pages/video-call/VideoRenderer.tsx +218 -60
  184. package/template/src/rtm-events/constants.ts +2 -0
  185. package/template/src/subComponents/ChatBubble.tsx +123 -83
  186. package/template/src/subComponents/ChatContainer.tsx +257 -84
  187. package/template/src/subComponents/ChatInput.ios.tsx +237 -0
  188. package/template/src/subComponents/ChatInput.tsx +61 -46
  189. package/template/src/subComponents/Checkbox.native.tsx +16 -5
  190. package/template/src/subComponents/Checkbox.tsx +2 -2
  191. package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
  192. package/template/src/subComponents/EndcallPopup.tsx +107 -0
  193. package/template/src/subComponents/FallbackLogo.tsx +122 -40
  194. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  195. package/template/src/subComponents/LayoutIconButton.tsx +201 -0
  196. package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
  197. package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
  198. package/template/src/subComponents/LocalAudioMute.tsx +119 -27
  199. package/template/src/subComponents/LocalEndCall.tsx +71 -33
  200. package/template/src/subComponents/LocalSwitchCamera.tsx +17 -30
  201. package/template/src/subComponents/LocalVideoMute.tsx +117 -27
  202. package/template/src/subComponents/Logo.tsx +3 -4
  203. package/template/src/subComponents/LogoutButton.tsx +1 -1
  204. package/template/src/subComponents/NetworkQualityPill.tsx +60 -63
  205. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  206. package/template/src/subComponents/Recording.tsx +28 -29
  207. package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
  208. package/template/src/subComponents/RemoteEndCall.tsx +8 -5
  209. package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
  210. package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
  211. package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
  212. package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
  213. package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
  214. package/template/src/subComponents/SelectDevice.tsx +404 -61
  215. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
  216. package/template/src/subComponents/SelectOAuth.tsx +9 -8
  217. package/template/src/subComponents/SidePanelHeader.tsx +112 -0
  218. package/template/src/subComponents/ToastConfig.tsx +150 -10
  219. package/template/src/subComponents/chat/ChatParticipants.tsx +187 -78
  220. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +95 -32
  221. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
  222. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
  223. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
  224. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
  225. package/template/src/subComponents/recording/useRecording.tsx +79 -27
  226. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
  227. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +11 -2
  228. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +26 -4
  229. package/template/src/theme/index.ts +46 -0
  230. package/template/src/utils/PlatformWrapper.tsx +21 -0
  231. package/template/src/utils/common.tsx +155 -1
  232. package/template/src/utils/hexadecimalTransparency.ts +108 -0
  233. package/template/src/utils/index.tsx +19 -0
  234. package/template/src/utils/isMobileOrTablet.ts +7 -2
  235. package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
  236. package/template/src/utils/useButtonTemplate.tsx +1 -0
  237. package/template/src/utils/useFocus.tsx +46 -0
  238. package/template/src/utils/useIsActiveSpeaker.ts +27 -0
  239. package/template/src/utils/useIsHandRaised.ts +13 -0
  240. package/template/src/utils/useMuteToggleLocal.ts +54 -3
  241. package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
  242. package/template/src/utils/useRemoteRequest.ts +84 -0
  243. package/template/web/index.html +5 -0
  244. package/template/webpack.commons.js +13 -8
  245. package/template/webpack.web.config.js +1 -0
  246. package/template/src/assets/icons.ts +0 -102
  247. package/template/src/components/participants/MeParticipant.tsx +0 -38
  248. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
@@ -1,56 +1,212 @@
1
1
  /*
2
2
  ********************************************
3
3
  Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
- AppBuilder and all associated components, source code, APIs, services, and documentation
5
- (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
- accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
- Use without a license or in violation of any license terms and conditions (including use for
8
- any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
- information visit https://appbuilder.agora.io.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useContext} from 'react';
13
- import {View, Text, StyleSheet} from 'react-native';
14
- import {ClientRole, PropsContext} from '../../agora-rn-uikit';
12
+ import React, {useState, useContext, useEffect} from 'react';
13
+ import {View, Text, StyleSheet, ScrollView} from 'react-native';
14
+ import {PropsContext, ClientRole} from '../../agora-rn-uikit';
15
+ import {isValidReactComponent, isWebInternal, trimText} from '../utils/common';
16
+ import ColorContext from './ColorContext';
17
+ import {useMeetingInfo} from './meeting-info/useMeetingInfo';
18
+ import PreCallLogo from './common/Logo';
15
19
  import {useCustomization} from 'customization-implementation';
16
- import {useString} from '../utils/useString';
17
- import {isValidReactComponent} from '../utils/common';
20
+ import PreCallLocalMute from './precall/LocalMute';
18
21
  import {
19
22
  PreCallJoinBtn,
20
- PreCallVideoPreview,
21
23
  PreCallTextInput,
22
- PreCallLocalMute,
23
24
  PreCallMeetingTitle,
25
+ PreCallSelectDevice,
26
+ PreCallVideoPreview,
27
+ PreCallJoinCallBtnProps,
24
28
  } from './precall/index';
29
+ import SDKEvents from '../utils/SdkEvents';
30
+ import isSDKCheck from '../utils/isSDK';
31
+ import Logo from './common/Logo';
32
+ import Card from '../atoms/Card';
33
+ import Spacer from '../atoms/Spacer';
34
+ import {useRtc} from 'customization-api';
35
+ import {MeetingTitleProps} from './precall/meetingTitle';
36
+ import {PreCallTextInputProps} from './precall/textInput';
37
+
38
+ import StorageContext from './StorageContext';
39
+ import ThemeConfig from '../theme';
40
+ import hexadecimalTransparency from '../utils/hexadecimalTransparency';
41
+ import {VideoPreviewProps} from './precall/VideoPreview';
25
42
 
26
- const Precall = () => {
43
+ const JoinRoomInputView = ({isDesktop}) => {
27
44
  const {rtcProps} = useContext(PropsContext);
28
- //commented for v1 release
29
- //const precallLabel = useString('precallLabel')();
30
- const precallLabel = 'Precall';
45
+ const {JoinButton, Textbox} = useCustomization((data) => {
46
+ let components: {
47
+ JoinButton: React.ComponentType<PreCallJoinCallBtnProps>;
48
+ Textbox: React.ComponentType<PreCallTextInputProps>;
49
+ } = {
50
+ Textbox: PreCallTextInput,
51
+ JoinButton: PreCallJoinBtn,
52
+ };
53
+ // commented for v1 release
54
+ // if (
55
+ // data?.components?.precall &&
56
+ // typeof data?.components?.precall === 'object'
57
+ // ) {
58
+ // if (
59
+ // data?.components?.precall?.joinButton &&
60
+ // typeof data?.components?.precall?.joinButton !== 'object'
61
+ // ) {
62
+ // if (isValidReactComponent(data?.components?.precall?.joinButton)) {
63
+ // components.JoinButton = data?.components?.precall?.joinButton;
64
+ // }
65
+ // }
66
+
67
+ // if (
68
+ // data?.components?.precall?.textBox &&
69
+ // typeof data?.components?.precall?.textBox !== 'object'
70
+ // ) {
71
+ // if (isValidReactComponent(data?.components?.precall?.textBox)) {
72
+ // components.Textbox = data?.components?.precall?.textBox;
73
+ // }
74
+ // }
75
+ // }
76
+ return components;
77
+ });
78
+ return (
79
+ <View
80
+ style={$config.EVENT_MODE ? style.lsBtnContainer : style.btnContainer}>
81
+ <Textbox
82
+ isDesktop={isDesktop}
83
+ labelStyle={$config.EVENT_MODE ? style.labelStyle : {}}
84
+ />
85
+ {$config.EVENT_MODE ? (
86
+ <>
87
+ {/* <Text style={style.subTextStyle}>
88
+ Enter the name you would like to join the room as
89
+ </Text> */}
90
+ {rtcProps.role == ClientRole.Audience && <Spacer size={40} />}
91
+ </>
92
+ ) : (
93
+ <></>
94
+ )}
95
+ <View
96
+ style={
97
+ $config.EVENT_MODE &&
98
+ rtcProps.role == ClientRole.Audience && {
99
+ justifyContent: 'space-between',
100
+ flex: 1,
101
+ }
102
+ }>
103
+ <Spacer size={10} />
104
+ <View
105
+ style={
106
+ $config.EVENT_MODE && isDesktop
107
+ ? style.btnContainerStyle
108
+ : {width: '100%'}
109
+ }>
110
+ <JoinButton />
111
+ </View>
112
+ </View>
113
+ </View>
114
+ );
115
+ };
116
+
117
+ const JoinRoomName = ({isDesktop}) => {
118
+ const {JoinButton, Textbox} = useCustomization((data) => {
119
+ let components: {
120
+ JoinButton: React.ComponentType<PreCallJoinCallBtnProps>;
121
+ Textbox: React.ComponentType<PreCallTextInputProps>;
122
+ } = {
123
+ Textbox: PreCallTextInput,
124
+ JoinButton: PreCallJoinBtn,
125
+ };
126
+ // commented for v1 release
127
+ // if (
128
+ // data?.components?.precall &&
129
+ // typeof data?.components?.precall === 'object'
130
+ // ) {
131
+ // if (
132
+ // data?.components?.precall?.joinButton &&
133
+ // typeof data?.components?.precall?.joinButton !== 'object'
134
+ // ) {
135
+ // if (isValidReactComponent(data?.components?.precall?.joinButton)) {
136
+ // components.JoinButton = data?.components?.precall?.joinButton;
137
+ // }
138
+ // }
139
+
140
+ // if (
141
+ // data?.components?.precall?.textBox &&
142
+ // typeof data?.components?.precall?.textBox !== 'object'
143
+ // ) {
144
+ // if (isValidReactComponent(data?.components?.precall?.textBox)) {
145
+ // components.Textbox = data?.components?.precall?.textBox;
146
+ // }
147
+ // }
148
+ // }
149
+ return components;
150
+ });
151
+ return <Textbox isDesktop={isDesktop} />;
152
+ };
153
+
154
+ const JoinRoomButton = () => {
155
+ const {JoinButton, Textbox} = useCustomization((data) => {
156
+ let components: {
157
+ JoinButton: React.ComponentType<PreCallJoinCallBtnProps>;
158
+ Textbox: React.ComponentType;
159
+ } = {Textbox: PreCallTextInput, JoinButton: PreCallJoinBtn};
160
+ // commented for v1 release
161
+ // if (
162
+ // data?.components?.precall &&
163
+ // typeof data?.components?.precall === 'object'
164
+ // ) {
165
+ // if (
166
+ // data?.components?.precall?.joinButton &&
167
+ // typeof data?.components?.precall?.joinButton !== 'object'
168
+ // ) {
169
+ // if (isValidReactComponent(data?.components?.precall?.joinButton)) {
170
+ // components.JoinButton = data?.components?.precall?.joinButton;
171
+ // }
172
+ // }
173
+
174
+ // if (
175
+ // data?.components?.precall?.textBox &&
176
+ // typeof data?.components?.precall?.textBox !== 'object'
177
+ // ) {
178
+ // if (isValidReactComponent(data?.components?.precall?.textBox)) {
179
+ // components.Textbox = data?.components?.precall?.textBox;
180
+ // }
181
+ // }
182
+ // }
183
+ return components;
184
+ });
185
+ return <JoinButton />;
186
+ };
31
187
 
188
+ const Precall = (props: any) => {
189
+ const {primaryColor} = useContext(ColorContext);
190
+ const {rtcProps} = useContext(PropsContext);
32
191
  const {
33
192
  VideoPreview,
34
193
  MeetingName,
35
- JoinButton,
36
- Textbox,
194
+ DeviceSelect,
37
195
  PrecallAfterView,
38
196
  PrecallBeforeView,
39
197
  } = useCustomization((data) => {
40
198
  const components: {
41
199
  PrecallAfterView: React.ComponentType;
42
200
  PrecallBeforeView: React.ComponentType;
43
- VideoPreview: React.ComponentType;
44
- MeetingName: React.ComponentType;
45
- JoinButton: React.ComponentType;
46
- Textbox: React.ComponentType;
201
+ DeviceSelect: React.ComponentType;
202
+ VideoPreview: React.ComponentType<VideoPreviewProps>;
203
+ MeetingName: React.ComponentType<MeetingTitleProps>;
47
204
  } = {
48
205
  PrecallAfterView: React.Fragment,
49
206
  PrecallBeforeView: React.Fragment,
50
- JoinButton: PreCallJoinBtn,
51
207
  MeetingName: PreCallMeetingTitle,
52
- Textbox: PreCallTextInput,
53
208
  VideoPreview: PreCallVideoPreview,
209
+ DeviceSelect: PreCallSelectDevice,
54
210
  };
55
211
  // commented for v1 release
56
212
  // if (
@@ -80,20 +236,11 @@ const Precall = () => {
80
236
  // }
81
237
 
82
238
  // if (
83
- // data?.components?.precall?.joinButton &&
84
- // typeof data?.components?.precall?.joinButton !== 'object'
239
+ // data?.components?.precall?.deviceSelect &&
240
+ // typeof data?.components?.precall?.deviceSelect !== 'object'
85
241
  // ) {
86
- // if (isValidReactComponent(data?.components?.precall?.joinButton)) {
87
- // components.JoinButton = data?.components?.precall?.joinButton;
88
- // }
89
- // }
90
-
91
- // if (
92
- // data?.components?.precall?.textBox &&
93
- // typeof data?.components?.precall?.textBox !== 'object'
94
- // ) {
95
- // if (isValidReactComponent(data?.components?.precall?.textBox)) {
96
- // components.Textbox = data?.components?.precall?.textBox;
242
+ // if (isValidReactComponent(data?.components?.precall?.deviceSelect)) {
243
+ // components.DeviceSelect = data?.components?.precall?.deviceSelect;
97
244
  // }
98
245
  // }
99
246
 
@@ -108,8 +255,48 @@ const Precall = () => {
108
255
  // }
109
256
  return components;
110
257
  });
111
- const isAudienceInLiveStreaming = () =>
112
- $config.EVENT_MODE && rtcProps?.role == ClientRole.Audience;
258
+ const {
259
+ isJoinDataFetched,
260
+ data: {meetingTitle},
261
+ } = useMeetingInfo();
262
+ const rtc = useRtc();
263
+ const isSDK = isSDKCheck();
264
+
265
+ //permission helper modal show/hide
266
+ const [isVisible, setIsVisible] = useState(false);
267
+ const {store} = useContext(StorageContext);
268
+
269
+ useEffect(() => {
270
+ if (isWebInternal() && !isSDK) {
271
+ if (meetingTitle) {
272
+ document.title = trimText(meetingTitle) + ' | ' + $config.APP_NAME;
273
+ }
274
+ }
275
+ });
276
+
277
+ useEffect(() => {
278
+ if (isJoinDataFetched) {
279
+ new Promise((res) =>
280
+ // @ts-ignore
281
+ rtc.RtcEngine.getDevices(function (devices: MediaDeviceInfo[]) {
282
+ res(devices);
283
+ }),
284
+ ).then((devices: MediaDeviceInfo[]) => {
285
+ SDKEvents.emit('preJoin', meetingTitle, devices);
286
+ });
287
+ }
288
+ }, [isJoinDataFetched]);
289
+
290
+ useEffect(() => {
291
+ if (store?.permissionPopupSeen) {
292
+ const flag = JSON.parse(store?.permissionPopupSeen);
293
+ if (flag === false) {
294
+ setIsVisible(true);
295
+ }
296
+ } else {
297
+ setIsVisible(true);
298
+ }
299
+ }, []);
113
300
 
114
301
  const FpePrecallComponent = useCustomization((data) => {
115
302
  // commented for v1 release
@@ -125,33 +312,55 @@ const Precall = () => {
125
312
  return undefined;
126
313
  });
127
314
 
315
+ if (!isJoinDataFetched) return <Text style={style.titleFont}>Loading..</Text>;
128
316
  return FpePrecallComponent ? (
129
317
  <FpePrecallComponent />
130
318
  ) : (
131
319
  <>
132
320
  <PrecallBeforeView />
133
- <View style={style.full}>
134
- <View style={style.heading}>
135
- <Text style={style.headingText}>{precallLabel}</Text>
136
- </View>
137
- <MeetingName />
138
- {!isAudienceInLiveStreaming() && (
139
- <View style={style.full}>
140
- <VideoPreview />
141
- </View>
142
- )}
143
- <View style={style.textInputHolder}>
144
- <Textbox />
145
- </View>
146
- <View style={{height: 20}} />
147
- {!isAudienceInLiveStreaming() && (
148
- <View style={style.controls}>
149
- <PreCallLocalMute />
150
- </View>
151
- )}
152
- <View style={{marginBottom: 50, alignItems: 'center'}}>
153
- <JoinButton />
154
- </View>
321
+ <View style={{flex: 1}}>
322
+ <ScrollView
323
+ contentContainerStyle={style.mainMobile}
324
+ testID="precall-screen">
325
+ {/* Precall screen only changes for audience in Live Stream event */}
326
+ {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
327
+ // Live (Audience) - Mobile
328
+ <View style={{flex: 1}}>
329
+ <MeetingName textStyle={style.meetingTitleStyle} />
330
+ <Spacer size={24} />
331
+ <View testID="precall-mobile-join" style={{flex: 1}}>
332
+ <JoinRoomInputView isDesktop={false} />
333
+ </View>
334
+ </View>
335
+ ) : (
336
+ // Conferncing / Live (Host)
337
+ <View style={{flex: 1}}>
338
+ <MeetingName textStyle={{textAlign: 'center'}} />
339
+ <Spacer size={24} />
340
+ <View style={{flex: 1}}>
341
+ <View
342
+ style={{
343
+ flex: 1,
344
+ }}
345
+ testID="precall-mobile-preview">
346
+ <VideoPreview isMobileView={true} />
347
+ </View>
348
+ <Spacer size={40} />
349
+ <View
350
+ testID="precall-mobile-join"
351
+ style={{
352
+ // flex: $config.EVENT_MODE ? 2 : 1,
353
+ //width: '100%',
354
+ flexDirection: 'row',
355
+ //alignItems: 'center',
356
+ //justifyContent: 'center',
357
+ }}>
358
+ <JoinRoomInputView isDesktop={false} />
359
+ </View>
360
+ </View>
361
+ </View>
362
+ )}
363
+ </ScrollView>
155
364
  </View>
156
365
  <PrecallAfterView />
157
366
  </>
@@ -159,74 +368,104 @@ const Precall = () => {
159
368
  };
160
369
 
161
370
  const style = StyleSheet.create({
162
- full: {
163
- flex: 1,
164
- paddingLeft: 15,
165
- paddingRight: 15,
371
+ full: {flex: 1},
372
+ labelStyle: {
373
+ paddingLeft: 8,
374
+ },
375
+ subTextStyle: {
376
+ marginTop: 8,
377
+ marginLeft: 8,
378
+ fontFamily: ThemeConfig.FontFamily.sansPro,
379
+ fontWeight: '400',
380
+ fontSize: ThemeConfig.FontSize.small,
381
+ lineHeight: 18,
382
+ color: $config.SEMANTIC_NEUTRAL,
383
+ textAlign: 'left',
384
+ },
385
+ btnContainerStyle: {maxWidth: 337, alignSelf: 'center', marginTop: 50},
386
+ main: {
387
+ flexGrow: 1,
388
+ padding: 32,
166
389
  justifyContent: 'center',
167
390
  },
168
- heading: {flex: 0.1, justifyContent: 'center'},
169
- headingText: {
170
- fontSize: 24,
171
- color: $config.PRIMARY_FONT_COLOR,
172
- fontWeight: '700',
173
- alignSelf: 'center',
391
+ mainMobile: {
392
+ flexGrow: 1,
393
+ flexDirection: 'row',
394
+ paddingHorizontal: 16,
395
+ paddingTop: 25,
396
+ paddingBottom: 32,
397
+ justifyContent: 'center',
174
398
  },
175
- textInputHolder: {
176
- flex: 0.1,
177
- alignItems: 'center',
178
- paddingTop: 20,
399
+ nav: {
400
+ flex: 1,
179
401
  width: '100%',
180
- },
181
- textInput: {
182
- width: '80%',
183
- paddingLeft: 8,
184
- borderColor: $config.PRIMARY_COLOR,
185
- borderWidth: 2,
186
- color: $config.PRIMARY_FONT_COLOR,
187
- fontSize: 16,
188
- minHeight: 45,
189
- alignSelf: 'center',
190
- },
191
- controls: {
192
- flex: 0.2,
193
402
  flexDirection: 'row',
194
- alignSelf: 'center',
195
- padding: 5,
196
- },
197
- width50: {width: 50},
198
- buttonActive: {
199
- backgroundColor: $config.PRIMARY_COLOR,
200
- height: 50,
201
- width: 180,
202
- alignSelf: 'center',
203
- alignContent: 'center',
403
+ alignItems: 'center',
204
404
  justifyContent: 'center',
205
- marginBottom: 50,
206
- },
207
- buttonDisabled: {
208
- backgroundColor: $config.PRIMARY_FONT_COLOR + '80',
209
- height: 50,
210
- width: 180,
211
- alignSelf: 'center',
212
- alignContent: 'center',
405
+ },
406
+ container: {
407
+ flexDirection: 'row',
408
+ alignItems: 'center',
409
+ minHeight: '80%',
410
+ },
411
+ leftContent: {
412
+ flex: 2.5,
413
+ borderRadius: ThemeConfig.BorderRadius.large,
414
+ overflow: 'hidden',
415
+ },
416
+ boxStyle: {
417
+ borderWidth: 1,
418
+ borderColor: $config.CARD_LAYER_3_COLOR,
419
+ shadowColor: $config.HARD_CODED_BLACK_COLOR,
420
+ shadowOffset: {width: 0, height: 4},
421
+ shadowOpacity: 0.1,
422
+ shadowRadius: 8,
423
+ elevation: 5,
424
+ height: '100%',
425
+ },
426
+ mobileBoxStyle: {
427
+ marginRight: 0,
428
+ borderRadius: ThemeConfig.BorderRadius.large,
429
+ flex: 3,
430
+ },
431
+ rightContent: {
432
+ borderRadius: ThemeConfig.BorderRadius.large,
433
+ flex: 1,
434
+ paddingHorizontal: 0,
435
+ paddingVertical: 0,
436
+ maxWidth: 450,
437
+ height: '100%',
438
+ justifyContent: 'space-between',
439
+ },
440
+ rightInputContent: {
441
+ padding: 32,
442
+ },
443
+ titleFont: {
444
+ textAlign: 'center',
445
+ fontSize: 20,
446
+ color: $config.PRIMARY_ACTION_TEXT_COLOR,
447
+ },
448
+ btnContainer: {
449
+ flex: 1,
450
+ width: '100%',
213
451
  justifyContent: 'center',
214
- marginBottom: 50,
452
+ //alignItems: 'center',
215
453
  },
216
- buttonText: {
454
+ lsBtnContainer: {
455
+ flex: 1,
217
456
  width: '100%',
218
- height: 45,
219
- lineHeight: 45,
220
- fontSize: 20,
221
- textAlign: 'center',
222
- textAlignVertical: 'center',
223
- color: $config.SECONDARY_FONT_COLOR,
457
+ justifyContent: 'center',
224
458
  },
225
- titleHeading: {
226
- fontSize: 22,
459
+ meetingTitleContainer: {
460
+ marginVertical: 10,
461
+ },
462
+ meetingTitleStyle: {
463
+ fontFamily: ThemeConfig.FontFamily.sansPro,
227
464
  fontWeight: '700',
228
- textAlign: 'center',
229
- color: $config.SECONDARY_FONT_COLOR,
465
+ fontSize: ThemeConfig.FontSize.extraLarge,
466
+ lineHeight: ThemeConfig.FontSize.extraLarge,
467
+ color: $config.FONT_COLOR,
468
+ paddingLeft: 0,
230
469
  },
231
470
  });
232
471