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
@@ -9,32 +9,46 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useState, useContext, useEffect} from 'react';
13
- import {View, Text, StyleSheet, Dimensions} from 'react-native';
12
+ import PrecallNative from './Precall.native';
13
+ import React, {useContext, useEffect} from 'react';
14
+ import {View, Text, StyleSheet, ScrollView} from 'react-native';
14
15
  import {PropsContext, ClientRole} from '../../agora-rn-uikit';
15
- import {isValidReactComponent, isWebInternal} from '../utils/common';
16
- import ColorContext from './ColorContext';
16
+ import {
17
+ isMobileUA,
18
+ isWebInternal,
19
+ trimText,
20
+ useIsDesktop,
21
+ useResponsive,
22
+ } from '../utils/common';
17
23
  import {useMeetingInfo} from './meeting-info/useMeetingInfo';
18
- import PreCallLogo from './common/Logo';
19
24
  import {useCustomization} from 'customization-implementation';
20
- import PreCallLocalMute from './precall/LocalMute';
21
25
  import {
22
26
  PreCallJoinBtn,
23
27
  PreCallTextInput,
24
28
  PreCallMeetingTitle,
25
29
  PreCallSelectDevice,
26
30
  PreCallVideoPreview,
31
+ PreCallJoinCallBtnProps,
27
32
  } from './precall/index';
28
33
  import SDKEvents from '../utils/SdkEvents';
29
34
  import isSDKCheck from '../utils/isSDK';
35
+ import Card from '../atoms/Card';
36
+ import Spacer from '../atoms/Spacer';
30
37
  import {useRtc} from 'customization-api';
38
+ import {MeetingTitleProps} from './precall/meetingTitle';
39
+ import {PreCallTextInputProps} from './precall/textInput';
40
+ import ThemeConfig from '../theme';
31
41
 
32
- const JoinRoomInputView = () => {
42
+ const JoinRoomInputView = ({isDesktop}) => {
43
+ const {rtcProps} = useContext(PropsContext);
33
44
  const {JoinButton, Textbox} = useCustomization((data) => {
34
45
  let components: {
35
- JoinButton: React.ComponentType;
36
- Textbox: React.ComponentType;
37
- } = {Textbox: PreCallTextInput, JoinButton: PreCallJoinBtn};
46
+ JoinButton: React.ComponentType<PreCallJoinCallBtnProps>;
47
+ Textbox: React.ComponentType<PreCallTextInputProps>;
48
+ } = {
49
+ Textbox: PreCallTextInput,
50
+ JoinButton: PreCallJoinBtn,
51
+ };
38
52
  // commented for v1 release
39
53
  // if (
40
54
  // data?.components?.precall &&
@@ -61,16 +75,116 @@ const JoinRoomInputView = () => {
61
75
  return components;
62
76
  });
63
77
  return (
64
- <View style={style.btnContainer}>
65
- <Textbox />
66
- <View style={{height: 20}} />
67
- <JoinButton />
78
+ <View
79
+ style={$config.EVENT_MODE ? style.lsBtnContainer : style.btnContainer}>
80
+ <Textbox
81
+ isDesktop={isDesktop}
82
+ labelStyle={$config.EVENT_MODE ? style.labelStyle : {}}
83
+ />
84
+ {$config.EVENT_MODE ? (
85
+ <>
86
+ {/* <Text style={style.subTextStyle}>
87
+ Enter the name you would like to join the room as
88
+ </Text> */}
89
+ {rtcProps.role == ClientRole.Audience && <Spacer size={40} />}
90
+ </>
91
+ ) : (
92
+ <></>
93
+ )}
94
+ <View
95
+ style={
96
+ $config.EVENT_MODE &&
97
+ rtcProps.role == ClientRole.Audience && {
98
+ justifyContent: 'space-between',
99
+ flex: 1,
100
+ }
101
+ }>
102
+ <Spacer size={10} />
103
+ <View
104
+ style={
105
+ $config.EVENT_MODE && isDesktop
106
+ ? style.btnContainerStyle
107
+ : {width: '100%'}
108
+ }>
109
+ <JoinButton />
110
+ </View>
111
+ </View>
68
112
  </View>
69
113
  );
70
114
  };
71
115
 
116
+ const JoinRoomName = ({isDesktop}) => {
117
+ const {JoinButton, Textbox} = useCustomization((data) => {
118
+ let components: {
119
+ JoinButton: React.ComponentType<PreCallJoinCallBtnProps>;
120
+ Textbox: React.ComponentType<PreCallTextInputProps>;
121
+ } = {
122
+ Textbox: PreCallTextInput,
123
+ JoinButton: PreCallJoinBtn,
124
+ };
125
+ // commented for v1 release
126
+ // if (
127
+ // data?.components?.precall &&
128
+ // typeof data?.components?.precall === 'object'
129
+ // ) {
130
+ // if (
131
+ // data?.components?.precall?.joinButton &&
132
+ // typeof data?.components?.precall?.joinButton !== 'object'
133
+ // ) {
134
+ // if (isValidReactComponent(data?.components?.precall?.joinButton)) {
135
+ // components.JoinButton = data?.components?.precall?.joinButton;
136
+ // }
137
+ // }
138
+
139
+ // if (
140
+ // data?.components?.precall?.textBox &&
141
+ // typeof data?.components?.precall?.textBox !== 'object'
142
+ // ) {
143
+ // if (isValidReactComponent(data?.components?.precall?.textBox)) {
144
+ // components.Textbox = data?.components?.precall?.textBox;
145
+ // }
146
+ // }
147
+ // }
148
+ return components;
149
+ });
150
+ return <Textbox isDesktop={isDesktop} />;
151
+ };
152
+
153
+ const JoinRoomButton = () => {
154
+ const {JoinButton, Textbox} = useCustomization((data) => {
155
+ let components: {
156
+ JoinButton: React.ComponentType<PreCallJoinCallBtnProps>;
157
+ Textbox: React.ComponentType;
158
+ } = {Textbox: PreCallTextInput, JoinButton: PreCallJoinBtn};
159
+ // commented for v1 release
160
+ // if (
161
+ // data?.components?.precall &&
162
+ // typeof data?.components?.precall === 'object'
163
+ // ) {
164
+ // if (
165
+ // data?.components?.precall?.joinButton &&
166
+ // typeof data?.components?.precall?.joinButton !== 'object'
167
+ // ) {
168
+ // if (isValidReactComponent(data?.components?.precall?.joinButton)) {
169
+ // components.JoinButton = data?.components?.precall?.joinButton;
170
+ // }
171
+ // }
172
+
173
+ // if (
174
+ // data?.components?.precall?.textBox &&
175
+ // typeof data?.components?.precall?.textBox !== 'object'
176
+ // ) {
177
+ // if (isValidReactComponent(data?.components?.precall?.textBox)) {
178
+ // components.Textbox = data?.components?.precall?.textBox;
179
+ // }
180
+ // }
181
+ // }
182
+ return components;
183
+ });
184
+ return <JoinButton />;
185
+ };
186
+
72
187
  const Precall = () => {
73
- const {primaryColor} = useContext(ColorContext);
74
188
  const {rtcProps} = useContext(PropsContext);
75
189
  const {
76
190
  VideoPreview,
@@ -84,7 +198,7 @@ const Precall = () => {
84
198
  PrecallBeforeView: React.ComponentType;
85
199
  DeviceSelect: React.ComponentType;
86
200
  VideoPreview: React.ComponentType;
87
- MeetingName: React.ComponentType;
201
+ MeetingName: React.ComponentType<MeetingTitleProps>;
88
202
  } = {
89
203
  PrecallAfterView: React.Fragment,
90
204
  PrecallBeforeView: React.Fragment,
@@ -146,19 +260,10 @@ const Precall = () => {
146
260
  const rtc = useRtc();
147
261
  const isSDK = isSDKCheck();
148
262
 
149
- const [dim, setDim] = useState<[number, number]>([
150
- Dimensions.get('window').width,
151
- Dimensions.get('window').height,
152
- ]);
153
-
154
- let onLayout = (e: any) => {
155
- setDim([e.nativeEvent.layout.width, e.nativeEvent.layout.height]);
156
- };
157
-
158
263
  useEffect(() => {
159
264
  if (isWebInternal() && !isSDK) {
160
265
  if (meetingTitle) {
161
- document.title = meetingTitle + ' | ' + $config.APP_NAME;
266
+ document.title = trimText(meetingTitle) + ' | ' + $config.APP_NAME;
162
267
  }
163
268
  }
164
269
  });
@@ -176,12 +281,6 @@ const Precall = () => {
176
281
  }
177
282
  }, [isJoinDataFetched]);
178
283
 
179
- const isMobileView = () => dim[0] < dim[1] + 150;
180
-
181
- if (!isJoinDataFetched) return <Text style={style.titleFont}>Loading..</Text>;
182
-
183
- const brandHolder = () => <PreCallLogo />;
184
-
185
284
  const FpePrecallComponent = useCustomization((data) => {
186
285
  // commented for v1 release
187
286
  // if (
@@ -196,145 +295,180 @@ const Precall = () => {
196
295
  return undefined;
197
296
  });
198
297
 
298
+ const isDesktop = useIsDesktop();
299
+ const getResponsiveValue = useResponsive();
300
+ if (!isJoinDataFetched) return <Text style={style.titleFont}>Loading..</Text>;
199
301
  return FpePrecallComponent ? (
200
302
  <FpePrecallComponent />
201
303
  ) : (
202
304
  <>
203
305
  <PrecallBeforeView />
204
- <View style={style.main} onLayout={onLayout}>
205
- {/* Precall screen only changes for audience in Live Stream event */}
206
- {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
207
- <View style={style.preCallContainer}>
208
- {brandHolder()}
209
- <MeetingName />
210
- <JoinRoomInputView />
211
- </View>
212
- ) : (
213
- <>
214
- {brandHolder()}
215
- <View style={style.content}>
216
- <View style={style.upperContainer}>
306
+ {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
307
+ <View style={style.root}>
308
+ <ScrollView contentContainerStyle={style.main}>
309
+ <Card>
310
+ <View>
311
+ <MeetingName textStyle={style.meetingTitleStyle} />
312
+ </View>
313
+ <Spacer size={32} />
314
+ <JoinRoomInputView isDesktop={true} />
315
+ </Card>
316
+ </ScrollView>
317
+ </View>
318
+ ) : (
319
+ <View style={style.root}>
320
+ <ScrollView
321
+ contentContainerStyle={[
322
+ style.main,
323
+ {padding: 32, flexDirection: 'column'},
324
+ ]}
325
+ testID="precall-screen">
326
+ <>
327
+ <MeetingName textStyle={{textAlign: 'left'}} />
328
+ <Spacer size={32} />
329
+ <View
330
+ style={{
331
+ flex: 1,
332
+ flexDirection: !isDesktop() ? 'column' : 'row',
333
+ justifyContent: 'space-between',
334
+ }}>
217
335
  <View
218
- style={[
219
- style.leftContent,
220
- isMobileView() ? {paddingRight: 0} : {paddingRight: 40},
221
- ]}>
336
+ testID="precall-preview"
337
+ style={
338
+ !isDesktop()
339
+ ? style.leftContentVertical
340
+ : style.leftContentHorizontal
341
+ }>
222
342
  <VideoPreview />
223
- <PreCallLocalMute />
224
- <View style={{marginBottom: '10%'}}>
225
- {/* This view is visible only on MOBILE view */}
226
- {isMobileView() && <JoinRoomInputView />}
227
- </View>
228
343
  </View>
229
- {/* This view is visible only on WEB view */}
230
- {!isMobileView() && (
231
- <View style={style.rightContent}>
232
- <MeetingName />
233
- <View
234
- style={[
235
- {shadowColor: primaryColor},
236
- style.precallPickers,
237
- ]}>
238
- <DeviceSelect />
239
- <View style={{width: '100%'}}>
240
- <JoinRoomInputView />
241
- </View>
242
- </View>
344
+ <Spacer size={24} horizontal={!isDesktop() ? false : true} />
345
+ <Card
346
+ style={
347
+ !isDesktop()
348
+ ? style.rightContentVertical
349
+ : style.rightContentHorizontal
350
+ }>
351
+ <View style={style.rightInputContent}>
352
+ <JoinRoomName isDesktop={true} />
353
+ <DeviceSelect />
243
354
  </View>
244
- )}
355
+ <View
356
+ style={{
357
+ width: '100%',
358
+ padding: 32,
359
+ }}>
360
+ <JoinRoomButton />
361
+ </View>
362
+ </Card>
363
+ {/* {!isDesktop() ? <Spacer size={24} horizontal={false} /> : <></>} */}
245
364
  </View>
246
- </View>
247
- </>
248
- )}
249
- </View>
365
+ </>
366
+ </ScrollView>
367
+ </View>
368
+ )}
250
369
  <PrecallAfterView />
251
370
  </>
252
371
  );
253
372
  };
254
373
 
255
374
  const style = StyleSheet.create({
256
- full: {flex: 1},
257
- main: {
258
- flex: 2,
259
- // justifyContent: 'space-evenly',
260
- marginHorizontal: '10%',
261
- minHeight: 500,
375
+ labelStyle: {
376
+ paddingLeft: 8,
262
377
  },
263
- preCallContainer: {
264
- display: 'flex',
265
- flexDirection: 'column',
266
- minHeight: 350,
267
- justifyContent: 'space-between',
268
- marginTop: '15%',
378
+ subTextStyle: {
379
+ marginTop: 8,
380
+ marginLeft: 8,
381
+ fontFamily: ThemeConfig.FontFamily.sansPro,
382
+ fontWeight: '400',
383
+ fontSize: ThemeConfig.FontSize.small,
384
+ lineHeight: 18,
385
+ color: $config.SEMANTIC_NEUTRAL,
386
+ textAlign: 'left',
269
387
  },
270
- nav: {
388
+ btnContainerStyle: {maxWidth: 337, alignSelf: 'center', marginTop: 50},
389
+ root: {
271
390
  flex: 1,
272
- width: '100%',
391
+ },
392
+ main: {
393
+ flexGrow: 1,
273
394
  flexDirection: 'row',
274
- alignItems: 'center',
275
395
  justifyContent: 'center',
276
396
  },
277
- content: {flex: 6, flexDirection: 'column'},
278
- leftContent: {
279
- flex: 1.3,
280
- height: '100%',
397
+ leftContentHorizontal: {
398
+ flex: 2.5,
399
+ borderRadius: ThemeConfig.BorderRadius.large,
400
+ overflow: 'hidden',
401
+ borderWidth: 1,
402
+ borderColor: $config.CARD_LAYER_3_COLOR,
403
+ shadowColor: $config.HARD_CODED_BLACK_COLOR,
404
+ shadowOffset: {width: 0, height: 4},
405
+ shadowOpacity: 0.1,
406
+ shadowRadius: 8,
407
+ elevation: 5,
281
408
  },
282
- upperContainer: {
283
- display: 'flex',
284
- flexDirection: 'row',
285
- alignItems: 'flex-start',
286
- flex: 3,
409
+ leftContentVertical: {
410
+ width: '100%',
411
+ borderRadius: ThemeConfig.BorderRadius.large,
412
+ overflow: 'hidden',
413
+ borderWidth: 1,
414
+ borderColor: $config.CARD_LAYER_3_COLOR,
415
+ shadowColor: $config.HARD_CODED_BLACK_COLOR,
416
+ shadowOffset: {width: 0, height: 4},
417
+ shadowOpacity: 0.1,
418
+ shadowRadius: 8,
419
+ elevation: 5,
287
420
  },
288
- rightContent: {
421
+ rightContentHorizontal: {
289
422
  flex: 1,
290
- height: '70%',
291
- backgroundColor: $config.SECONDARY_FONT_COLOR + '25',
292
- paddingLeft: 20,
293
- borderRadius: 10,
294
- alignItems: 'center',
295
- borderWidth: 1,
296
- borderStyle: 'solid',
297
- borderColor: $config.PRIMARY_COLOR,
298
- justifyContent: 'center',
423
+ borderRadius: ThemeConfig.BorderRadius.large,
424
+ paddingHorizontal: 0,
425
+ paddingVertical: 0,
426
+ height: '100%',
427
+ minWidth: 350,
428
+ justifyContent: 'space-between',
429
+ marginHorizontal: 0,
430
+ marginVertical: 0,
431
+ },
432
+ rightContentVertical: {
433
+ flex: 1,
434
+ borderRadius: ThemeConfig.BorderRadius.large,
435
+ paddingHorizontal: 0,
436
+ paddingVertical: 0,
437
+ maxWidth: '100%',
438
+ height: '100%',
439
+ justifyContent: 'space-between',
440
+ marginHorizontal: 0,
441
+ },
442
+ rightInputContent: {
443
+ padding: 32,
299
444
  },
300
445
  titleFont: {
301
446
  textAlign: 'center',
302
447
  fontSize: 20,
303
- color: $config.PRIMARY_FONT_COLOR,
304
- },
305
- titleHeading: {
306
- fontSize: 28,
307
- fontWeight: '700',
308
- textAlign: 'center',
309
- color: $config.SECONDARY_FONT_COLOR,
310
- },
311
- subHeading: {
312
- fontSize: 18,
313
- fontWeight: '700',
314
- color: $config.PRIMARY_FONT_COLOR,
448
+ color: $config.PRIMARY_ACTION_TEXT_COLOR,
315
449
  },
316
450
  btnContainer: {
317
451
  flex: 1,
318
452
  width: '100%',
319
453
  justifyContent: 'center',
320
- alignItems: 'center',
454
+ //alignItems: 'center',
321
455
  },
322
- precallControls: {
323
- flexDirection: 'row',
324
- alignSelf: 'center',
325
- padding: 10,
326
- width: '40%',
327
- justifyContent: 'space-around',
328
- marginVertical: '5%',
456
+ lsBtnContainer: {
457
+ flex: 1,
458
+ width: '100%',
459
+ justifyContent: 'center',
460
+ },
461
+ meetingTitleContainer: {
462
+ marginVertical: 10,
329
463
  },
330
- precallPickers: {
331
- alignItems: 'center',
332
- alignSelf: 'center',
333
- justifyContent: 'space-around',
334
- marginBottom: '10%',
335
- height: '35%',
336
- minHeight: 280,
464
+ meetingTitleStyle: {
465
+ fontFamily: ThemeConfig.FontFamily.sansPro,
466
+ fontWeight: '700',
467
+ fontSize: ThemeConfig.FontSize.extraLarge,
468
+ lineHeight: ThemeConfig.FontSize.extraLarge,
469
+ color: $config.FONT_COLOR,
470
+ paddingLeft: 0,
337
471
  },
338
472
  });
339
473
 
340
- export default Precall;
474
+ export default isMobileUA() ? PrecallNative : Precall;
@@ -18,7 +18,7 @@ import {RtcContext} from '../../agora-rn-uikit';
18
18
  import {Platform} from 'react-native';
19
19
  import {backOff} from 'exponential-backoff';
20
20
  import {useString} from '../utils/useString';
21
- import {isAndroid, isWebInternal} from '../utils/common';
21
+ import {isAndroid, isWeb, isWebInternal} from '../utils/common';
22
22
  import {useRender, useRtc} from 'customization-api';
23
23
  import {
24
24
  safeJsonParse,
@@ -37,6 +37,7 @@ export enum UserType {
37
37
  }
38
38
 
39
39
  const RtmConfigure = (props: any) => {
40
+ const rtmInitTimstamp = new Date().getTime();
40
41
  const localUid = useLocalUid();
41
42
  const {callActive} = props;
42
43
  const {rtcProps} = useContext(PropsContext);
@@ -82,15 +83,28 @@ const RtmConfigure = (props: any) => {
82
83
  }, [renderList]);
83
84
 
84
85
  React.useEffect(() => {
85
- const handBrowserClose = () => {
86
+ const handBrowserClose = (ev) => {
87
+ ev.preventDefault();
88
+ return (ev.returnValue = 'Are you sure you want to exit?');
89
+ };
90
+ const logoutRtm = () => {
86
91
  engine.current.leaveChannel(rtcProps.channel);
87
92
  };
88
93
 
89
94
  if (!isWebInternal()) return;
90
- window.addEventListener('beforeunload', handBrowserClose);
95
+ window.addEventListener(
96
+ 'beforeunload',
97
+ isWeb() ? handBrowserClose : () => {},
98
+ );
99
+
100
+ window.addEventListener('pagehide', logoutRtm);
91
101
  // cleanup this component
92
102
  return () => {
93
- window.removeEventListener('beforeunload', handBrowserClose);
103
+ window.removeEventListener(
104
+ 'beforeunload',
105
+ isWeb() ? handBrowserClose : () => {},
106
+ );
107
+ window.removeEventListener('pagehide', logoutRtm);
94
108
  };
95
109
  }, []);
96
110
 
@@ -196,6 +210,9 @@ const RtmConfigure = (props: any) => {
196
210
  screenUid: screenUid,
197
211
  //below thing for livestreaming
198
212
  type: 'rtc',
213
+ uid,
214
+ offline: false,
215
+ lastMessageTimeStamp: 0,
199
216
  };
200
217
  updateRenderListState(uid, userData);
201
218
  //end- updating user data in rtc
@@ -203,6 +220,7 @@ const RtmConfigure = (props: any) => {
203
220
  //start - updating screenshare data in rtc
204
221
  const screenShareUser = {
205
222
  type: UserType.ScreenShare,
223
+ parentUid: uid,
206
224
  };
207
225
  updateRenderListState(screenUid, screenShareUser);
208
226
  //end - updating screenshare data in rtc
@@ -286,6 +304,9 @@ const RtmConfigure = (props: any) => {
286
304
  screenUid: screenUid,
287
305
  //below thing for livestreaming
288
306
  type: 'rtc',
307
+ uid,
308
+ offline: false,
309
+ lastMessageTimeStamp: 0,
289
310
  };
290
311
  updateRenderListState(uid, userData);
291
312
  //end- updating user data in rtc
@@ -293,6 +314,7 @@ const RtmConfigure = (props: any) => {
293
314
  //start - updating screenshare data in rtc
294
315
  const screenShareUser = {
295
316
  type: UserType.ScreenShare,
317
+ parentUid: uid,
296
318
  };
297
319
  updateRenderListState(screenUid, screenShareUser);
298
320
  //end - updating screenshare data in rtc
@@ -418,6 +440,7 @@ const RtmConfigure = (props: any) => {
418
440
  return (
419
441
  <ChatContext.Provider
420
442
  value={{
443
+ rtmInitTimstamp,
421
444
  hasUserJoinedRTM,
422
445
  engine: engine.current,
423
446
  localUid: localUid,
@@ -17,4 +17,5 @@ export {
17
17
  Redirect,
18
18
  useHistory,
19
19
  useParams,
20
+ Prompt,
20
21
  } from 'react-router-dom';
@@ -18,4 +18,5 @@ export {
18
18
  useHistory,
19
19
  useParams,
20
20
  BackButton,
21
+ Prompt,
21
22
  } from 'react-router-native';
@@ -17,4 +17,5 @@ export {
17
17
  Redirect,
18
18
  useHistory,
19
19
  useParams,
20
+ Prompt,
20
21
  } from 'react-router-dom';
@@ -17,4 +17,5 @@ export {
17
17
  Redirect,
18
18
  useHistory,
19
19
  useParams,
20
+ Prompt,
20
21
  } from 'react-router-dom';