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,13 +9,19 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- // @ts-nocheck
13
- import React, {useState} from 'react';
14
- import {View, Text, StyleSheet, Dimensions, ScrollView} from 'react-native';
12
+ import React, {useState, useContext} from 'react';
13
+ import {
14
+ View,
15
+ Text,
16
+ StyleSheet,
17
+ ScrollView,
18
+ TouchableOpacity,
19
+ Image,
20
+ Pressable,
21
+ } from 'react-native';
15
22
  import platform from '../subComponents/Platform';
16
23
  import PrimaryButton from '../atoms/PrimaryButton';
17
24
  import SecondaryButton from '../atoms/SecondaryButton';
18
- import {BtnTemplate} from '../../agora-rn-uikit';
19
25
  import {SHARE_LINK_CONTENT_TYPE, useShareLink} from './useShareLink';
20
26
  import {useString} from '../utils/useString';
21
27
  import isSDKCheck from '../utils/isSDK';
@@ -23,31 +29,25 @@ import Logo from '../components/common/Logo';
23
29
  import {useMeetingInfo} from './meeting-info/useMeetingInfo';
24
30
  import {useHistory} from '../components/Router';
25
31
  import {useCustomization} from 'customization-implementation';
26
- import {isValidReactComponent} from '../utils/common';
32
+ import {isMobileUA, isValidReactComponent, trimText} from '../utils/common';
33
+ import Card from '../atoms/Card';
34
+ import Spacer from '../atoms/Spacer';
35
+ import LinkButton from '../atoms/LinkButton';
36
+ import ImageIcon from '../atoms/ImageIcon';
37
+ import ThemeConfig from '../theme';
38
+ import Tooltip from '../atoms/Tooltip';
27
39
 
28
- const Share = () => {
29
- const {FpeShareComponent} = useCustomization((data) => {
30
- let components: {
31
- FpeShareComponent?: React.ElementType;
32
- } = {};
33
- // commented for v1 release
34
- // if (
35
- // data?.components?.share &&
36
- // typeof data?.components?.share !== 'object'
37
- // ) {
38
- // if (
39
- // data?.components?.share &&
40
- // isValidReactComponent(data?.components?.share)
41
- // ) {
42
- // components.FpeShareComponent = data?.components?.share;
43
- // }
44
- // }
45
- return components;
46
- });
40
+ const isLiveStream = $config.EVENT_MODE;
41
+
42
+ export interface CopyMeetingInfoProps {
43
+ showSubLabel?: boolean;
44
+ }
45
+ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
47
46
  const {copyShareLinkToClipboard, getShareLink} = useShareLink();
48
47
  const {
49
- data: {roomId, pstn, isSeparateHostLink},
48
+ data: {roomId, isHost, pstn, isSeparateHostLink, meetingTitle},
50
49
  } = useMeetingInfo();
50
+ const {showSubLabel = true} = props;
51
51
  //commented for v1 release
52
52
  // const meetingUrlText = useString('meetingUrlLabel')();
53
53
  // const meetingIdText = useString('meetingIdLabel')();
@@ -62,16 +62,18 @@ const Share = () => {
62
62
  // 'enterMeetingAfterCreateButton',
63
63
  // )();
64
64
  // const copyInviteButton = useString('copyInviteButton')();
65
- const meetingUrlText = 'Meeting URL';
65
+ const meetingUrlText = 'Meeting Link';
66
66
  const meetingIdText = 'Meeting ID';
67
67
  const hostIdText = 'Host ID';
68
- const attendeeUrlLabel = 'Attendee URL';
68
+ const attendeeUrlLabel = 'Attendee Link';
69
69
  const attendeeIdLabel = 'Attendee ID';
70
- const hostUrlLabel = 'Host URL';
70
+ const hostUrlLabel = 'Host Link';
71
71
  const pstnLabel = 'PSTN';
72
72
  const pstnNumberLabel = 'Number';
73
73
  const pinLabel = 'Pin';
74
- const enterMeetingAfterCreateButton = 'Start Meeting (as host)';
74
+ const enterMeetingAfterCreateButton = isLiveStream
75
+ ? 'Start Stream (as host)'
76
+ : 'Start Meeting (as host)';
75
77
  const copyInviteButton = 'Copy invite to clipboard';
76
78
  const history = useHistory();
77
79
  const enterMeeting = () => {
@@ -79,15 +81,6 @@ const Share = () => {
79
81
  history.push(roomId.host);
80
82
  }
81
83
  };
82
-
83
- const [dim, setDim] = useState([
84
- Dimensions.get('window').width,
85
- Dimensions.get('window').height,
86
- Dimensions.get('window').width > Dimensions.get('window').height,
87
- ]);
88
- let onLayout = (e: any) => {
89
- setDim([e.nativeEvent.layout.width, e.nativeEvent.layout.height]);
90
- };
91
84
  const isSDK = isSDKCheck();
92
85
  const isWebCheck =
93
86
  $config.FRONTEND_ENDPOINT || (platform === 'web' && !isSDK);
@@ -108,273 +101,309 @@ const Share = () => {
108
101
  return meetingIdText;
109
102
  }
110
103
  };
111
- return FpeShareComponent ? (
112
- <FpeShareComponent />
113
- ) : (
114
- <ScrollView contentContainerStyle={style.scrollMain}>
115
- <Logo />
116
- <View style={style.content} onLayout={onLayout}>
117
- <View style={style.leftContent}>
118
- <Text style={style.heading}>{$config.APP_NAME}</Text>
119
- <Text style={style.headline}>{$config.LANDING_SUB_HEADING}</Text>
120
- {isSeparateHostLink ? (
121
- <View style={style.urlContainer}>
122
- <View style={{width: '80%'}}>
123
- <Text style={style.urlTitle}>{getAttendeeLabel()}</Text>
124
- <View style={style.urlHolder}>
125
- <Text style={[style.url, isWebCheck ? urlWeb : {opacity: 1}]}>
126
- {getShareLink(SHARE_LINK_CONTENT_TYPE.ATTENDEE)}
127
- </Text>
128
- </View>
129
- </View>
130
- <View
131
- style={{
132
- marginLeft: 'auto',
133
- flexDirection: 'row',
134
- alignSelf: 'center',
104
+
105
+ const clipboardIconButton = (type: SHARE_LINK_CONTENT_TYPE) => {
106
+ return (
107
+ <View style={style.iconContainer}>
108
+ <Tooltip
109
+ isClickable
110
+ onPress={() => {
111
+ copyShareLinkToClipboard(type);
112
+ }}
113
+ toolTipIcon={
114
+ <>
115
+ <ImageIcon
116
+ iconType="plain"
117
+ name="tick-fill"
118
+ tintColor={$config.SEMANTIC_SUCCESS}
119
+ />
120
+ <Spacer size={8} horizontal={true} />
121
+ </>
122
+ }
123
+ toolTipMessage="Copied to clipboard"
124
+ renderContent={(isToolTipVisible, setToolTipVisible) => {
125
+ return (
126
+ <TouchableOpacity
127
+ onPress={() => {
128
+ copyShareLinkToClipboard(type, () => {
129
+ setToolTipVisible(true);
130
+ });
131
+ //setToolTipVisible(true);
135
132
  }}>
136
- <View
137
- style={{
138
- backgroundColor: $config.PRIMARY_COLOR + '80',
139
- width: 1,
140
- height: 'auto',
141
- marginRight: 15,
142
- }}
133
+ <ImageIcon
134
+ iconType="plain"
135
+ name="clipboard"
136
+ tintColor={$config.PRIMARY_ACTION_BRAND_COLOR}
143
137
  />
144
- <View style={style.clipboardIconHolder}>
145
- <BtnTemplate
146
- style={style.clipboardIcon}
147
- color={$config.PRIMARY_COLOR}
148
- name={'clipboard'}
149
- onPress={() =>
150
- copyShareLinkToClipboard(SHARE_LINK_CONTENT_TYPE.ATTENDEE)
151
- }
152
- />
153
- </View>
154
- </View>
138
+ </TouchableOpacity>
139
+ );
140
+ }}
141
+ />
142
+ </View>
143
+ );
144
+ };
145
+ return (
146
+ <>
147
+ {isSeparateHostLink ? (
148
+ <>
149
+ <Text style={style.urlTitle}>{getAttendeeLabel()}</Text>
150
+ <Spacer size={11} />
151
+ <View style={style.container}>
152
+ <View style={style.urlContainer}>
153
+ <Text
154
+ numberOfLines={1}
155
+ ellipsizeMode="tail"
156
+ style={[
157
+ style.url,
158
+ style.urlPadding,
159
+ //@ts-ignore
160
+ isWebCheck ? urlWeb : {opacity: 1},
161
+ ]}>
162
+ {getShareLink(SHARE_LINK_CONTENT_TYPE.ATTENDEE)}
163
+ </Text>
155
164
  </View>
156
- ) : (
157
- <></>
165
+ {clipboardIconButton(SHARE_LINK_CONTENT_TYPE.ATTENDEE)}
166
+ </View>
167
+
168
+ {showSubLabel && (
169
+ <>
170
+ <Spacer size={14} />
171
+ <Text style={style.helpText}>
172
+ Share this with attendees you want to invite.
173
+ </Text>
174
+ </>
158
175
  )}
159
- <View style={style.urlContainer}>
160
- <View style={{width: '80%'}}>
161
- <Text style={style.urlTitle}>{getHostLabel()}</Text>
162
- <View style={style.urlHolder}>
163
- <Text style={[style.url, isWebCheck ? urlWeb : {opacity: 1}]}>
164
- {getShareLink(SHARE_LINK_CONTENT_TYPE.HOST)}
165
- </Text>
166
- </View>
167
- </View>
168
- <View
169
- style={{
170
- marginLeft: 'auto',
171
- flexDirection: 'row',
172
- alignSelf: 'center',
173
- }}>
174
- <View
175
- style={{
176
- backgroundColor: $config.PRIMARY_COLOR + '80',
177
- width: 1,
178
- height: 'auto',
179
- marginRight: 15,
180
- }}
181
- />
182
- <View style={style.clipboardIconHolder}>
183
- <BtnTemplate
184
- style={style.clipboardIcon}
185
- color={$config.PRIMARY_COLOR}
186
- name={'clipboard'}
187
- onPress={() =>
188
- copyShareLinkToClipboard(SHARE_LINK_CONTENT_TYPE.HOST)
189
- }
190
- />
191
- </View>
176
+ <Spacer size={25} />
177
+ </>
178
+ ) : (
179
+ <></>
180
+ )}
181
+ {isHost ? (
182
+ <>
183
+ <Text style={style.urlTitle}>{getHostLabel()}</Text>
184
+ <Spacer size={11} />
185
+ <View style={style.container}>
186
+ <View style={style.urlContainer}>
187
+ <Text
188
+ numberOfLines={1}
189
+ ellipsizeMode="tail"
190
+ style={[
191
+ style.url,
192
+ style.urlPadding,
193
+ //@ts-ignore
194
+ isWebCheck ? urlWeb : {opacity: 1},
195
+ ]}>
196
+ {getShareLink(SHARE_LINK_CONTENT_TYPE.HOST)}
197
+ </Text>
192
198
  </View>
199
+ {clipboardIconButton(SHARE_LINK_CONTENT_TYPE.HOST)}
193
200
  </View>
194
- {pstn ? (
195
- <View style={style.urlContainer}>
196
- <View style={{width: '80%'}}>
197
- <Text style={style.urlTitle}>{pstnLabel}</Text>
198
- <View>
199
- <View style={style.pstnHolder}>
200
- <Text style={style.urlTitle}>{pstnNumberLabel}: </Text>
201
- <Text
202
- style={[style.url, isWebCheck ? urlWeb : {opacity: 1}]}>
203
- {pstn?.number}
204
- </Text>
205
- </View>
206
- <View style={style.pstnHolder}>
207
- <Text style={style.urlTitle}>{pinLabel}: </Text>
208
- <Text
209
- style={[style.url, isWebCheck ? urlWeb : {opacity: 1}]}>
210
- {pstn?.pin}
211
- </Text>
212
- </View>
213
- </View>
214
- </View>
215
- <View style={{marginLeft: 'auto', flexDirection: 'row'}}>
216
- <View
217
- style={{
218
- backgroundColor: $config.PRIMARY_COLOR + '80',
219
- width: 1,
220
- height: 'auto',
221
- marginRight: 15,
222
- }}
223
- />
224
- <View style={style.clipboardIconHolder}>
225
- <BtnTemplate
226
- style={style.clipboardIcon}
227
- color={$config.PRIMARY_COLOR}
228
- name={'clipboard'}
229
- onPress={() =>
230
- copyShareLinkToClipboard(SHARE_LINK_CONTENT_TYPE.PSTN)
231
- }
232
- />
233
- </View>
201
+
202
+ {showSubLabel && (
203
+ <>
204
+ <Spacer size={14} />
205
+ <Text style={style.helpText}>
206
+ Share this with other co-hosts you want to invite.
207
+ </Text>
208
+ </>
209
+ )}
210
+ <Spacer size={25} />
211
+ </>
212
+ ) : (
213
+ <></>
214
+ )}
215
+ {pstn ? (
216
+ <>
217
+ <Text style={style.urlTitle}>{pstnLabel}</Text>
218
+ <Spacer size={11} />
219
+ <View style={style.container}>
220
+ <View style={[style.urlContainer, style.urlPadding]}>
221
+ <View>
222
+ <Text
223
+ style={[
224
+ style.url,
225
+ //@ts-ignore
226
+ isWebCheck ? urlWeb : {opacity: 1},
227
+ ]}>
228
+ {pstnNumberLabel} - {pstn?.number} {' | '} {pinLabel} -{' '}
229
+ {pstn?.pin}
230
+ </Text>
234
231
  </View>
235
232
  </View>
236
- ) : (
237
- <></>
233
+ {clipboardIconButton(SHARE_LINK_CONTENT_TYPE.PSTN)}
234
+ </View>
235
+
236
+ {showSubLabel && (
237
+ <>
238
+ <Spacer size={14} />
239
+ <Text style={style.helpText}>
240
+ Share this phone number and pin to dial from phone.
241
+ </Text>
242
+ </>
238
243
  )}
239
- <PrimaryButton
240
- onPress={() => enterMeeting()}
241
- text={enterMeetingAfterCreateButton}
242
- />
243
- <View style={{height: 10}} />
244
- <SecondaryButton
245
- onPress={() =>
246
- copyShareLinkToClipboard(SHARE_LINK_CONTENT_TYPE.MEETING_INVITE)
247
- }
248
- text={copyInviteButton}
249
- />
250
- </View>
251
- </View>
252
- </ScrollView>
244
+ {/* <Spacer size={25} /> */}
245
+ </>
246
+ ) : (
247
+ <></>
248
+ )}
249
+ </>
250
+ );
251
+ };
252
+
253
+ const Share = () => {
254
+ const {FpeShareComponent} = useCustomization((data) => {
255
+ let components: {
256
+ FpeShareComponent?: React.ElementType;
257
+ } = {};
258
+ // commented for v1 release
259
+ // if (
260
+ // data?.components?.share &&
261
+ // typeof data?.components?.share !== 'object'
262
+ // ) {
263
+ // if (
264
+ // data?.components?.share &&
265
+ // isValidReactComponent(data?.components?.share)
266
+ // ) {
267
+ // components.FpeShareComponent = data?.components?.share;
268
+ // }
269
+ // }
270
+ return components;
271
+ });
272
+ const {copyShareLinkToClipboard} = useShareLink();
273
+ const {
274
+ data: {roomId, meetingTitle},
275
+ } = useMeetingInfo();
276
+
277
+ const enterMeetingAfterCreateButton = isLiveStream
278
+ ? 'Start Stream (as host)'
279
+ : 'Start Meeting (as host)';
280
+ const copyInviteButton = 'Copy invite to clipboard';
281
+ const history = useHistory();
282
+ const enterMeeting = () => {
283
+ if (roomId?.host) {
284
+ history.push(roomId.host);
285
+ }
286
+ };
287
+ const isSDK = isSDKCheck();
288
+ const isWebCheck =
289
+ $config.FRONTEND_ENDPOINT || (platform === 'web' && !isSDK);
290
+
291
+ return FpeShareComponent ? (
292
+ <FpeShareComponent />
293
+ ) : (
294
+ <View style={style.root}>
295
+ <ScrollView contentContainerStyle={style.scrollMain}>
296
+ <Card>
297
+ <View>
298
+ <Logo />
299
+ <Spacer size={20} />
300
+ <Text style={style.heading} numberOfLines={1}>
301
+ {trimText(meetingTitle)}
302
+ </Text>
303
+ <Spacer size={40} />
304
+ <CopyMeetingInfo />
305
+ <Spacer size={60} />
306
+ </View>
307
+ <View style={style.btnContainer}>
308
+ <PrimaryButton
309
+ iconName="video-on"
310
+ onPress={() => enterMeeting()}
311
+ containerStyle={isMobileUA() && {width: '100%'}}
312
+ text={enterMeetingAfterCreateButton.toUpperCase()}
313
+ />
314
+ <Spacer size={16} />
315
+ <LinkButton
316
+ text={copyInviteButton}
317
+ onPress={() =>
318
+ copyShareLinkToClipboard(SHARE_LINK_CONTENT_TYPE.MEETING_INVITE)
319
+ }
320
+ />
321
+ </View>
322
+ </Card>
323
+ </ScrollView>
324
+ </View>
253
325
  );
254
326
  };
255
327
  const urlWeb = {wordBreak: 'break-all'};
256
328
 
257
329
  const style = StyleSheet.create({
258
- full: {flex: 1},
259
- scrollMain: {
260
- paddingVertical: '8%',
261
- marginHorizontal: '8%',
262
- display: 'flex',
263
- justifyContent: 'space-evenly',
264
- flexGrow: 1,
265
- },
266
- main: {
267
- flex: 2,
268
- justifyContent: 'space-evenly',
269
- marginHorizontal: '8%',
270
- marginVertical: '2%',
271
- },
272
- content: {flex: 6, flexDirection: 'row'},
273
- leftContent: {
274
- width: '100%',
330
+ root: {
275
331
  flex: 1,
276
- justifyContent: 'space-evenly',
277
- marginBottom: '12%',
278
- marginTop: '2%',
279
- // marginRight: '5%',
280
- marginHorizontal: 'auto',
281
- alignItems: 'center',
282
332
  },
283
- heading: {
284
- fontSize: 32,
285
- fontWeight: '700',
286
- textAlign: 'center',
287
- color: $config.PRIMARY_FONT_COLOR,
288
- marginBottom: 20,
289
- },
290
- headline: {
291
- fontSize: 18,
292
- fontWeight: '400',
293
- textAlign: 'center',
294
- color: $config.PRIMARY_FONT_COLOR,
295
- marginBottom: 20,
296
- },
297
- inputs: {
298
- flex: 1,
299
- width: '100%',
300
- alignSelf: 'flex-start',
301
- alignItems: 'center',
302
- justifyContent: 'space-evenly',
303
- },
304
- checkboxHolder: {
305
- marginVertical: 0,
333
+ scrollMain: {
334
+ flexGrow: 1,
306
335
  flexDirection: 'row',
307
336
  justifyContent: 'center',
308
- alignItems: 'center',
309
337
  },
310
- checkboxTitle: {
311
- color: $config.PRIMARY_FONT_COLOR,
312
- paddingHorizontal: 5,
338
+ heading: {
339
+ fontSize: ThemeConfig.FontSize.extraLarge,
313
340
  fontWeight: '700',
341
+ lineHeight: ThemeConfig.FontSize.extraLarge,
342
+ color: $config.FONT_COLOR,
343
+ fontFamily: ThemeConfig.FontFamily.sansPro,
344
+ paddingVertical: 2,
314
345
  },
315
- checkboxCaption: {color: '#333', paddingHorizontal: 5},
316
- checkboxTextHolder: {
317
- marginVertical: 0, //check if 5
318
- flexDirection: 'column',
319
- },
320
- urlContainer: {
321
- backgroundColor: $config.PRIMARY_COLOR + '22',
322
- padding: 10,
323
- marginBottom: 10,
324
- borderRadius: 10,
325
- width: '100%',
326
- // minWidth: ''
327
- maxWidth: 700,
346
+ container: {
328
347
  flexDirection: 'row',
329
- paddingHorizontal: 20,
330
348
  },
331
349
  urlTitle: {
332
- color: $config.PRIMARY_FONT_COLOR,
333
- fontSize: 18,
334
- fontWeight: '700',
335
- textAlign: 'left',
350
+ color: $config.FONT_COLOR,
351
+ fontSize: ThemeConfig.FontSize.medium,
352
+ fontWeight: '600',
353
+ fontFamily: ThemeConfig.FontFamily.sansPro,
354
+ paddingLeft: 8,
336
355
  },
337
- pstnHolder: {
338
- width: '100%',
339
- // paddingHorizontal: 10,
340
- marginTop: 10,
341
- flexDirection: 'row',
342
- alignItems: 'center',
343
- minHeight: 10,
356
+ urlContainer: {
357
+ flex: 0.9,
358
+ backgroundColor: $config.INPUT_FIELD_BACKGROUND_COLOR,
359
+ borderColor: $config.INPUT_FIELD_BORDER_COLOR,
360
+ borderWidth: 1,
361
+ borderTopLeftRadius: ThemeConfig.BorderRadius.medium,
362
+ borderBottomLeftRadius: ThemeConfig.BorderRadius.medium,
363
+ borderTopRightRadius: 0,
364
+ borderBottomRightRadius: 0,
344
365
  },
345
- urlHolder: {
346
- width: '100%',
347
- // paddingHorizontal: 10,
348
- // marginBottom: 15,
349
- flexDirection: 'row',
366
+ iconContainer: {
367
+ flex: 0.1,
368
+ minWidth: 25,
369
+ backgroundColor: $config.INPUT_FIELD_BACKGROUND_COLOR,
370
+ justifyContent: 'center',
350
371
  alignItems: 'center',
351
- // justifyContent: 'center',
352
- // maxWidth: 600,
353
- minHeight: 30,
372
+ borderColor: $config.INPUT_FIELD_BORDER_COLOR,
373
+ borderLeftWidth: 0,
374
+ borderRightWidth: 1,
375
+ borderTopWidth: 1,
376
+ borderBottomWidth: 1,
377
+ borderTopRightRadius: ThemeConfig.BorderRadius.medium,
378
+ borderBottomLeftRadius: 0,
379
+ borderBottomRightRadius: ThemeConfig.BorderRadius.medium,
380
+ borderTopLeftRadius: 0,
354
381
  },
355
382
  url: {
356
- color: $config.PRIMARY_FONT_COLOR,
357
- fontSize: 18,
358
- // textDecorationLine: 'underline',
359
- },
360
- // pstnHolder: {
361
- // flexDirection: 'row',
362
- // width: '80%',
363
- // },
364
- pstnMargin: {
365
- marginRight: '10%',
383
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.medium,
384
+ fontSize: ThemeConfig.FontSize.small,
385
+ fontWeight: '600',
386
+ fontFamily: ThemeConfig.FontFamily.sansPro,
366
387
  },
367
- clipboardIconHolder: {
368
- width: 40,
369
- height: 40,
370
- marginVertical: 'auto',
388
+ urlPadding: {
389
+ paddingHorizontal: 20,
390
+ paddingVertical: 21,
371
391
  },
372
392
  clipboardIcon: {
373
- width: 40,
374
- height: 40,
375
- marginVertical: 'auto',
376
- opacity: 0.5,
377
- backgroundColor: 'transparent',
393
+ width: 17,
394
+ height: 20,
395
+ },
396
+ btnContainer: {
397
+ width: '100%',
398
+ alignItems: 'center',
399
+ },
400
+ helpText: {
401
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.disabled,
402
+ fontSize: ThemeConfig.FontSize.small,
403
+ lineHeight: ThemeConfig.FontSize.small,
404
+ fontWeight: '400',
405
+ fontFamily: ThemeConfig.FontFamily.sansPro,
406
+ paddingLeft: 8,
378
407
  },
379
408
  });
380
409