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
@@ -10,18 +10,19 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {useEffect, useState, useContext} from 'react';
13
- import {View, Text, StyleSheet, ScrollView} from 'react-native';
13
+ import {View, Text, StyleSheet, ScrollView, Pressable} from 'react-native';
14
14
  import {useHistory} from '../components/Router';
15
- import Checkbox from '../subComponents/Checkbox';
16
15
  import PrimaryButton from '../atoms/PrimaryButton';
17
- import SecondaryButton from '../atoms/SecondaryButton';
18
- import HorizontalRule from '../atoms/HorizontalRule';
19
- import TextInput from '../atoms/TextInput';
20
16
  import Toast from '../../react-native-toast-message';
21
17
  import {ErrorContext} from '../components/common';
22
18
  import ShareLink from '../components/Share';
23
19
  import Logo from '../components/common/Logo';
24
- import {isWebInternal, isValidReactComponent} from '../utils/common';
20
+ import {
21
+ isWebInternal,
22
+ maxInputLimit,
23
+ isMobileUA,
24
+ trimText,
25
+ } from '../utils/common';
25
26
  import {useCustomization} from 'customization-implementation';
26
27
  import {useString} from '../utils/useString';
27
28
  import useCreateMeeting from '../utils/useCreateMeeting';
@@ -30,6 +31,17 @@ import useJoinMeeting from '../utils/useJoinMeeting';
30
31
  import SDKEvents from '../utils/SdkEvents';
31
32
  import {MeetingInfoDefaultValue} from '../components/meeting-info/useMeetingInfo';
32
33
  import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
34
+ import Input from '../atoms/Input';
35
+ import Toggle from '../atoms/Toggle';
36
+ import Card from '../atoms/Card';
37
+ import Spacer from '../atoms/Spacer';
38
+ import LinkButton from '../atoms/LinkButton';
39
+ import StorageContext from '../components/StorageContext';
40
+ import ThemeConfig from '../theme';
41
+ import Tooltip from '../atoms/Tooltip';
42
+ import ImageIcon from '../atoms/ImageIcon';
43
+ import hexadecimalTransparency from '../utils/hexadecimalTransparency';
44
+ import {randomNameGenerator} from '../utils';
33
45
 
34
46
  const Create = () => {
35
47
  const {CreateComponent} = useCustomization((data) => {
@@ -51,13 +63,14 @@ const Create = () => {
51
63
  });
52
64
 
53
65
  const useJoin = useJoinMeeting();
54
-
66
+ const {setStore} = useContext(StorageContext);
55
67
  const {setGlobalErrorMessage} = useContext(ErrorContext);
56
68
  const history = useHistory();
57
69
  const [loading, setLoading] = useState(false);
58
70
  const [roomTitle, onChangeRoomTitle] = useState('');
59
- const [pstnCheckbox, setPstnCheckbox] = useState(false);
60
- const [hostControlCheckbox, setHostControlCheckbox] = useState(true);
71
+ // const [randomRoomTitle, setRandomRoomTitle] = useState('');
72
+ const [pstnToggle, setPstnToggle] = useState(false);
73
+ const [coHostToggle, setCoHostToggle] = useState(false);
61
74
  const [roomCreated, setRoomCreated] = useState(false);
62
75
  const createRoomFun = useCreateMeeting();
63
76
  const {setMeetingInfo} = useSetMeetingInfo();
@@ -69,20 +82,41 @@ const Create = () => {
69
82
  // const createMeetingButton = useString('createMeetingButton')();
70
83
  // const haveMeetingID = useString('haveMeetingID')();
71
84
 
72
- const createdText = 'Created';
73
- const hostControlsToggle = (toggle: boolean) =>
74
- toggle
75
- ? 'Restrict Host Controls (Separate host link)'
76
- : 'Restrict Host Controls (Everyone is a Host)';
77
- const pstnToggle = (value: boolean) => 'Use PSTN (Join by dialing a number)';
78
- const meetingNameInputPlaceholder = useString(
79
- 'meetingNameInputPlaceholder',
80
- )();
85
+ const createdText = ' has been created';
86
+ // const meetingNameInputPlaceholder = useString(
87
+ // 'meetingNameInputPlaceholder',
88
+ // )();
89
+ const meetingNameInputPlaceholder = 'The Annual Galactic Meet';
81
90
  const loadingWithDots = 'Loading...';
82
- const createMeetingButton = 'Create Meeting';
83
- const haveMeetingID = 'Have a Meeting ID?';
84
91
 
92
+ const btnLabel = () => {
93
+ if ($config.AUDIO_ROOM) {
94
+ if ($config.EVENT_MODE) {
95
+ return 'CREATE A AUDIO LIVECAST';
96
+ } else {
97
+ return 'CREATE A VOICE CHAT';
98
+ }
99
+ } else {
100
+ if ($config.EVENT_MODE) {
101
+ return 'CREATE A STREAM';
102
+ } else {
103
+ return 'CREATE A MEETING';
104
+ }
105
+ }
106
+ };
107
+
108
+ const createMeetingButton = btnLabel();
109
+ const haveMeetingID = 'Join with a meeting ID';
110
+
111
+ const isDesktop = !isMobileUA();
85
112
  useEffect(() => {
113
+ //Generating the random room title for placeholder
114
+ // setRandomRoomTitle(
115
+ // `${randomNameGenerator(3)}-${randomNameGenerator(
116
+ // 3,
117
+ // )}-${randomNameGenerator(3)}`,
118
+ // );
119
+
86
120
  if (isWebInternal()) {
87
121
  document.title = $config.APP_NAME;
88
122
  }
@@ -123,8 +157,11 @@ const Create = () => {
123
157
  setLoading(false);
124
158
  Toast.show({
125
159
  type: 'success',
126
- text1: createdText + ': ' + roomTitle,
127
- visibilityTime: 1000,
160
+ text1: trimText(roomTitle) + createdText,
161
+ text2: 'Your New meeting is now live',
162
+ visibilityTime: 3000,
163
+ primaryBtn: null,
164
+ secondaryBtn: null,
128
165
  });
129
166
  showShareScreen();
130
167
  } catch (error) {
@@ -134,6 +171,66 @@ const Create = () => {
134
171
  }
135
172
  };
136
173
 
174
+ const renderInfoIcon = (isToolTipVisible, setToolTipVisible) => {
175
+ return (
176
+ <Pressable onPress={() => setToolTipVisible(true)}>
177
+ <ImageIcon
178
+ iconType="plain"
179
+ name="info"
180
+ iconSize={20}
181
+ tintColor={
182
+ isToolTipVisible
183
+ ? $config.SECONDARY_ACTION_COLOR
184
+ : $config.SEMANTIC_NEUTRAL
185
+ }
186
+ />
187
+ </Pressable>
188
+ );
189
+ };
190
+
191
+ const getHeading = () => {
192
+ if ($config.AUDIO_ROOM) {
193
+ if ($config.EVENT_MODE) {
194
+ return 'Create a Audio Livecast';
195
+ } else {
196
+ return 'Create a Voice Chat';
197
+ }
198
+ } else {
199
+ if ($config.EVENT_MODE) {
200
+ return 'Create a Livestream';
201
+ } else {
202
+ return 'Create a Meeting';
203
+ }
204
+ }
205
+ };
206
+
207
+ const getInputLabel = () => {
208
+ if ($config.AUDIO_ROOM) {
209
+ if ($config.EVENT_MODE) {
210
+ return 'Audio Livecast Name';
211
+ } else {
212
+ return 'Voice Chat Name';
213
+ }
214
+ } else {
215
+ if ($config.EVENT_MODE) {
216
+ return 'Stream Name';
217
+ } else {
218
+ return 'Meeting Name';
219
+ }
220
+ }
221
+ };
222
+
223
+ const showError = () => {
224
+ Toast.show({
225
+ type: 'error',
226
+ text1: 'Backend endpoint not configured',
227
+ text2: 'Please configure backend endpoint config.json',
228
+ visibilityTime: 1000 * 10,
229
+ primaryBtn: null,
230
+ secondaryBtn: null,
231
+ });
232
+ };
233
+
137
234
  return (
138
235
  <CreateProvider
139
236
  value={{
@@ -143,81 +240,142 @@ const Create = () => {
143
240
  CreateComponent ? (
144
241
  <CreateComponent />
145
242
  ) : (
146
- <ScrollView contentContainerStyle={style.main}>
147
- <Logo />
148
- <View style={style.content}>
149
- <View style={style.leftContent}>
150
- <Text style={style.heading}>{$config.APP_NAME}</Text>
151
- <Text style={style.headline}>
152
- {$config.LANDING_SUB_HEADING}
153
- </Text>
154
- <View style={style.inputs}>
155
- <TextInput
243
+ <View style={style.root}>
244
+ <ScrollView contentContainerStyle={style.main}>
245
+ <Card>
246
+ <View>
247
+ <Logo />
248
+ <Spacer size={isDesktop ? 20 : 16} />
249
+ <Text style={style.heading}>{getHeading()}</Text>
250
+ <Spacer size={40} />
251
+ <Input
252
+ maxLength={maxInputLimit}
253
+ labelStyle={style.inputLabelStyle}
254
+ label={getInputLabel()}
156
255
  value={roomTitle}
157
- onChangeText={(text) => onChangeRoomTitle(text)}
158
- onSubmitEditing={() =>
159
- createRoomAndNavigateToShare(
160
- roomTitle,
161
- pstnCheckbox,
162
- hostControlCheckbox,
163
- )
164
- }
165
256
  placeholder={meetingNameInputPlaceholder}
257
+ onChangeText={(text) => onChangeRoomTitle(text)}
258
+ onSubmitEditing={() => {
259
+ if (!roomTitle?.trim()) {
260
+ return;
261
+ } else {
262
+ if (!$config.BACKEND_ENDPOINT) {
263
+ showError();
264
+ } else {
265
+ // !roomTitle?.trim() &&
266
+ // onChangeRoomTitle(randomRoomTitle);
267
+ createRoomAndNavigateToShare(
268
+ roomTitle?.trim(),
269
+ pstnToggle,
270
+ !coHostToggle,
271
+ );
272
+ }
273
+ }
274
+ }}
166
275
  />
167
- <View style={{paddingVertical: 10}}>
168
- <View style={style.checkboxHolder}>
169
- {$config.EVENT_MODE ? (
170
- <></>
171
- ) : (
172
- <>
173
- <Checkbox
174
- disabled={$config.EVENT_MODE}
175
- value={hostControlCheckbox}
176
- onValueChange={setHostControlCheckbox}
177
- />
178
- <Text style={style.checkboxTitle}>
179
- {/* Restrict Host Controls (Separate host link) */}
180
- {hostControlsToggle(hostControlCheckbox)}
181
- </Text>
182
- </>
183
- )}
184
- </View>
185
- {$config.PSTN ? (
186
- <View style={style.checkboxHolder}>
187
- <Checkbox
188
- value={pstnCheckbox}
189
- onValueChange={setPstnCheckbox}
190
- />
191
- <Text style={style.checkboxTitle}>
192
- {pstnToggle(pstnCheckbox)}
276
+ <Spacer size={40} />
277
+ {$config.EVENT_MODE ? (
278
+ <></>
279
+ ) : (
280
+ <View
281
+ style={[
282
+ style.toggleContainer,
283
+ style.upper,
284
+ !$config.PSTN ? style.lower : {},
285
+ ]}>
286
+ <View style={style.infoContainer}>
287
+ <Text numberOfLines={1} style={style.toggleLabel}>
288
+ Make everyone a Co-Host
193
289
  </Text>
290
+ <Tooltip
291
+ activeBgStyle={style.tooltipActiveBgStyle}
292
+ defaultBgStyle={style.tooltipDefaultBgStyle}
293
+ toolTipMessage="Turning on will give everyone the control of this meeting"
294
+ renderContent={(
295
+ isToolTipVisible,
296
+ setToolTipVisible,
297
+ ) =>
298
+ renderInfoIcon(isToolTipVisible, setToolTipVisible)
299
+ }></Tooltip>
300
+ </View>
301
+ <View style={style.infoToggleContainer}>
302
+ <Toggle
303
+ disabled={$config.EVENT_MODE}
304
+ isEnabled={coHostToggle}
305
+ toggleSwitch={setCoHostToggle}
306
+ />
194
307
  </View>
195
- ) : (
196
- <></>
197
- )}
198
- </View>
199
- <View style={style.btnContainer}>
200
- <PrimaryButton
201
- disabled={roomTitle === '' || loading}
202
- onPress={() =>
308
+ </View>
309
+ )}
310
+ {$config.PSTN ? (
311
+ <>
312
+ <View style={style.separator} />
313
+ <View
314
+ style={[
315
+ style.toggleContainer,
316
+ style.lower,
317
+ $config.EVENT_MODE ? style.upper : {},
318
+ ]}>
319
+ <View style={style.infoContainer}>
320
+ <Text numberOfLines={1} style={style.toggleLabel}>
321
+ Allow joining via a phone number
322
+ </Text>
323
+ <Tooltip
324
+ activeBgStyle={style.tooltipActiveBgStyle}
325
+ defaultBgStyle={style.tooltipDefaultBgStyle}
326
+ toolTipMessage="Attendees can dial a number and join via PSTN"
327
+ renderContent={(
328
+ isToolTipVisible,
329
+ setToolTipVisible,
330
+ ) =>
331
+ renderInfoIcon(
332
+ isToolTipVisible,
333
+ setToolTipVisible,
334
+ )
335
+ }></Tooltip>
336
+ </View>
337
+ <View style={style.infoToggleContainer}>
338
+ <Toggle
339
+ isEnabled={pstnToggle}
340
+ toggleSwitch={setPstnToggle}
341
+ />
342
+ </View>
343
+ </View>
344
+ </>
345
+ ) : (
346
+ <></>
347
+ )}
348
+ <Spacer size={isDesktop ? 60 : 125} />
349
+ </View>
350
+ <View style={[style.btnContainer]}>
351
+ <PrimaryButton
352
+ iconName={'video-plus'}
353
+ disabled={loading || !roomTitle?.trim()}
354
+ containerStyle={!isDesktop && {width: '100%'}}
355
+ onPress={() => {
356
+ if (!$config.BACKEND_ENDPOINT) {
357
+ showError();
358
+ } else {
359
+ // !roomTitle?.trim() &&
360
+ // onChangeRoomTitle(randomRoomTitle);
203
361
  createRoomAndNavigateToShare(
204
- roomTitle,
205
- pstnCheckbox,
206
- hostControlCheckbox,
207
- )
362
+ roomTitle?.trim(),
363
+ pstnToggle,
364
+ !coHostToggle,
365
+ );
208
366
  }
209
- text={loading ? loadingWithDots : createMeetingButton}
210
- />
211
- <HorizontalRule />
212
- <SecondaryButton
213
- onPress={() => history.push('/join')}
214
- text={haveMeetingID}
215
- />
216
- </View>
367
+ }}
368
+ text={loading ? loadingWithDots : createMeetingButton}
369
+ />
370
+ <Spacer size={16} />
371
+ <LinkButton
372
+ text={haveMeetingID}
373
+ onPress={() => history.push('/join')}
374
+ />
217
375
  </View>
218
- </View>
219
- </View>
220
- </ScrollView>
376
+ </Card>
377
+ </ScrollView>
378
+ </View>
221
379
  )
222
380
  ) : (
223
381
  <></>
@@ -228,108 +386,78 @@ const Create = () => {
228
386
  };
229
387
 
230
388
  const style = StyleSheet.create({
389
+ root: {
390
+ flex: 1,
391
+ },
392
+ inputLabelStyle: {
393
+ paddingLeft: 8,
394
+ },
231
395
  main: {
232
- paddingVertical: '8%',
233
- marginHorizontal: '8%',
234
- display: 'flex',
235
- justifyContent: 'space-evenly',
236
396
  flexGrow: 1,
237
- },
238
- nav: {
239
- flex: 1,
240
- width: '100%',
241
397
  flexDirection: 'row',
242
- alignItems: 'center',
243
- alignSelf: 'center',
244
398
  justifyContent: 'center',
245
399
  },
246
- content: {flex: 6, flexDirection: 'row'},
247
- leftContent: {
248
- width: '100%',
249
- flex: 1,
250
- justifyContent: 'space-evenly',
251
- minHeight: 350,
252
- // marginRight: '5%',
253
- marginHorizontal: 'auto',
254
- },
255
400
  heading: {
256
- fontSize: 32,
401
+ fontSize: ThemeConfig.FontSize.extraLarge,
257
402
  fontWeight: '700',
258
- textAlign: 'center',
259
- color: $config.PRIMARY_FONT_COLOR,
260
- marginBottom: 20,
403
+ lineHeight: ThemeConfig.FontSize.extraLarge,
404
+ color: $config.FONT_COLOR,
405
+ fontFamily: ThemeConfig.FontFamily.sansPro,
406
+ opacity: ThemeConfig.EmphasisOpacity.high,
261
407
  },
262
408
  headline: {
263
409
  fontSize: 18,
264
410
  fontWeight: '400',
265
411
  textAlign: 'center',
266
- color: $config.PRIMARY_FONT_COLOR,
412
+ color: $config.FONT_COLOR,
267
413
  marginBottom: 40,
268
414
  },
269
- inputs: {
270
- flex: 1,
271
- // marginVertical: '2%',
415
+ btnContainer: {
272
416
  width: '100%',
273
- alignSelf: 'flex-start',
274
417
  alignItems: 'center',
275
- justifyContent: 'space-evenly',
276
418
  },
277
- // textInput: textInput,
278
- checkboxHolder: {
279
- marginVertical: 0,
419
+ toggleContainer: {
280
420
  flexDirection: 'row',
281
- marginTop: 0,
282
- marginBottom: 20,
283
- // flex: .2,
284
- // height: 10,
285
- // justifyContent: 'center',
286
- // alignContent: 'center',
287
- justifyContent: 'flex-start',
288
- // alignItems: 'flex-start',
421
+ backgroundColor: $config.CARD_LAYER_2_COLOR,
422
+ paddingVertical: 22,
423
+ paddingHorizontal: 20,
289
424
  },
290
- checkboxTitle: {
291
- color: $config.PRIMARY_FONT_COLOR + '60',
292
- paddingHorizontal: 5,
293
- alignSelf: 'center',
294
- // marginVertical: 'auto',
295
- // fontWeight: '700',
425
+ upper: {
426
+ borderTopLeftRadius: ThemeConfig.BorderRadius.medium,
427
+ borderTopRightRadius: ThemeConfig.BorderRadius.medium,
296
428
  },
297
- checkboxCaption: {
298
- color: $config.PRIMARY_FONT_COLOR + '60',
299
- paddingHorizontal: 5,
429
+ lower: {
430
+ borderBottomLeftRadius: ThemeConfig.BorderRadius.medium,
431
+ borderBottomRightRadius: ThemeConfig.BorderRadius.medium,
300
432
  },
301
- checkboxTextHolder: {
302
- marginVertical: 0, //check if 5
303
- flexDirection: 'column',
433
+ toggleLabel: {
434
+ color: $config.FONT_COLOR,
435
+ fontSize: ThemeConfig.FontSize.normal,
436
+ marginRight: 4,
437
+ fontFamily: ThemeConfig.FontFamily.sansPro,
438
+ fontWeight: '400',
439
+ alignSelf: 'center',
304
440
  },
305
- // urlTitle: {
306
- // color: '#fff',
307
- // fontSize: 14,
308
- // },
309
- urlHolder: {
310
- width: '100%',
311
- paddingHorizontal: 10,
312
- marginBottom: 15,
313
- justifyContent: 'center',
314
- maxWidth: 400,
315
- minHeight: 45,
441
+ separator: {
442
+ height: 1,
316
443
  },
317
- // url: {
318
- // color: '#fff',
319
- // fontSize: 18,
320
- // fontWeight: '700',
321
- // textDecorationLine: 'underline',
322
- // },
323
- pstnHolder: {
444
+ infoContainer: {
324
445
  flexDirection: 'row',
325
- width: '80%',
446
+ flex: 0.8,
326
447
  },
327
- pstnMargin: {
328
- marginRight: '10%',
448
+ infoToggleContainer: {
449
+ flex: 0.2,
450
+ alignItems: 'flex-end',
451
+ alignSelf: 'center',
329
452
  },
330
- btnContainer: {
331
- width: '100%',
332
- alignItems: 'center',
453
+ tooltipActiveBgStyle: {
454
+ backgroundColor:
455
+ $config.CARD_LAYER_5_COLOR + hexadecimalTransparency['20%'],
456
+ borderRadius: 14,
457
+ padding: 5,
458
+ },
459
+ tooltipDefaultBgStyle: {
460
+ padding: 5,
333
461
  },
334
462
  });
335
463