agora-appbuilder-core 2.2.0 → 2.3.0-beta.0
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.
- package/Readme.md +7 -1
- package/package.json +4 -3
- package/template/Gulpfile.js +306 -87
- package/template/_gitignore +4 -1
- package/template/_package-lock.json +2297 -2533
- package/template/agora-rn-uikit/.git/HEAD +1 -1
- package/template/agora-rn-uikit/.git/config +3 -3
- package/template/agora-rn-uikit/.git/index +0 -0
- package/template/agora-rn-uikit/.git/logs/HEAD +2 -2
- package/template/agora-rn-uikit/.git/logs/refs/heads/master +1 -1
- package/template/agora-rn-uikit/.git/logs/refs/heads/release/fpe-1.0.0 +1 -0
- package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +1 -1
- package/template/agora-rn-uikit/.git/objects/pack/pack-f274a85fccfc9b5112d154bb3b6d34cb4b8dedde.idx +0 -0
- package/template/agora-rn-uikit/.git/objects/pack/{pack-0061d00cd98162a329a32b537488a35d0abeb069.pack → pack-f274a85fccfc9b5112d154bb3b6d34cb4b8dedde.pack} +0 -0
- package/template/agora-rn-uikit/.git/packed-refs +5 -1
- package/template/agora-rn-uikit/.git/refs/heads/release/fpe-1.0.0 +1 -0
- package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
- package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
- package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
- package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +14 -2
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
- package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
- package/template/agora-rn-uikit/src/index.ts +12 -12
- package/template/babel.config.js +17 -1
- package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
- package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
- package/template/bridge/rtc/webNg/Types.ts +14 -0
- package/template/bridge/rtc/webNg/index.ts +5 -2
- package/template/bridge/rtm/web/index.ts +13 -7
- package/template/electron-builder.js +3 -2
- package/template/esbuild.rsdk.go +226 -0
- package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
- package/template/fpe-api/components.ts +42 -0
- package/template/fpe-api/context.ts +45 -0
- package/template/fpe-api/fpeEvents.ts +9 -0
- package/template/fpe-api/index.ts +21 -0
- package/template/fpe-api/install.ts +128 -0
- package/template/fpe-api/typeDefinition.ts +143 -0
- package/template/fpe-api/useFpe.tsx +35 -0
- package/template/fpe-api/utils.ts +62 -0
- package/template/fpe-implementation/createHook.ts +33 -0
- package/template/fpe-implementation/dummyFpe.ts +17 -0
- package/template/fpe-implementation/index.ts +1 -0
- package/template/fpe-todo.txt +14 -0
- package/template/fpe.config.js +25 -0
- package/template/global.d.ts +4 -0
- package/template/index.rsdk.tsx +27 -0
- package/template/index.wsdk.tsx +27 -0
- package/template/package-lock.json +2297 -2533
- package/template/package.json +28 -12
- package/template/react-native-toast-message/src/index.js +9 -10
- package/template/react-native-toast-message/src/index.wsdk.js +419 -0
- package/template/src/App.tsx +97 -65
- package/template/src/AppWrapper.tsx +79 -0
- package/template/src/SDKAppWrapper.tsx +67 -0
- package/template/src/atoms/PrimaryButton.tsx +14 -8
- package/template/src/atoms/TextInput.tsx +13 -5
- package/template/src/components/Chat.tsx +171 -139
- package/template/src/components/ChatContext.ts +14 -22
- package/template/src/components/ColorConfigure.tsx +2 -2
- package/template/src/components/Controls.native.tsx +72 -62
- package/template/src/components/Controls.tsx +90 -69
- package/template/src/components/DeviceConfigure.tsx +1 -1
- package/template/src/components/DeviceContext.tsx +14 -7
- package/template/src/components/GraphQLProvider.tsx +9 -2
- package/template/src/components/GridVideo.tsx +20 -159
- package/template/src/components/HostControlView.tsx +54 -15
- package/template/src/components/Navbar.tsx +408 -157
- package/template/src/components/NetworkQualityContext.tsx +29 -22
- package/template/src/components/ParticipantsView.tsx +97 -119
- package/template/src/components/PinnedVideo.tsx +41 -188
- package/template/src/components/Precall.native.tsx +131 -97
- package/template/src/components/Precall.tsx +193 -158
- package/template/src/components/RTMConfigure.tsx +320 -398
- package/template/src/components/Router.sdk.ts +20 -0
- package/template/src/components/SessionContext.tsx +6 -3
- package/template/src/components/Settings.native.tsx +3 -0
- package/template/src/components/Settings.tsx +65 -31
- package/template/src/components/SettingsView.tsx +14 -8
- package/template/src/components/Share.tsx +188 -220
- package/template/src/components/StorageContext.tsx +5 -5
- package/template/src/components/StoreToken.tsx +5 -1
- package/template/src/components/chat-messages/useChatMessages.tsx +202 -0
- package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
- package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
- package/template/src/components/common/Error.tsx +54 -0
- package/template/src/components/common/Logo.tsx +35 -0
- package/template/src/components/common/index.tsx +8 -0
- package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
- package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
- package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
- package/template/src/components/dimension/DimensionContext.ts +27 -0
- package/template/src/components/dimension/DimensionProvider.tsx +34 -0
- package/template/src/components/livestream/LiveStreamContext.tsx +293 -272
- package/template/src/components/livestream/Types.ts +26 -7
- package/template/src/components/livestream/index.ts +13 -2
- package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
- package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
- package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
- package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
- package/template/src/components/participants/AllHostParticipants.tsx +36 -53
- package/template/src/components/participants/MeParticipant.tsx +9 -10
- package/template/src/components/participants/ParticipantName.tsx +2 -1
- package/template/src/components/participants/RemoteParticipants.tsx +3 -3
- package/template/src/components/precall/LocalMute.native.tsx +91 -0
- package/template/src/components/precall/LocalMute.tsx +90 -0
- package/template/src/components/precall/VideoPreview.native.tsx +35 -0
- package/template/src/components/precall/VideoPreview.tsx +33 -0
- package/template/src/components/precall/index.tsx +28 -0
- package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
- package/template/src/components/precall/joinCallBtn.tsx +91 -0
- package/template/src/components/precall/meetingTitle.tsx +26 -0
- package/template/src/components/precall/selectDevice.tsx +46 -0
- package/template/src/components/precall/textInput.tsx +43 -0
- package/template/src/components/precall/usePreCall.tsx +41 -0
- package/template/src/components/styles.ts +20 -3
- package/template/src/components/useShareLink.tsx +222 -0
- package/template/src/components/useWakeLock.tsx +3 -3
- package/template/src/custom-events/CustomEvents.ts +197 -0
- package/template/src/custom-events/index.tsx +4 -0
- package/template/src/custom-events/types.ts +51 -0
- package/template/src/language/default-labels/commonLabels.ts +21 -0
- package/template/src/language/default-labels/createScreenLabels.ts +22 -0
- package/template/src/language/default-labels/index.ts +38 -0
- package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
- package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
- package/template/src/language/default-labels/videoCallScreenLabels.ts +189 -0
- package/template/src/language/i18nTypes.ts +10 -0
- package/template/src/language/index.ts +18 -0
- package/template/src/language/useLanguage.tsx +92 -0
- package/template/src/pages/Authenticate.tsx +21 -15
- package/template/src/pages/Create.tsx +176 -159
- package/template/src/pages/Join.tsx +44 -32
- package/template/src/pages/VideoCall.tsx +134 -406
- package/template/src/pages/create/useCreate.tsx +37 -0
- package/template/src/pages/video-call/CustomLayout.ts +17 -0
- package/template/src/pages/video-call/CustomUserContextHolder.tsx +12 -0
- package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
- package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
- package/template/src/pages/video-call/RenderComponent.tsx +52 -0
- package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
- package/template/src/pages/video-call/VideoComponent.tsx +34 -0
- package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
- package/template/src/pages/video-call/index.ts +20 -0
- package/template/src/rtm/RTMEngine.ts +58 -0
- package/template/src/rtm/utils.ts +28 -0
- package/template/src/rtm-events/EventUtils.ts +268 -0
- package/template/src/rtm-events/EventsQueue.ts +38 -0
- package/template/src/rtm-events/constants.ts +40 -0
- package/template/src/rtm-events/index.tsx +8 -0
- package/template/src/rtm-events/types.ts +7 -0
- package/template/src/subComponents/ChatBubble.tsx +18 -11
- package/template/src/subComponents/ChatContainer.tsx +78 -29
- package/template/src/subComponents/ChatInput.tsx +146 -70
- package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
- package/template/src/subComponents/Error.tsx +35 -24
- package/template/src/subComponents/LanguageSelector.tsx +85 -0
- package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
- package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
- package/template/src/subComponents/LocalAudioMute.tsx +52 -30
- package/template/src/subComponents/LocalEndCall.tsx +52 -0
- package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
- package/template/src/subComponents/LocalVideoMute.tsx +48 -30
- package/template/src/subComponents/LogoutButton.tsx +20 -5
- package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
- package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
- package/template/src/subComponents/Recording.tsx +46 -138
- package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
- package/template/src/subComponents/RemoteEndCall.tsx +18 -7
- package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
- package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
- package/template/src/subComponents/SelectDevice.tsx +88 -45
- package/template/src/subComponents/SelectOAuth.tsx +30 -6
- package/template/src/subComponents/SidePanelButtons.ts +39 -0
- package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
- package/template/src/subComponents/TextWithTooltip.tsx +15 -20
- package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
- package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
- package/template/src/subComponents/livestream/index.ts +10 -2
- package/template/src/subComponents/recording/useRecording.tsx +209 -0
- package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
- package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +59 -31
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +97 -138
- package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
- package/template/src/subComponents/toastConfig.tsx +25 -20
- package/template/src/utils/IsAttendeeUser.ts +34 -0
- package/template/src/utils/SdkEvents.ts +68 -0
- package/template/src/utils/common.tsx +40 -0
- package/template/src/utils/eventEmitter.ts +29 -0
- package/template/src/utils/getMeetingInvite.ts +30 -0
- package/template/src/utils/index.tsx +11 -2
- package/template/src/utils/isAudioEnabled.ts +29 -0
- package/template/src/utils/isHostUser.ts +33 -0
- package/template/src/utils/isMobileOrTablet.native.ts +5 -0
- package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
- package/template/src/utils/isPSTNUser.ts +30 -0
- package/template/src/utils/isSDK.sdk.ts +5 -0
- package/template/src/utils/isSDK.ts +5 -0
- package/template/src/utils/isScreenShareUser.ts +31 -0
- package/template/src/utils/isVideoEnabled.ts +29 -0
- package/template/src/utils/useButtonTemplate.tsx +43 -0
- package/template/src/utils/useCreateMeeting.ts +74 -0
- package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
- package/template/src/utils/useGetMeetingPhrase.ts +68 -0
- package/template/src/utils/useGetName.ts +20 -0
- package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
- package/template/src/utils/useJoinMeeting.ts +120 -0
- package/template/src/utils/useLayout.tsx +40 -0
- package/template/src/utils/useLiveStreamingUids.ts +26 -0
- package/template/src/utils/useMutePSTN.ts +43 -0
- package/template/src/utils/useMuteToggleLocal.ts +109 -0
- package/template/src/utils/useNavParams.ts +6 -0
- package/template/src/utils/useNavigateTo.ts +8 -0
- package/template/src/utils/usePrivateMessages.ts +33 -0
- package/template/src/utils/useRemoteEndCall.ts +27 -0
- package/template/src/utils/useRemoteMute.ts +64 -0
- package/template/src/utils/useSendControlMessage.ts +51 -0
- package/template/src/utils/useSendMessage.ts +40 -0
- package/template/src/utils/useSetName.ts +20 -0
- package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
- package/template/src/utils/useSidePanel.tsx +41 -0
- package/template/src/utils/useString.ts +61 -0
- package/template/src/utils/useUnreadMessageCount.ts +50 -0
- package/template/src/utils/useUserList.ts +26 -0
- package/template/tsconfig.json +4 -4
- package/template/tsconfig_fpeApi.json +103 -0
- package/template/tsconfig_rsdk_index.json +105 -0
- package/template/tsconfig_wsdk_index.json +104 -0
- package/template/webpack.commons.js +40 -16
- package/template/webpack.main.config.js +2 -1
- package/template/webpack.renderer.config.js +1 -1
- package/template/webpack.rsdk.config.js +33 -0
- package/template/webpack.ts.config.js +89 -0
- package/template/webpack.web.config.js +8 -1
- package/template/webpack.wsdk.config.js +34 -0
- package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
- package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
- package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
- package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
- package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
- package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
- package/template/src/subComponents/ScreenshareButton.tsx +0 -257
- package/template/src/subComponents/SwitchCamera.tsx +0 -35
- package/template/src/utils/hasBrandLogo.tsx +0 -3
- package/template/src/utils/mobileWebTest.native.tsx +0 -5
- package/template/src/utils/shouldAuthenticate.tsx +0 -7
|
@@ -0,0 +1,33 @@
|
|
|
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 React from 'react';
|
|
14
|
+
import {View} from 'react-native';
|
|
15
|
+
import {MaxVideoView} from '../../../agora-rn-uikit';
|
|
16
|
+
import useUserList from '../../utils/useUserList';
|
|
17
|
+
|
|
18
|
+
const VideoPreview: React.FC = () => {
|
|
19
|
+
const {renderList, renderPosition} = useUserList();
|
|
20
|
+
|
|
21
|
+
const [maxUid] = renderPosition;
|
|
22
|
+
|
|
23
|
+
if (!maxUid) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<View style={{borderRadius: 10, flex: 1}}>
|
|
29
|
+
<MaxVideoView user={renderList[maxUid]} key={maxUid} />
|
|
30
|
+
</View>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
export default VideoPreview;
|
|
@@ -0,0 +1,28 @@
|
|
|
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 PreCallLocalMute, {PreCallLocalMuteComponentsArray} from './LocalMute';
|
|
14
|
+
import PreCallVideoPreview from './VideoPreview';
|
|
15
|
+
import PreCallSelectDevice from './selectDevice';
|
|
16
|
+
import PreCallJoinBtn, {PreCallJoinCallBtnProps} from './joinCallBtn';
|
|
17
|
+
import PreCallTextInput from './textInput';
|
|
18
|
+
import PreCallMeetingTitle from './meetingTitle';
|
|
19
|
+
export {
|
|
20
|
+
PreCallLocalMuteComponentsArray,
|
|
21
|
+
PreCallLocalMute,
|
|
22
|
+
PreCallVideoPreview,
|
|
23
|
+
PreCallSelectDevice,
|
|
24
|
+
PreCallJoinBtn,
|
|
25
|
+
PreCallTextInput,
|
|
26
|
+
PreCallMeetingTitle,
|
|
27
|
+
};
|
|
28
|
+
export type {PreCallJoinCallBtnProps};
|
|
@@ -0,0 +1,69 @@
|
|
|
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 React, {useContext, useEffect} from 'react';
|
|
14
|
+
import PrimaryButton from '../../atoms/PrimaryButton';
|
|
15
|
+
import {usePreCall} from '../../components/precall/usePreCall';
|
|
16
|
+
import {useString} from '../../utils/useString';
|
|
17
|
+
import {ChannelProfile, PropsContext} from '../../../agora-rn-uikit';
|
|
18
|
+
import {JoinRoomButtonTextInterface} from '../../language/default-labels/precallScreenLabels';
|
|
19
|
+
import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
|
|
20
|
+
import useGetName from '../../utils/useGetName';
|
|
21
|
+
|
|
22
|
+
export interface PreCallJoinCallBtnProps {
|
|
23
|
+
render?: (
|
|
24
|
+
onPress: () => void,
|
|
25
|
+
title: string,
|
|
26
|
+
disabled: boolean,
|
|
27
|
+
) => JSX.Element;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const JoinCallBtn = (props: PreCallJoinCallBtnProps) => {
|
|
31
|
+
const {rtcProps} = useContext(PropsContext);
|
|
32
|
+
const {setCallActive} = usePreCall();
|
|
33
|
+
const username = useGetName();
|
|
34
|
+
const {isJoinDataFetched} = useMeetingInfo();
|
|
35
|
+
const joinRoomButton =
|
|
36
|
+
useString<JoinRoomButtonTextInterface>('joinRoomButton');
|
|
37
|
+
|
|
38
|
+
const [buttonText, setButtonText] = React.useState(
|
|
39
|
+
joinRoomButton({
|
|
40
|
+
ready: isJoinDataFetched,
|
|
41
|
+
role: $config.EVENT_MODE ? rtcProps.role : undefined,
|
|
42
|
+
}),
|
|
43
|
+
);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (rtcProps?.role) {
|
|
46
|
+
setButtonText(
|
|
47
|
+
joinRoomButton({
|
|
48
|
+
ready: isJoinDataFetched,
|
|
49
|
+
role: $config.EVENT_MODE ? rtcProps.role : undefined,
|
|
50
|
+
}),
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
}, [rtcProps?.role]);
|
|
54
|
+
|
|
55
|
+
const onSubmit = () => {
|
|
56
|
+
setCallActive(true);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const title = buttonText;
|
|
60
|
+
const onPress = () => onSubmit();
|
|
61
|
+
const disabled = !isJoinDataFetched || username === '';
|
|
62
|
+
return props?.render ? (
|
|
63
|
+
props.render(onPress, title, disabled)
|
|
64
|
+
) : (
|
|
65
|
+
<PrimaryButton onPress={onPress} disabled={disabled} text={title} />
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export default JoinCallBtn;
|
|
@@ -0,0 +1,91 @@
|
|
|
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 React, {useContext, useEffect} from 'react';
|
|
14
|
+
import PrimaryButton from '../../atoms/PrimaryButton';
|
|
15
|
+
import {usePreCall} from '../../components/precall/usePreCall';
|
|
16
|
+
import {useString} from '../../utils/useString';
|
|
17
|
+
import {ChannelProfile, PropsContext} from '../../../agora-rn-uikit';
|
|
18
|
+
import {JoinRoomButtonTextInterface} from '../../language/default-labels/precallScreenLabels';
|
|
19
|
+
import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
|
|
20
|
+
import useGetName from '../../utils/useGetName';
|
|
21
|
+
import {useWakeLock} from '../../components/useWakeLock';
|
|
22
|
+
import isMobileOrTablet from '../../utils/isMobileOrTablet';
|
|
23
|
+
import {isWeb} from '../../utils/common';
|
|
24
|
+
|
|
25
|
+
const audio = new Audio(
|
|
26
|
+
'https://dl.dropboxusercontent.com/s/1cdwpm3gca9mlo0/kick.mp3',
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
export interface PreCallJoinCallBtnProps {
|
|
30
|
+
render?: (
|
|
31
|
+
onPress: () => void,
|
|
32
|
+
title: string,
|
|
33
|
+
disabled: boolean,
|
|
34
|
+
) => JSX.Element;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const JoinCallBtn = (props: PreCallJoinCallBtnProps) => {
|
|
38
|
+
const {rtcProps} = useContext(PropsContext);
|
|
39
|
+
const {setCallActive} = usePreCall();
|
|
40
|
+
const username = useGetName();
|
|
41
|
+
const {isJoinDataFetched} = useMeetingInfo();
|
|
42
|
+
const {awake, request} = useWakeLock();
|
|
43
|
+
const joinRoomButton =
|
|
44
|
+
useString<JoinRoomButtonTextInterface>('joinRoomButton');
|
|
45
|
+
|
|
46
|
+
const [buttonText, setButtonText] = React.useState(
|
|
47
|
+
joinRoomButton({
|
|
48
|
+
ready: isJoinDataFetched,
|
|
49
|
+
role: $config.EVENT_MODE ? rtcProps.role : undefined,
|
|
50
|
+
}),
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const onSubmit = () => {
|
|
54
|
+
setCallActive(true);
|
|
55
|
+
// Play a sound to avoid autoblocking in safari
|
|
56
|
+
if (isWeb || isMobileOrTablet()) {
|
|
57
|
+
audio.volume = 0;
|
|
58
|
+
audio.play().then(() => {
|
|
59
|
+
// pause directly once played
|
|
60
|
+
audio.pause();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// Avoid Sleep only on mobile browsers
|
|
64
|
+
if (isWeb && isMobileOrTablet() && !awake) {
|
|
65
|
+
// Request wake lock
|
|
66
|
+
request();
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (rtcProps?.role) {
|
|
72
|
+
setButtonText(
|
|
73
|
+
joinRoomButton({
|
|
74
|
+
ready: isJoinDataFetched,
|
|
75
|
+
role: $config.EVENT_MODE ? rtcProps.role : undefined,
|
|
76
|
+
}),
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
}, [rtcProps?.role]);
|
|
80
|
+
|
|
81
|
+
const title = buttonText;
|
|
82
|
+
const onPress = () => onSubmit();
|
|
83
|
+
const disabled = !isJoinDataFetched || username === '';
|
|
84
|
+
return props?.render ? (
|
|
85
|
+
props.render(onPress, title, disabled)
|
|
86
|
+
) : (
|
|
87
|
+
<PrimaryButton onPress={onPress} disabled={disabled} text={title} />
|
|
88
|
+
);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export default JoinCallBtn;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {Text, StyleSheet, View} from 'react-native';
|
|
3
|
+
import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
|
|
4
|
+
|
|
5
|
+
const MeetingTitle: React.FC = () => {
|
|
6
|
+
const {meetingTitle} = useMeetingInfo();
|
|
7
|
+
return (
|
|
8
|
+
<>
|
|
9
|
+
<Text style={[style.titleHeading, {color: $config.PRIMARY_COLOR}]}>
|
|
10
|
+
{meetingTitle}
|
|
11
|
+
</Text>
|
|
12
|
+
<View style={{height: 50}} />
|
|
13
|
+
</>
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default MeetingTitle;
|
|
18
|
+
|
|
19
|
+
const style = StyleSheet.create({
|
|
20
|
+
titleHeading: {
|
|
21
|
+
fontSize: 28,
|
|
22
|
+
fontWeight: '700',
|
|
23
|
+
textAlign: 'center',
|
|
24
|
+
color: $config.SECONDARY_FONT_COLOR,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
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 React from 'react';
|
|
14
|
+
import {View, StyleSheet, Text} from 'react-native';
|
|
15
|
+
import {isWeb} from '../../utils/common';
|
|
16
|
+
import SelectDevice from '../../subComponents/SelectDevice';
|
|
17
|
+
import {useString} from '../../utils/useString';
|
|
18
|
+
|
|
19
|
+
const selectDevice: React.FC = () => {
|
|
20
|
+
//commented for v1 release
|
|
21
|
+
//const selectInputDeviceLabel = useString('selectInputDeviceLabel')();
|
|
22
|
+
const selectInputDeviceLabel = 'Select Input Device';
|
|
23
|
+
return (
|
|
24
|
+
<>
|
|
25
|
+
<Text style={style.subHeading}>{selectInputDeviceLabel}</Text>
|
|
26
|
+
<View
|
|
27
|
+
style={{
|
|
28
|
+
flex: 1,
|
|
29
|
+
maxWidth: isWeb ? '25vw' : 'auto',
|
|
30
|
+
marginVertical: 30,
|
|
31
|
+
}}>
|
|
32
|
+
<SelectDevice />
|
|
33
|
+
</View>
|
|
34
|
+
</>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export default selectDevice;
|
|
39
|
+
|
|
40
|
+
const style = StyleSheet.create({
|
|
41
|
+
subHeading: {
|
|
42
|
+
fontSize: 18,
|
|
43
|
+
fontWeight: '700',
|
|
44
|
+
color: $config.PRIMARY_FONT_COLOR,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
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 React from 'react';
|
|
14
|
+
import TextInput from '../../atoms/TextInput';
|
|
15
|
+
import {useString} from '../../utils/useString';
|
|
16
|
+
import {useMeetingInfo} from '../meeting-info/useMeetingInfo';
|
|
17
|
+
import useSetName from '../../utils/useSetName';
|
|
18
|
+
import useGetName from '../../utils/useGetName';
|
|
19
|
+
|
|
20
|
+
const PreCallTextInput: React.FC = () => {
|
|
21
|
+
//commented for v1 release
|
|
22
|
+
// const userNamePlaceholder = useString('userNamePlaceholder')();
|
|
23
|
+
// const fetchingNamePlaceholder = useString('fetchingNamePlaceholder')();
|
|
24
|
+
const userNamePlaceholder = 'Display name*';
|
|
25
|
+
const fetchingNamePlaceholder = 'Getting name...';
|
|
26
|
+
const username = useGetName();
|
|
27
|
+
const setUsername = useSetName();
|
|
28
|
+
const {isJoinDataFetched} = useMeetingInfo();
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<TextInput
|
|
32
|
+
value={username}
|
|
33
|
+
onChangeText={(text) => setUsername(text ? text.trim() : '')}
|
|
34
|
+
onSubmitEditing={() => {}}
|
|
35
|
+
placeholder={
|
|
36
|
+
isJoinDataFetched ? userNamePlaceholder : fetchingNamePlaceholder
|
|
37
|
+
}
|
|
38
|
+
editable={isJoinDataFetched}
|
|
39
|
+
/>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default PreCallTextInput;
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
import React, {createContext} from 'react';
|
|
13
|
+
import {createHook} from 'fpe-implementation';
|
|
14
|
+
import {ApolloError} from '@apollo/client';
|
|
15
|
+
|
|
16
|
+
export interface PreCallContextInterface {
|
|
17
|
+
callActive: boolean;
|
|
18
|
+
setCallActive: React.Dispatch<React.SetStateAction<boolean>>;
|
|
19
|
+
error?: ApolloError;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const PreCallContext = createContext<PreCallContextInterface>({
|
|
23
|
+
callActive: false,
|
|
24
|
+
setCallActive: () => {},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
interface PreCallProviderProps {
|
|
28
|
+
value: PreCallContextInterface;
|
|
29
|
+
children: React.ReactNode;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const PreCallProvider = (props: PreCallProviderProps) => {
|
|
33
|
+
return (
|
|
34
|
+
<PreCallContext.Provider value={{...props.value}}>
|
|
35
|
+
{props.children}
|
|
36
|
+
</PreCallContext.Provider>
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
const usePreCall = createHook(PreCallContext);
|
|
40
|
+
|
|
41
|
+
export {PreCallProvider, usePreCall};
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import {isWeb} from '../utils/common';
|
|
13
13
|
|
|
14
14
|
const styles = {
|
|
15
15
|
temp: {
|
|
@@ -19,8 +19,8 @@ const styles = {
|
|
|
19
19
|
borderRadius: 15,
|
|
20
20
|
},
|
|
21
21
|
bottomBar: {
|
|
22
|
-
flex:
|
|
23
|
-
paddingHorizontal:
|
|
22
|
+
flex: isWeb ? 1.3 : 1.6,
|
|
23
|
+
paddingHorizontal: isWeb ? '20%' : '1%',
|
|
24
24
|
backgroundColor: $config.SECONDARY_FONT_COLOR + 80,
|
|
25
25
|
flexDirection: 'row',
|
|
26
26
|
justifyContent: 'space-evenly',
|
|
@@ -41,6 +41,23 @@ const styles = {
|
|
|
41
41
|
alignItems: 'center',
|
|
42
42
|
justifyContent: 'center',
|
|
43
43
|
},
|
|
44
|
+
localButtonWithoutBG: {
|
|
45
|
+
borderRadius: 23,
|
|
46
|
+
borderColor: $config.PRIMARY_COLOR,
|
|
47
|
+
borderWidth: 0,
|
|
48
|
+
width: 40,
|
|
49
|
+
height: 40,
|
|
50
|
+
padding: 3,
|
|
51
|
+
display: 'flex',
|
|
52
|
+
alignSelf: 'center',
|
|
53
|
+
alignItems: 'center',
|
|
54
|
+
justifyContent: 'center',
|
|
55
|
+
},
|
|
56
|
+
fullWidthButton: {
|
|
57
|
+
width: '100%',
|
|
58
|
+
height: '100%',
|
|
59
|
+
resizeMode: 'contain',
|
|
60
|
+
},
|
|
44
61
|
endCall: {
|
|
45
62
|
backgroundColor: $config.SECONDARY_FONT_COLOR, //'#fff',
|
|
46
63
|
borderRadius: 23,
|
|
@@ -0,0 +1,222 @@
|
|
|
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 {meetingTitle, meetingPassphrase, isSeparateHostLink} =
|
|
49
|
+
useMeetingInfo();
|
|
50
|
+
|
|
51
|
+
//commmented for v1 release
|
|
52
|
+
// const copiedToClipboardText = useString(
|
|
53
|
+
// 'copiedToClipboardNotificationLabel',
|
|
54
|
+
// )();
|
|
55
|
+
// const meetingIdText = useString('meetingIdLabel')();
|
|
56
|
+
// const PSTNNumberText = useString('PSTNNumber')();
|
|
57
|
+
// const PSTNPinText = useString('PSTNPin')();
|
|
58
|
+
// const meetingInviteText =
|
|
59
|
+
// useString<MeetingInviteInterface>('meetingInviteText');
|
|
60
|
+
const copiedToClipboardText = 'Copied to Clipboard';
|
|
61
|
+
const meetingIdText = 'Meeting ID';
|
|
62
|
+
const PSTNNumberText = 'PSTN Number';
|
|
63
|
+
const PSTNPinText = 'PSTN Pin';
|
|
64
|
+
const meetingInviteText = ({meetingName, id, url, pstn}) => {
|
|
65
|
+
let inviteContent = '';
|
|
66
|
+
if (url) {
|
|
67
|
+
// if host data is present generate links for both host and attendee
|
|
68
|
+
if (url?.host) {
|
|
69
|
+
inviteContent += `Meeting - ${meetingName}\nURL for Attendee: ${url?.attendee}\nURL for Host: ${url?.host}`;
|
|
70
|
+
}
|
|
71
|
+
// if host data is not present then generate link for attendee alone
|
|
72
|
+
else {
|
|
73
|
+
inviteContent += `Meeting - ${meetingName}\nMeeting URL: ${url?.attendee}`;
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
// if host data is present generate meeting ID for both host and attendee
|
|
77
|
+
if (id?.host) {
|
|
78
|
+
inviteContent += `Meeting - ${meetingName}\nAttendee Meeting ID: ${id?.attendee}\nHost Meeting ID: ${id?.host}`;
|
|
79
|
+
}
|
|
80
|
+
// if host data is not present then generate meeting ID for attendee alone
|
|
81
|
+
else {
|
|
82
|
+
inviteContent += `Meeting - ${meetingName}\nMeeting ID: ${id?.attendee}`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Adding pstn data into meeting data if present
|
|
86
|
+
if (pstn?.number && pstn?.pin) {
|
|
87
|
+
inviteContent += `\nPSTN Number: ${pstn.number}\nPSTN Pin: ${pstn.pin}`;
|
|
88
|
+
}
|
|
89
|
+
return inviteContent;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const isSDK = isSDKCheck();
|
|
93
|
+
|
|
94
|
+
const getMeetingInvite = () => {
|
|
95
|
+
let baseURL = getBaseURL();
|
|
96
|
+
let stringToCopy = meetingInviteText({
|
|
97
|
+
meetingName: meetingTitle,
|
|
98
|
+
url: baseURL
|
|
99
|
+
? GetMeetingInviteURL(
|
|
100
|
+
baseURL,
|
|
101
|
+
meetingPassphrase.attendee,
|
|
102
|
+
isSeparateHostLink ? meetingPassphrase.host : undefined,
|
|
103
|
+
)
|
|
104
|
+
: undefined,
|
|
105
|
+
id: !baseURL
|
|
106
|
+
? GetMeetingInviteID(
|
|
107
|
+
meetingPassphrase.attendee,
|
|
108
|
+
isSeparateHostLink ? meetingPassphrase.host : undefined,
|
|
109
|
+
)
|
|
110
|
+
: undefined,
|
|
111
|
+
pstn: meetingPassphrase?.pstn
|
|
112
|
+
? {
|
|
113
|
+
number: meetingPassphrase.pstn.number,
|
|
114
|
+
pin: meetingPassphrase.pstn.pin,
|
|
115
|
+
}
|
|
116
|
+
: undefined,
|
|
117
|
+
});
|
|
118
|
+
return stringToCopy;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const getBaseURL = () => {
|
|
122
|
+
let baseURL =
|
|
123
|
+
platform === 'web' && !isSDK
|
|
124
|
+
? $config.FRONTEND_ENDPOINT || window.location.origin
|
|
125
|
+
: undefined;
|
|
126
|
+
return baseURL;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const getAttendeeURLOrId = () => {
|
|
130
|
+
let stringToCopy = '';
|
|
131
|
+
let baseURL = getBaseURL();
|
|
132
|
+
if (meetingPassphrase?.attendee) {
|
|
133
|
+
if (baseURL) {
|
|
134
|
+
stringToCopy += `${baseURL}/${meetingPassphrase.attendee}`;
|
|
135
|
+
} else {
|
|
136
|
+
stringToCopy += `${meetingIdText}: ${meetingPassphrase.attendee}`;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return stringToCopy;
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const getHostUrlOrId = () => {
|
|
143
|
+
let stringToCopy = '';
|
|
144
|
+
if (meetingPassphrase?.host) {
|
|
145
|
+
let baseURL = getBaseURL();
|
|
146
|
+
if (baseURL) {
|
|
147
|
+
stringToCopy += `${baseURL}/${meetingPassphrase.host}`;
|
|
148
|
+
} else {
|
|
149
|
+
stringToCopy += `${meetingIdText}: ${meetingPassphrase.host}`;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return stringToCopy;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const getPstn = () => {
|
|
156
|
+
let stringToCopy = '';
|
|
157
|
+
if (
|
|
158
|
+
meetingPassphrase?.pstn &&
|
|
159
|
+
meetingPassphrase.pstn?.number &&
|
|
160
|
+
meetingPassphrase.pstn?.pin
|
|
161
|
+
) {
|
|
162
|
+
stringToCopy += `${PSTNNumberText}: ${meetingPassphrase.pstn.number} ${PSTNPinText}: ${meetingPassphrase.pstn.pin}`;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return stringToCopy;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const getShareLink = (input: SHARE_LINK_CONTENT_TYPE) => {
|
|
169
|
+
let stringToCopy = '';
|
|
170
|
+
switch (input) {
|
|
171
|
+
case SHARE_LINK_CONTENT_TYPE.MEETING_INVITE:
|
|
172
|
+
stringToCopy = getMeetingInvite();
|
|
173
|
+
break;
|
|
174
|
+
case SHARE_LINK_CONTENT_TYPE.ATTENDEE:
|
|
175
|
+
stringToCopy = getAttendeeURLOrId();
|
|
176
|
+
break;
|
|
177
|
+
case SHARE_LINK_CONTENT_TYPE.HOST:
|
|
178
|
+
stringToCopy = getHostUrlOrId();
|
|
179
|
+
break;
|
|
180
|
+
case SHARE_LINK_CONTENT_TYPE.PSTN:
|
|
181
|
+
stringToCopy = getPstn();
|
|
182
|
+
default:
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
return stringToCopy;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
const copyShareLinkToClipboard = (input: SHARE_LINK_CONTENT_TYPE) => {
|
|
189
|
+
let stringToCopy = '';
|
|
190
|
+
switch (input) {
|
|
191
|
+
case SHARE_LINK_CONTENT_TYPE.MEETING_INVITE:
|
|
192
|
+
stringToCopy = getMeetingInvite();
|
|
193
|
+
break;
|
|
194
|
+
case SHARE_LINK_CONTENT_TYPE.ATTENDEE:
|
|
195
|
+
stringToCopy = getAttendeeURLOrId();
|
|
196
|
+
break;
|
|
197
|
+
case SHARE_LINK_CONTENT_TYPE.HOST:
|
|
198
|
+
stringToCopy = getHostUrlOrId();
|
|
199
|
+
break;
|
|
200
|
+
case SHARE_LINK_CONTENT_TYPE.PSTN:
|
|
201
|
+
stringToCopy = getPstn();
|
|
202
|
+
default:
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
Clipboard.setString(stringToCopy);
|
|
206
|
+
Toast.show({
|
|
207
|
+
type: 'success',
|
|
208
|
+
text1: copiedToClipboardText,
|
|
209
|
+
visibilityTime: 1000,
|
|
210
|
+
});
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
return (
|
|
214
|
+
<ShareLinkContext.Provider value={{copyShareLinkToClipboard, getShareLink}}>
|
|
215
|
+
{props.children}
|
|
216
|
+
</ShareLinkContext.Provider>
|
|
217
|
+
);
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
const useShareLink = createHook(ShareLinkContext);
|
|
221
|
+
|
|
222
|
+
export {ShareLinkProvider, ShareLinkContext, useShareLink};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import NoSleep from 'nosleep.js';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import mobileAndTabletCheck from '../utils/isMobileOrTablet';
|
|
4
|
+
import {isWeb} from '../utils/common';
|
|
5
5
|
|
|
6
6
|
const useWakeLock = () => {
|
|
7
|
-
if (mobileAndTabletCheck() &&
|
|
7
|
+
if (mobileAndTabletCheck() && isWeb) {
|
|
8
8
|
const noSleep = React.useMemo(() => new NoSleep(), []);
|
|
9
9
|
const [awake, set] = React.useState(noSleep.isEnabled);
|
|
10
10
|
|