agora-appbuilder-core 2.2.0 → 2.3.0-beta.2

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 (301) hide show
  1. package/Readme.md +7 -1
  2. package/package.json +4 -3
  3. package/template/Gulpfile.js +306 -87
  4. package/template/_gitignore +4 -1
  5. package/template/_package-lock.json +32186 -3078
  6. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
  7. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
  8. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
  9. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
  12. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
  14. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
  16. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
  17. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
  21. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
  24. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
  25. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
  26. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
  27. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
  28. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
  30. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
  31. package/template/agora-rn-uikit/src/Rtc/Create.tsx +14 -2
  32. package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
  33. package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
  34. package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
  35. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
  36. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
  37. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
  38. package/template/agora-rn-uikit/src/index.ts +12 -12
  39. package/template/babel.config.js +17 -1
  40. package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
  41. package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
  42. package/template/bridge/rtc/webNg/Types.ts +14 -0
  43. package/template/bridge/rtc/webNg/index.ts +5 -2
  44. package/template/bridge/rtm/web/index.ts +13 -7
  45. package/template/electron-builder.js +3 -2
  46. package/template/esbuild.rsdk.go +226 -0
  47. package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
  48. package/template/fpe-api/components.ts +42 -0
  49. package/template/fpe-api/context.ts +45 -0
  50. package/template/fpe-api/fpeEvents.ts +9 -0
  51. package/template/fpe-api/index.ts +21 -0
  52. package/template/fpe-api/install.ts +128 -0
  53. package/template/fpe-api/typeDefinition.ts +143 -0
  54. package/template/fpe-api/useFpe.tsx +35 -0
  55. package/template/fpe-api/utils.ts +62 -0
  56. package/template/fpe-implementation/createHook.ts +33 -0
  57. package/template/fpe-implementation/dummyFpe.ts +17 -0
  58. package/template/fpe-implementation/index.ts +1 -0
  59. package/template/fpe-todo.txt +14 -0
  60. package/template/fpe.config.js +29 -0
  61. package/template/global.d.ts +4 -0
  62. package/template/index.rsdk.tsx +27 -0
  63. package/template/index.wsdk.tsx +27 -0
  64. package/template/package.json +28 -12
  65. package/template/react-native-toast-message/src/index.js +9 -10
  66. package/template/react-native-toast-message/src/index.wsdk.js +419 -0
  67. package/template/src/App.tsx +97 -65
  68. package/template/src/AppWrapper.tsx +79 -0
  69. package/template/src/SDKAppWrapper.tsx +67 -0
  70. package/template/src/atoms/PrimaryButton.tsx +14 -8
  71. package/template/src/atoms/TextInput.tsx +13 -5
  72. package/template/src/components/Chat.tsx +171 -139
  73. package/template/src/components/ChatContext.ts +14 -22
  74. package/template/src/components/ColorConfigure.tsx +2 -2
  75. package/template/src/components/Controls.native.tsx +72 -62
  76. package/template/src/components/Controls.tsx +90 -69
  77. package/template/src/components/DeviceConfigure.tsx +1 -1
  78. package/template/src/components/DeviceContext.tsx +14 -7
  79. package/template/src/components/GraphQLProvider.tsx +9 -2
  80. package/template/src/components/GridVideo.tsx +20 -159
  81. package/template/src/components/HostControlView.tsx +54 -15
  82. package/template/src/components/Navbar.tsx +408 -157
  83. package/template/src/components/NetworkQualityContext.tsx +29 -22
  84. package/template/src/components/ParticipantsView.tsx +91 -115
  85. package/template/src/components/PinnedVideo.tsx +41 -188
  86. package/template/src/components/Precall.native.tsx +131 -97
  87. package/template/src/components/Precall.tsx +193 -158
  88. package/template/src/components/RTMConfigure.tsx +328 -416
  89. package/template/src/components/Router.sdk.ts +20 -0
  90. package/template/src/components/SessionContext.tsx +6 -3
  91. package/template/src/components/Settings.native.tsx +3 -0
  92. package/template/src/components/Settings.tsx +65 -31
  93. package/template/src/components/SettingsView.tsx +14 -8
  94. package/template/src/components/Share.tsx +188 -220
  95. package/template/src/components/StorageContext.tsx +5 -5
  96. package/template/src/components/StoreToken.tsx +5 -1
  97. package/template/src/components/chat-messages/useChatMessages.tsx +208 -0
  98. package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
  99. package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
  100. package/template/src/components/common/Error.tsx +54 -0
  101. package/template/src/components/common/Logo.tsx +35 -0
  102. package/template/src/components/common/index.tsx +8 -0
  103. package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
  104. package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
  105. package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
  106. package/template/src/components/dimension/DimensionContext.ts +27 -0
  107. package/template/src/components/dimension/DimensionProvider.tsx +34 -0
  108. package/template/src/components/livestream/LiveStreamContext.tsx +293 -272
  109. package/template/src/components/livestream/Types.ts +26 -7
  110. package/template/src/components/livestream/index.ts +13 -2
  111. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
  112. package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
  113. package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
  114. package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
  115. package/template/src/components/participants/AllHostParticipants.tsx +41 -53
  116. package/template/src/components/participants/MeParticipant.tsx +9 -10
  117. package/template/src/components/participants/ParticipantName.tsx +2 -1
  118. package/template/src/components/participants/RemoteParticipants.tsx +3 -3
  119. package/template/src/components/precall/LocalMute.native.tsx +91 -0
  120. package/template/src/components/precall/LocalMute.tsx +90 -0
  121. package/template/src/components/precall/VideoPreview.native.tsx +35 -0
  122. package/template/src/components/precall/VideoPreview.tsx +33 -0
  123. package/template/src/components/precall/index.tsx +28 -0
  124. package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
  125. package/template/src/components/precall/joinCallBtn.tsx +91 -0
  126. package/template/src/components/precall/meetingTitle.tsx +26 -0
  127. package/template/src/components/precall/selectDevice.tsx +46 -0
  128. package/template/src/components/precall/textInput.tsx +43 -0
  129. package/template/src/components/precall/usePreCall.tsx +41 -0
  130. package/template/src/components/styles.ts +20 -3
  131. package/template/src/components/useShareLink.tsx +239 -0
  132. package/template/src/components/useWakeLock.tsx +3 -3
  133. package/template/src/custom-events/CustomEvents.ts +221 -0
  134. package/template/src/custom-events/index.tsx +4 -0
  135. package/template/src/custom-events/types.ts +51 -0
  136. package/template/src/language/default-labels/commonLabels.ts +21 -0
  137. package/template/src/language/default-labels/createScreenLabels.ts +22 -0
  138. package/template/src/language/default-labels/index.ts +38 -0
  139. package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
  140. package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
  141. package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
  142. package/template/src/language/default-labels/videoCallScreenLabels.ts +189 -0
  143. package/template/src/language/i18nTypes.ts +10 -0
  144. package/template/src/language/index.ts +18 -0
  145. package/template/src/language/useLanguage.tsx +92 -0
  146. package/template/src/pages/Authenticate.tsx +21 -15
  147. package/template/src/pages/Create.tsx +176 -159
  148. package/template/src/pages/Join.tsx +44 -32
  149. package/template/src/pages/VideoCall.tsx +134 -406
  150. package/template/src/pages/create/useCreate.tsx +37 -0
  151. package/template/src/pages/video-call/CustomLayout.ts +17 -0
  152. package/template/src/pages/video-call/CustomUserContextHolder.tsx +12 -0
  153. package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
  154. package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
  155. package/template/src/pages/video-call/RenderComponent.tsx +52 -0
  156. package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
  157. package/template/src/pages/video-call/VideoComponent.tsx +34 -0
  158. package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
  159. package/template/src/pages/video-call/index.ts +20 -0
  160. package/template/src/rtm/RTMEngine.ts +58 -0
  161. package/template/src/rtm/utils.ts +44 -0
  162. package/template/src/rtm-events/EventUtils.ts +267 -0
  163. package/template/src/rtm-events/EventsQueue.ts +38 -0
  164. package/template/src/rtm-events/constants.ts +40 -0
  165. package/template/src/rtm-events/index.tsx +8 -0
  166. package/template/src/rtm-events/types.ts +7 -0
  167. package/template/src/subComponents/ChatBubble.tsx +18 -11
  168. package/template/src/subComponents/ChatContainer.tsx +79 -30
  169. package/template/src/subComponents/ChatInput.tsx +146 -70
  170. package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
  171. package/template/src/subComponents/Error.tsx +35 -24
  172. package/template/src/subComponents/LanguageSelector.tsx +85 -0
  173. package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
  174. package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
  175. package/template/src/subComponents/LocalAudioMute.tsx +52 -30
  176. package/template/src/subComponents/LocalEndCall.tsx +52 -0
  177. package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
  178. package/template/src/subComponents/LocalVideoMute.tsx +48 -30
  179. package/template/src/subComponents/LogoutButton.tsx +20 -5
  180. package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
  181. package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
  182. package/template/src/subComponents/Recording.tsx +46 -138
  183. package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
  184. package/template/src/subComponents/RemoteEndCall.tsx +18 -7
  185. package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
  186. package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
  187. package/template/src/subComponents/SelectDevice.tsx +88 -45
  188. package/template/src/subComponents/SelectOAuth.tsx +30 -6
  189. package/template/src/subComponents/SidePanelButtons.ts +39 -0
  190. package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
  191. package/template/src/subComponents/TextWithTooltip.tsx +15 -20
  192. package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
  193. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
  194. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
  195. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
  196. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
  197. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
  198. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
  199. package/template/src/subComponents/livestream/index.ts +10 -2
  200. package/template/src/subComponents/recording/useRecording.tsx +209 -0
  201. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
  202. package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
  203. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +61 -31
  204. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
  205. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +102 -143
  206. package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
  207. package/template/src/subComponents/toastConfig.tsx +25 -20
  208. package/template/src/utils/IsAttendeeUser.ts +34 -0
  209. package/template/src/utils/SdkEvents.ts +68 -0
  210. package/template/src/utils/common.tsx +40 -0
  211. package/template/src/utils/eventEmitter.ts +29 -0
  212. package/template/src/utils/getMeetingInvite.ts +30 -0
  213. package/template/src/utils/index.tsx +11 -2
  214. package/template/src/utils/isAudioEnabled.ts +29 -0
  215. package/template/src/utils/isHostUser.ts +33 -0
  216. package/template/src/utils/isMobileOrTablet.native.ts +5 -0
  217. package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
  218. package/template/src/utils/isPSTNUser.ts +30 -0
  219. package/template/src/utils/isSDK.sdk.ts +5 -0
  220. package/template/src/utils/isSDK.ts +5 -0
  221. package/template/src/utils/isScreenShareUser.ts +31 -0
  222. package/template/src/utils/isVideoEnabled.ts +29 -0
  223. package/template/src/utils/useButtonTemplate.tsx +43 -0
  224. package/template/src/utils/useCreateMeeting.ts +74 -0
  225. package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
  226. package/template/src/utils/useGetMeetingPhrase.ts +68 -0
  227. package/template/src/utils/useGetName.ts +20 -0
  228. package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
  229. package/template/src/utils/useJoinMeeting.ts +120 -0
  230. package/template/src/utils/useLayout.tsx +40 -0
  231. package/template/src/utils/useLiveStreamingUids.ts +26 -0
  232. package/template/src/utils/useMutePSTN.ts +43 -0
  233. package/template/src/utils/useMuteToggleLocal.ts +109 -0
  234. package/template/src/utils/useNavParams.ts +6 -0
  235. package/template/src/utils/useNavigateTo.ts +8 -0
  236. package/template/src/utils/usePrivateMessages.ts +33 -0
  237. package/template/src/utils/useRemoteEndCall.ts +27 -0
  238. package/template/src/utils/useRemoteMute.ts +64 -0
  239. package/template/src/utils/useSendControlMessage.ts +51 -0
  240. package/template/src/utils/useSendMessage.ts +40 -0
  241. package/template/src/utils/useSetName.ts +20 -0
  242. package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
  243. package/template/src/utils/useSidePanel.tsx +41 -0
  244. package/template/src/utils/useString.ts +61 -0
  245. package/template/src/utils/useUnreadMessageCount.ts +50 -0
  246. package/template/src/utils/useUserList.ts +26 -0
  247. package/template/tsconfig.json +4 -4
  248. package/template/tsconfig_fpeApi.json +103 -0
  249. package/template/tsconfig_rsdk_index.json +105 -0
  250. package/template/tsconfig_wsdk_index.json +104 -0
  251. package/template/webpack.commons.js +40 -16
  252. package/template/webpack.main.config.js +2 -1
  253. package/template/webpack.renderer.config.js +1 -1
  254. package/template/webpack.rsdk.config.js +33 -0
  255. package/template/webpack.ts.config.js +89 -0
  256. package/template/webpack.web.config.js +8 -1
  257. package/template/webpack.wsdk.config.js +34 -0
  258. package/template/agora-rn-uikit/.git/HEAD +0 -1
  259. package/template/agora-rn-uikit/.git/config +0 -16
  260. package/template/agora-rn-uikit/.git/description +0 -1
  261. package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
  262. package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
  263. package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -173
  264. package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
  265. package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
  266. package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
  267. package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
  268. package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
  269. package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
  270. package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
  271. package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
  272. package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
  273. package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
  274. package/template/agora-rn-uikit/.git/index +0 -0
  275. package/template/agora-rn-uikit/.git/info/exclude +0 -6
  276. package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
  277. package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
  278. package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
  279. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
  280. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
  281. package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.pack +0 -0
  282. package/template/agora-rn-uikit/.git/packed-refs +0 -24
  283. package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
  284. package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
  285. package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
  286. package/template/agora-rn-uikit/.gitignore +0 -63
  287. package/template/agora-rn-uikit/package-lock.json +0 -7612
  288. package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
  289. package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
  290. package/template/package-lock.json +0 -22923
  291. package/template/react-native-toast-message/.gitignore +0 -5
  292. package/template/react-native-toast-message/.npmignore +0 -5
  293. package/template/react-native-toast-message/package-lock.json +0 -10553
  294. package/template/src/.DS_Store +0 -0
  295. package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
  296. package/template/src/subComponents/.DS_Store +0 -0
  297. package/template/src/subComponents/ScreenshareButton.tsx +0 -257
  298. package/template/src/subComponents/SwitchCamera.tsx +0 -35
  299. package/template/src/utils/hasBrandLogo.tsx +0 -3
  300. package/template/src/utils/mobileWebTest.native.tsx +0 -5
  301. package/template/src/utils/shouldAuthenticate.tsx +0 -7
@@ -0,0 +1,239 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ import {createHook} from 'fpe-implementation';
14
+ import React from 'react';
15
+ import {useString} from '../utils/useString';
16
+ import isSDKCheck from '../utils/isSDK';
17
+ import Toast from '../../react-native-toast-message';
18
+ import {useMeetingInfo} from './meeting-info/useMeetingInfo';
19
+ import platform from '../subComponents/Platform';
20
+ import {
21
+ GetMeetingInviteID,
22
+ GetMeetingInviteURL,
23
+ } from '../utils/getMeetingInvite';
24
+ import {MeetingInviteInterface} from '../language/default-labels/videoCallScreenLabels';
25
+ import Clipboard from '../subComponents/Clipboard';
26
+
27
+ export enum SHARE_LINK_CONTENT_TYPE {
28
+ ATTENDEE,
29
+ HOST,
30
+ PSTN,
31
+ MEETING_INVITE,
32
+ }
33
+
34
+ export interface ShareLinkContextInterface {
35
+ copyShareLinkToClipboard: (type: SHARE_LINK_CONTENT_TYPE) => void;
36
+ getShareLink: (type: SHARE_LINK_CONTENT_TYPE) => string;
37
+ }
38
+ const ShareLinkContext = React.createContext<ShareLinkContextInterface>({
39
+ copyShareLinkToClipboard: () => {},
40
+ getShareLink: () => '',
41
+ });
42
+
43
+ interface ShareLinkProvideProps {
44
+ children: React.ReactNode;
45
+ }
46
+
47
+ const ShareLinkProvider = (props: ShareLinkProvideProps) => {
48
+ const {
49
+ meetingTitle,
50
+ meetingPassphrase,
51
+ isSeparateHostLink,
52
+ isJoinDataFetched,
53
+ } = useMeetingInfo();
54
+
55
+ //commmented for v1 release
56
+ // const copiedToClipboardText = useString(
57
+ // 'copiedToClipboardNotificationLabel',
58
+ // )();
59
+ // const meetingIdText = useString('meetingIdLabel')();
60
+ // const PSTNNumberText = useString('PSTNNumber')();
61
+ // const PSTNPinText = useString('PSTNPin')();
62
+ // const meetingInviteText =
63
+ // useString<MeetingInviteInterface>('meetingInviteText');
64
+ const copiedToClipboardText = 'Copied to Clipboard';
65
+ const meetingIdText = 'Meeting ID';
66
+ const PSTNNumberText = 'PSTN Number';
67
+ const PSTNPinText = 'PSTN Pin';
68
+ const meetingInviteText = ({meetingName, id, url, pstn, isCallActive}) => {
69
+ let inviteContent = '';
70
+ if (url) {
71
+ // if host data is present generate links for both host and attendee
72
+ if (url?.host) {
73
+ inviteContent += `Meeting - ${meetingName}\nURL for Attendee: ${url?.attendee}\nURL for Host: ${url?.host}`;
74
+ }
75
+ // if host data is not present then generate link for attendee alone
76
+ else {
77
+ if (isCallActive) {
78
+ //copy this label on videocall screen
79
+ inviteContent += `Meeting - ${meetingName}\nURL for Attendee: ${url?.attendee}`;
80
+ } else {
81
+ //copy this label on share link screen
82
+ inviteContent += `Meeting - ${meetingName}\nMeeting URL: ${url?.attendee}`;
83
+ }
84
+ }
85
+ } else {
86
+ // if host data is present generate meeting ID for both host and attendee
87
+ if (id?.host) {
88
+ inviteContent += `Meeting - ${meetingName}\nAttendee Meeting ID: ${id?.attendee}\nHost Meeting ID: ${id?.host}`;
89
+ }
90
+ // if host data is not present then generate meeting ID for attendee alone
91
+ else {
92
+ if (isCallActive) {
93
+ //copy this label on videocall screen
94
+ inviteContent += `Meeting - ${meetingName}\nAttendee Meeting ID: ${id?.attendee}`;
95
+ } else {
96
+ //copy this label on share link screen
97
+ inviteContent += `Meeting - ${meetingName}\nMeeting ID: ${id?.attendee}`;
98
+ }
99
+ }
100
+ }
101
+ // Adding pstn data into meeting data if present
102
+ if (pstn?.number && pstn?.pin) {
103
+ inviteContent += `\nPSTN Number: ${pstn.number}\nPSTN Pin: ${pstn.pin}`;
104
+ }
105
+ return inviteContent;
106
+ };
107
+
108
+ const isSDK = isSDKCheck();
109
+
110
+ const getMeetingInvite = () => {
111
+ let baseURL = getBaseURL();
112
+ let stringToCopy = meetingInviteText({
113
+ meetingName: meetingTitle,
114
+ url: baseURL
115
+ ? GetMeetingInviteURL(
116
+ baseURL,
117
+ meetingPassphrase.attendee,
118
+ isSeparateHostLink ? meetingPassphrase.host : undefined,
119
+ )
120
+ : undefined,
121
+ id: !baseURL
122
+ ? GetMeetingInviteID(
123
+ meetingPassphrase.attendee,
124
+ isSeparateHostLink ? meetingPassphrase.host : undefined,
125
+ )
126
+ : undefined,
127
+ pstn: meetingPassphrase?.pstn
128
+ ? {
129
+ number: meetingPassphrase.pstn.number,
130
+ pin: meetingPassphrase.pstn.pin,
131
+ }
132
+ : undefined,
133
+ isCallActive: isJoinDataFetched,
134
+ });
135
+ return stringToCopy;
136
+ };
137
+
138
+ const getBaseURL = () => {
139
+ let baseURL =
140
+ platform === 'web' && !isSDK
141
+ ? $config.FRONTEND_ENDPOINT || window.location.origin
142
+ : undefined;
143
+ return baseURL;
144
+ };
145
+
146
+ const getAttendeeURLOrId = () => {
147
+ let stringToCopy = '';
148
+ let baseURL = getBaseURL();
149
+ if (meetingPassphrase?.attendee) {
150
+ if (baseURL) {
151
+ stringToCopy += `${baseURL}/${meetingPassphrase.attendee}`;
152
+ } else {
153
+ stringToCopy += `${meetingIdText}: ${meetingPassphrase.attendee}`;
154
+ }
155
+ }
156
+ return stringToCopy;
157
+ };
158
+
159
+ const getHostUrlOrId = () => {
160
+ let stringToCopy = '';
161
+ if (meetingPassphrase?.host) {
162
+ let baseURL = getBaseURL();
163
+ if (baseURL) {
164
+ stringToCopy += `${baseURL}/${meetingPassphrase.host}`;
165
+ } else {
166
+ stringToCopy += `${meetingIdText}: ${meetingPassphrase.host}`;
167
+ }
168
+ }
169
+ return stringToCopy;
170
+ };
171
+
172
+ const getPstn = () => {
173
+ let stringToCopy = '';
174
+ if (
175
+ meetingPassphrase?.pstn &&
176
+ meetingPassphrase.pstn?.number &&
177
+ meetingPassphrase.pstn?.pin
178
+ ) {
179
+ stringToCopy += `${PSTNNumberText}: ${meetingPassphrase.pstn.number} ${PSTNPinText}: ${meetingPassphrase.pstn.pin}`;
180
+ }
181
+
182
+ return stringToCopy;
183
+ };
184
+
185
+ const getShareLink = (input: SHARE_LINK_CONTENT_TYPE) => {
186
+ let stringToCopy = '';
187
+ switch (input) {
188
+ case SHARE_LINK_CONTENT_TYPE.MEETING_INVITE:
189
+ stringToCopy = getMeetingInvite();
190
+ break;
191
+ case SHARE_LINK_CONTENT_TYPE.ATTENDEE:
192
+ stringToCopy = getAttendeeURLOrId();
193
+ break;
194
+ case SHARE_LINK_CONTENT_TYPE.HOST:
195
+ stringToCopy = getHostUrlOrId();
196
+ break;
197
+ case SHARE_LINK_CONTENT_TYPE.PSTN:
198
+ stringToCopy = getPstn();
199
+ default:
200
+ break;
201
+ }
202
+ return stringToCopy;
203
+ };
204
+
205
+ const copyShareLinkToClipboard = (input: SHARE_LINK_CONTENT_TYPE) => {
206
+ let stringToCopy = '';
207
+ switch (input) {
208
+ case SHARE_LINK_CONTENT_TYPE.MEETING_INVITE:
209
+ stringToCopy = getMeetingInvite();
210
+ break;
211
+ case SHARE_LINK_CONTENT_TYPE.ATTENDEE:
212
+ stringToCopy = getAttendeeURLOrId();
213
+ break;
214
+ case SHARE_LINK_CONTENT_TYPE.HOST:
215
+ stringToCopy = getHostUrlOrId();
216
+ break;
217
+ case SHARE_LINK_CONTENT_TYPE.PSTN:
218
+ stringToCopy = getPstn();
219
+ default:
220
+ break;
221
+ }
222
+ Clipboard.setString(stringToCopy);
223
+ Toast.show({
224
+ type: 'success',
225
+ text1: copiedToClipboardText,
226
+ visibilityTime: 1000,
227
+ });
228
+ };
229
+
230
+ return (
231
+ <ShareLinkContext.Provider value={{copyShareLinkToClipboard, getShareLink}}>
232
+ {props.children}
233
+ </ShareLinkContext.Provider>
234
+ );
235
+ };
236
+
237
+ const useShareLink = createHook(ShareLinkContext);
238
+
239
+ export {ShareLinkProvider, ShareLinkContext, useShareLink};
@@ -1,10 +1,10 @@
1
1
  import NoSleep from 'nosleep.js';
2
2
  import React from 'react';
3
- import {Platform} from 'react-native';
4
- import mobileAndTabletCheck from '../utils/mobileWebTest';
3
+ import mobileAndTabletCheck from '../utils/isMobileOrTablet';
4
+ import {isWeb} from '../utils/common';
5
5
 
6
6
  const useWakeLock = () => {
7
- if (mobileAndTabletCheck() && Platform.OS == 'web') {
7
+ if (mobileAndTabletCheck() && isWeb) {
8
8
  const noSleep = React.useMemo(() => new NoSleep(), []);
9
9
  const [awake, set] = React.useState(noSleep.isEnabled);
10
10
 
@@ -0,0 +1,221 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2022 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+
13
+ ('use strict');
14
+ import RtmEngine from 'agora-react-native-rtm';
15
+ import RTMEngine from '../rtm/RTMEngine';
16
+ import {ToOptions, EventPayload} from './types';
17
+ import {EventUtils, eventMessageType} from '../rtm-events';
18
+ import {TEventCallback, EventSourceEnum} from './types';
19
+ import {adjustUID} from '../rtm/utils';
20
+
21
+ class CustomEvents {
22
+ private engine!: RtmEngine;
23
+ private source: EventSourceEnum = EventSourceEnum.core;
24
+
25
+ constructor(source?: EventSourceEnum) {
26
+ this.engine = RTMEngine.getInstance().engine;
27
+ if (source) {
28
+ this.source = source;
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Persists the data in the local attributes of the user
34
+ *
35
+ * @param {string} evt to be stored in rtm Attribute key
36
+ * @param {any} payload to be stored in rtm Attribute value
37
+ * @api private
38
+ */
39
+ private _persist = async (evt: string, payload: any) => {
40
+ try {
41
+ const localUserId = RTMEngine.getInstance().localUid;
42
+ const rtmAttribute = {key: evt, value: JSON.stringify(payload)};
43
+ // Step 1: Call RTM API to update local attributes
44
+ await this.engine.addOrUpdateLocalUserAttributes([rtmAttribute]);
45
+ } catch (error) {
46
+ console.log(
47
+ 'CUSTOM_EVENT_API error occured while updating the value ',
48
+ error,
49
+ );
50
+ }
51
+ };
52
+
53
+ /**
54
+ *
55
+ */
56
+ private _validateEvt = (evt: string): boolean => {
57
+ if (typeof evt !== 'string') {
58
+ throw Error(
59
+ `CUSTOM_EVENT_API Event name cannot be of type ${typeof evt}`,
60
+ );
61
+ }
62
+ if (evt.trim() == '') {
63
+ throw Error(`CUSTOM_EVENT_API Name or function cannot be empty`);
64
+ }
65
+ return true;
66
+ };
67
+
68
+ private _validateListener = (listener: TEventCallback): boolean => {
69
+ if (typeof listener !== 'function') {
70
+ throw Error(
71
+ `CUSTOM_EVENT_API Function cannot be of type ${typeof listener}`,
72
+ );
73
+ }
74
+ return true;
75
+ };
76
+
77
+ /**
78
+ * Sets the local attribute of user if persist level is 2 or 3.
79
+ * If param 'to' is not provided, message is sent in the channel.
80
+ * If param 'to' is provided message is sent to that individual.
81
+ * If param 'to' is an array of uids is provided then message is sent to all the individual uids in loop.
82
+ *
83
+ * @param {any} rtmPayload payload to be sent across
84
+ * @param {ToOptions} to uid or uids[] of user
85
+ * @api private
86
+ */
87
+ private _send = async (rtmPayload: any, to?: ToOptions) => {
88
+ const text = JSON.stringify({
89
+ type: eventMessageType.CUSTOM_EVENT,
90
+ msg: rtmPayload,
91
+ });
92
+ // Case 1: send to channel
93
+ if (
94
+ typeof to === 'undefined' ||
95
+ (typeof to === 'number' && to <= 0) ||
96
+ (Array.isArray(to) && to?.length === 0)
97
+ ) {
98
+ console.log('CUSTOM_EVENT_API: case 1 executed');
99
+ try {
100
+ const channelId = RTMEngine.getInstance().channelUid;
101
+ await this.engine.sendMessageByChannelId(channelId, text);
102
+ } catch (error) {
103
+ console.log('CUSTOM_EVENT_API: send event case 1 error : ', error);
104
+ throw error;
105
+ }
106
+ }
107
+ // Case 2: send to indivdual
108
+ if (typeof to === 'number' && to > 0) {
109
+ console.log('CUSTOM_EVENT_API: case 2 executed', to);
110
+ const adjustedUID = adjustUID(to);
111
+ try {
112
+ await this.engine.sendMessageToPeer({
113
+ peerId: `${adjustedUID}`,
114
+ offline: false,
115
+ text,
116
+ });
117
+ } catch (error) {
118
+ console.log('CUSTOM_EVENT_API: send event case 2 error : ', error);
119
+ throw error;
120
+ }
121
+ }
122
+ // Case 3: send to multiple individuals
123
+ if (typeof to === 'object' && Array.isArray(to)) {
124
+ console.log('CUSTOM_EVENT_API: case 3 executed', to);
125
+
126
+ try {
127
+ for (const uid of to) {
128
+ const adjustedUID = adjustUID(uid);
129
+ await this.engine.sendMessageToPeer({
130
+ peerId: `${adjustedUID}`,
131
+ offline: false,
132
+ text,
133
+ });
134
+ }
135
+ } catch (error) {
136
+ console.log('CUSTOM_EVENT_API: send event case 3 error : ', error);
137
+ throw error;
138
+ }
139
+ }
140
+ };
141
+
142
+ /**
143
+ * Listens for a specified event.
144
+ * Adds a listener function to the specified event.
145
+ * When the specified event happens, the Events API triggers the callback that you pass.
146
+ * The listener will not be added if it is a duplicate.
147
+ *
148
+ * @param {String} evt Name of the event to attach the listener to.
149
+ * @param {Function} listener Method to be called when the event is emitted.
150
+ * @api public
151
+ */
152
+ on = (evt: string, listener: TEventCallback) => {
153
+ if (!this._validateEvt(evt) || !this._validateListener(listener)) return;
154
+ EventUtils.addListener(evt, listener, this.source);
155
+ };
156
+
157
+ /**
158
+ * Removes a listener function from the specified event if evt and listener function both are provided.
159
+ * Removes all listeners from a specified event if listener function is not provided.
160
+ * If you do not specify an event then all listeners will be removed.
161
+ * That means every event will be emptied.
162
+ *
163
+ * @param {String} evt Name of the event to remove the listener from.
164
+ * @param {Function} listenerToRemove Method to remove from the event.
165
+ * @api public
166
+ */
167
+ off = (evt?: string, listenerToRemove?: TEventCallback) => {
168
+ if (listenerToRemove) {
169
+ if (this._validateListener(listenerToRemove) && this._validateEvt(evt)) {
170
+ EventUtils.removeListener(evt, listenerToRemove, this.source);
171
+ }
172
+ } else if (evt) {
173
+ if (this._validateEvt(evt)) {
174
+ EventUtils.removeAllListeners(evt, this.source);
175
+ }
176
+ } else {
177
+ EventUtils.removeAll(this.source);
178
+ }
179
+ };
180
+
181
+ /**
182
+ * This method sends p2p or channel message depending upon the 'to' value.
183
+ * - If 'to' is provided this method sends p2p message.
184
+ * - If 'to' is empty this method sends channel message.
185
+ *
186
+ *
187
+ * @param {String} evt Name of the event to remove the listener from.
188
+ * @param {EventPayload} payload contains action, level, value metrics.
189
+ * - action: {string}
190
+ * - level: 1 | 2 | 3
191
+ * - value: {string}. NOTICE: value bytelength has MAX_SIZE 32kb limit.
192
+ * @param {ToOptions} to uid or uid array. The default mode is to send a message in channel.
193
+ * @api public
194
+ * */
195
+ send = async (evt: string, payload: EventPayload, to?: ToOptions) => {
196
+ if (!this._validateEvt(evt)) return;
197
+ const {action = '', value = '', level = 1} = payload;
198
+
199
+ const rtmPayload = {
200
+ evt: evt,
201
+ payload: {
202
+ action,
203
+ value,
204
+ level,
205
+ source: this.source,
206
+ },
207
+ };
208
+
209
+ if (level === 2 || level === 3) {
210
+ console.log('CUSTOM_EVENT_API: Event lifecycle: persist', level);
211
+ await this._persist(evt, {...payload, source: this.source});
212
+ }
213
+ try {
214
+ await this._send(rtmPayload, to);
215
+ } catch (error) {
216
+ console.log('CUSTOM_EVENT_API: sendPersist sending failed. ', error);
217
+ }
218
+ };
219
+ }
220
+
221
+ export default CustomEvents;
@@ -0,0 +1,4 @@
1
+ import CustomEvents from './CustomEvents';
2
+
3
+ export * from './types';
4
+ export default new CustomEvents();
@@ -0,0 +1,51 @@
1
+ import {UidType} from '../../agora-rn-uikit';
2
+ type Simplify<T> = T extends infer S ? {[K in keyof S]: S[K]} : never;
3
+ type NoneOf<T> = Simplify<{[K in keyof T]?: never}>;
4
+ type AtMostOneOf<T> =
5
+ | NoneOf<T>
6
+ | {[K in keyof T]: Simplify<Pick<T, K> & NoneOf<Omit<T, K>>>}[keyof T];
7
+
8
+ // export type TEventOptions = AtMostOneOf<IMessageOptions> & IEventOptions;
9
+
10
+ export type ToOptions = UidType | UidType[];
11
+
12
+ interface IEventPayloadBase {
13
+ action?: any;
14
+ }
15
+
16
+ interface IEventPayloadWithoutAttributes extends IEventPayloadBase {
17
+ level?: never;
18
+ value: string;
19
+ }
20
+
21
+ interface IEventPayloadWithAttributes extends IEventPayloadBase {
22
+ level: 2 | 3;
23
+ value: string;
24
+ }
25
+
26
+ export type EventPayload =
27
+ | IEventPayloadWithoutAttributes
28
+ | IEventPayloadWithAttributes
29
+ | Record<string, never>;
30
+
31
+ export enum EventSourceEnum {
32
+ core = 'core',
33
+ fpe = 'fpe',
34
+ }
35
+ export enum EventLevel {
36
+ 'LEVEL1' = 1,
37
+ 'LEVEL2',
38
+ 'LEVEL3',
39
+ }
40
+ interface dataPayload {
41
+ action: string;
42
+ level: 1 | 2 | 3;
43
+ value: string;
44
+ }
45
+ interface EvtCbPayload {
46
+ payload: dataPayload;
47
+ sender: string;
48
+ ts: number;
49
+ source: EventSourceEnum;
50
+ }
51
+ export type TEventCallback = (args: EvtCbPayload) => void;
@@ -0,0 +1,21 @@
1
+ import {I18nBaseType} from '../i18nTypes';
2
+
3
+ export interface I18nCommonLabelsInterface {
4
+ //commented for v1 release
5
+ // goBackButton?: I18nBaseType; //
6
+ // logoutButton?: I18nBaseType; //
7
+ // googleAuthButton?: I18nBaseType; //
8
+ // microsoftAuthButton?: I18nBaseType; //
9
+ // slackAuthButton?: I18nBaseType; //
10
+ // appleAuthButton?: I18nBaseType; //
11
+ }
12
+
13
+ export const CommonLabels: I18nCommonLabelsInterface = {
14
+ //commented for v1 release
15
+ // goBackButton: 'Go back',
16
+ // logoutButton: 'Logout',
17
+ // googleAuthButton: 'Google',
18
+ // microsoftAuthButton: 'Microsoft',
19
+ // slackAuthButton: 'Slack',
20
+ // appleAuthButton: 'Apple',
21
+ };
@@ -0,0 +1,22 @@
1
+ import {I18nBaseType, I18nConditionalType} from '../i18nTypes';
2
+
3
+ export interface I18nCreateScreenLabelsInterface {
4
+ meetingNameInputPlaceholder?: I18nBaseType; //
5
+ //commented for v1 release
6
+ // createMeetingButton?: I18nBaseType; //
7
+ // haveMeetingID?: I18nBaseType;
8
+ // pstnToggle?: I18nConditionalType; //
9
+ // hostControlsToggle?: I18nConditionalType; //
10
+ }
11
+
12
+ export const CreateScreenLabels: I18nCreateScreenLabelsInterface = {
13
+ meetingNameInputPlaceholder: 'Name your Meeting',
14
+ //commented for v1 release
15
+ // createMeetingButton: 'Create Meeting',
16
+ // haveMeetingID: 'Have a Meeting ID?',
17
+ // pstnToggle: 'Use PSTN (Join by dialing a number)',
18
+ // hostControlsToggle: (toggle) =>
19
+ // toggle
20
+ // ? 'Restrict Host Controls (Separate host link)'
21
+ // : 'Restrict Host Controls (Everyone is a Host)',
22
+ };
@@ -0,0 +1,38 @@
1
+ import {CommonLabels, I18nCommonLabelsInterface} from './commonLabels';
2
+ import {
3
+ CreateScreenLabels,
4
+ I18nCreateScreenLabelsInterface,
5
+ } from './createScreenLabels';
6
+ import {
7
+ JoinScreenLabels,
8
+ I18nJoinScreenLabelsInterface,
9
+ } from './joinScreenLabels';
10
+ import {
11
+ ShareLinkScreenLabels,
12
+ I18nShareLinkScreenLabelsInterface,
13
+ } from './shareLinkScreenLabels';
14
+ import {
15
+ VideoCallScreenLabels,
16
+ I18nVideoCallScreenLabelsInterface,
17
+ } from './videoCallScreenLabels';
18
+ import {
19
+ PrecallScreenLabels,
20
+ I18nPrecallScreenLabelsInterface,
21
+ } from './precallScreenLabels';
22
+
23
+ export interface TextDataInterface
24
+ extends I18nCommonLabelsInterface,
25
+ I18nCreateScreenLabelsInterface,
26
+ I18nJoinScreenLabelsInterface,
27
+ I18nShareLinkScreenLabelsInterface,
28
+ I18nVideoCallScreenLabelsInterface,
29
+ I18nPrecallScreenLabelsInterface {}
30
+
31
+ export const DEFAULT_LABELS: TextDataInterface = {
32
+ ...CommonLabels,
33
+ ...CreateScreenLabels,
34
+ ...JoinScreenLabels,
35
+ ...ShareLinkScreenLabels,
36
+ ...PrecallScreenLabels,
37
+ ...VideoCallScreenLabels,
38
+ };
@@ -0,0 +1,13 @@
1
+ import {I18nBaseType} from '../i18nTypes';
2
+
3
+ export interface I18nJoinScreenLabelsInterface {
4
+ //commented for v1 release
5
+ // meetingIdInputPlaceholder?: I18nBaseType; //
6
+ // enterMeetingButton?: I18nBaseType; //
7
+ }
8
+
9
+ export const JoinScreenLabels: I18nJoinScreenLabelsInterface = {
10
+ //commented for v1 release
11
+ // meetingIdInputPlaceholder: 'Enter Meeting ID',
12
+ // enterMeetingButton: 'Enter Meeting',
13
+ };
@@ -0,0 +1,33 @@
1
+ import {ClientRole} from '../../../agora-rn-uikit';
2
+ import {I18nBaseType} from '../i18nTypes';
3
+
4
+ export interface JoinRoomButtonTextInterface {
5
+ ready: boolean;
6
+ role?: ClientRole;
7
+ }
8
+ export interface I18nPrecallScreenLabelsInterface {
9
+ //commented for v1 release
10
+ // precallLabel?: I18nBaseType; //
11
+ // selectInputDeviceLabel?: I18nBaseType; //
12
+ // userNamePlaceholder?: I18nBaseType; //
13
+ // fetchingNamePlaceholder?: I18nBaseType; //
14
+ // loadingWithDots?: I18nBaseType;
15
+ joinRoomButton?: I18nBaseType<JoinRoomButtonTextInterface>; // need to check
16
+ }
17
+
18
+ export const PrecallScreenLabels: I18nPrecallScreenLabelsInterface = {
19
+ //commented for v1 release
20
+ // precallLabel: 'Precall',
21
+ // selectInputDeviceLabel: 'Select Input Device',
22
+ // userNamePlaceholder: 'Display name*',
23
+ // fetchingNamePlaceholder: 'Getting name...',
24
+ // loadingWithDots: 'Loading...',
25
+ joinRoomButton: ({ready, role}) =>
26
+ ready
27
+ ? !role
28
+ ? 'Join Room'
29
+ : `Join Room as ${
30
+ role === ClientRole.Broadcaster ? 'Host' : 'Audience'
31
+ }`
32
+ : `Loading...`,
33
+ };