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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0000000000000000000000000000000000000000 f27948778f3d89af8ae9f1e8d881682f6103c9be nitte93 <nitte.tiwari1993@gmail.com> 1657173941 +0530 branch: Created from refs/remotes/origin/ab-dev-auto
|
package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx
DELETED
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
f27948778f3d89af8ae9f1e8d881682f6103c9be
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {UidStateInterface} from './RtcContext';
|
|
3
|
-
|
|
4
|
-
const MaxUidContext = React.createContext<UidStateInterface['max']>([]);
|
|
5
|
-
export const MaxUidProvider = MaxUidContext.Provider;
|
|
6
|
-
export const MaxUidConsumer = MaxUidContext.Consumer;
|
|
7
|
-
export default MaxUidContext;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {UidStateInterface} from './RtcContext';
|
|
3
|
-
|
|
4
|
-
const MinUidContext = React.createContext<UidStateInterface['min']>([]);
|
|
5
|
-
|
|
6
|
-
export const MinUidProvider = MinUidContext.Provider;
|
|
7
|
-
export const MinUidConsumer = MinUidContext.Consumer;
|
|
8
|
-
export default MinUidContext;
|
|
@@ -1,97 +0,0 @@
|
|
|
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 {createContext} from 'react';
|
|
13
|
-
import React, {useState, useContext, useEffect} from 'react';
|
|
14
|
-
import chatContext from '../../ChatContext';
|
|
15
|
-
import {UserType} from '../../../components/RTMConfigure';
|
|
16
|
-
import {filterObject} from '../../../utils';
|
|
17
|
-
import {
|
|
18
|
-
ClientRole,
|
|
19
|
-
MinUidContext,
|
|
20
|
-
MaxUidContext,
|
|
21
|
-
} from '../../../../agora-rn-uikit';
|
|
22
|
-
|
|
23
|
-
interface ParticipantContext {
|
|
24
|
-
hostList: any;
|
|
25
|
-
audienceList: any;
|
|
26
|
-
hostCount: number;
|
|
27
|
-
audienceCount: number;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const ParticipantContext = createContext(null as unknown as ParticipantContext);
|
|
31
|
-
|
|
32
|
-
export const ParticipantContextProvider: React.FC = (props: any) => {
|
|
33
|
-
const [hostCount, setHostCount] = useState(0);
|
|
34
|
-
const [hostList, setHostList] = useState({});
|
|
35
|
-
const [audienceList, setAudienceList] = useState({});
|
|
36
|
-
const [audienceCount, setAudienceCount] = useState(0);
|
|
37
|
-
|
|
38
|
-
const {userList, localUid} = useContext(chatContext);
|
|
39
|
-
// For host list which are publishing
|
|
40
|
-
const min = useContext(MinUidContext);
|
|
41
|
-
const max = useContext(MaxUidContext);
|
|
42
|
-
|
|
43
|
-
useEffect(() => {
|
|
44
|
-
const hostList = [...min, ...max].reduce((acc, cur) => {
|
|
45
|
-
if (
|
|
46
|
-
cur.uid === 'local' &&
|
|
47
|
-
userList[localUid]?.role == ClientRole.Audience
|
|
48
|
-
) {
|
|
49
|
-
// If local user skip
|
|
50
|
-
return acc;
|
|
51
|
-
}
|
|
52
|
-
const userUID =
|
|
53
|
-
cur.uid === 'local'
|
|
54
|
-
? localUid
|
|
55
|
-
: cur.uid == 1
|
|
56
|
-
? userList[localUid].screenUid
|
|
57
|
-
: cur.uid;
|
|
58
|
-
|
|
59
|
-
return {
|
|
60
|
-
...acc,
|
|
61
|
-
[userUID]: {...userList[userUID]},
|
|
62
|
-
};
|
|
63
|
-
}, {});
|
|
64
|
-
setHostList(hostList);
|
|
65
|
-
setHostCount(Object.keys(hostList).length);
|
|
66
|
-
}, [min, max, userList]);
|
|
67
|
-
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
if (Object.keys(userList).length !== 0) {
|
|
70
|
-
const audienceList = filterObject(
|
|
71
|
-
userList,
|
|
72
|
-
([k, v]) =>
|
|
73
|
-
v?.type === UserType.Normal &&
|
|
74
|
-
v?.role == ClientRole.Audience &&
|
|
75
|
-
!v.offline,
|
|
76
|
-
);
|
|
77
|
-
setAudienceList(audienceList);
|
|
78
|
-
setAudienceCount(Object.keys(audienceList).length);
|
|
79
|
-
}
|
|
80
|
-
}, [userList]);
|
|
81
|
-
|
|
82
|
-
return (
|
|
83
|
-
<ParticipantContext.Provider
|
|
84
|
-
value={{
|
|
85
|
-
hostList,
|
|
86
|
-
audienceList,
|
|
87
|
-
hostCount,
|
|
88
|
-
audienceCount,
|
|
89
|
-
}}>
|
|
90
|
-
{props.children}
|
|
91
|
-
</ParticipantContext.Provider>
|
|
92
|
-
);
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
export const ParticipantContextConsumer = ParticipantContext.Consumer;
|
|
96
|
-
|
|
97
|
-
export default ParticipantContext;
|
|
@@ -1,257 +0,0 @@
|
|
|
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, {useContext, useEffect, useRef} from 'react';
|
|
13
|
-
import {Image, TouchableOpacity, StyleSheet, View, Text} from 'react-native';
|
|
14
|
-
import icons from '../assets/icons';
|
|
15
|
-
import {RtcContext} from '../../agora-rn-uikit';
|
|
16
|
-
import {PropsContext} from '../../agora-rn-uikit';
|
|
17
|
-
import ColorContext from '../components/ColorContext';
|
|
18
|
-
import {gql, useMutation} from '@apollo/client';
|
|
19
|
-
import {useParams} from '../components/Router';
|
|
20
|
-
import ChatContext, {controlMessageEnum} from '../components/ChatContext';
|
|
21
|
-
import {MinUidContext} from '../../agora-rn-uikit';
|
|
22
|
-
import {MaxUidContext} from '../../agora-rn-uikit';
|
|
23
|
-
import Layout from '../subComponents/LayoutEnum';
|
|
24
|
-
import {ImageIcon} from '../../agora-rn-uikit';
|
|
25
|
-
|
|
26
|
-
const SET_PRESENTER = gql`
|
|
27
|
-
mutation setPresenter($uid: Int!, $passphrase: String!) {
|
|
28
|
-
setPresenter(uid: $uid, passphrase: $passphrase)
|
|
29
|
-
}
|
|
30
|
-
`;
|
|
31
|
-
|
|
32
|
-
const SET_NORMAL = gql`
|
|
33
|
-
mutation setNormal($passphrase: String!) {
|
|
34
|
-
setNormal(passphrase: $passphrase)
|
|
35
|
-
}
|
|
36
|
-
`;
|
|
37
|
-
|
|
38
|
-
interface ScreenSharingProps {
|
|
39
|
-
screenshareActive: boolean;
|
|
40
|
-
setScreenshareActive: React.Dispatch<React.SetStateAction<boolean>>;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function usePrevious(value) {
|
|
44
|
-
const ref = useRef();
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
ref.current = value;
|
|
47
|
-
});
|
|
48
|
-
return ref.current;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* A component to start and stop screen sharing on web clients.
|
|
52
|
-
* Screen sharing is not yet implemented on mobile platforms.
|
|
53
|
-
* Electron has it's own screen sharing component
|
|
54
|
-
*/
|
|
55
|
-
const ScreenshareButton = (props: ScreenSharingProps) => {
|
|
56
|
-
const {userList} = useContext(ChatContext);
|
|
57
|
-
const {primaryColor} = useContext(ColorContext);
|
|
58
|
-
const rtc = useContext(RtcContext);
|
|
59
|
-
const {dispatch} = rtc;
|
|
60
|
-
const max = useContext(MaxUidContext);
|
|
61
|
-
const min = useContext(MinUidContext);
|
|
62
|
-
const users = [...max, ...min];
|
|
63
|
-
const prevUsers = usePrevious({users});
|
|
64
|
-
const prevUserList = usePrevious({userList});
|
|
65
|
-
const {phrase} = useParams();
|
|
66
|
-
const {screenshareActive, setScreenshareActive, setLayout, recordingActive} =
|
|
67
|
-
props;
|
|
68
|
-
const {channel, appId, screenShareUid, screenShareToken, encryption} =
|
|
69
|
-
useContext(PropsContext).rtcProps;
|
|
70
|
-
|
|
71
|
-
const [setPresenterQuery] = useMutation(SET_PRESENTER);
|
|
72
|
-
const [setNormalQuery] = useMutation(SET_NORMAL);
|
|
73
|
-
|
|
74
|
-
useEffect(() => {
|
|
75
|
-
rtc.RtcEngine.addListener('ScreenshareStopped', () => {
|
|
76
|
-
setScreenshareActive(false);
|
|
77
|
-
console.log('STOPPED SHARING');
|
|
78
|
-
setLayout((l: Layout) =>
|
|
79
|
-
l === Layout.Pinned ? Layout.Grid : Layout.Pinned,
|
|
80
|
-
);
|
|
81
|
-
setNormalQuery({variables: {passphrase: phrase}})
|
|
82
|
-
.then((res) => {
|
|
83
|
-
console.log(res.data);
|
|
84
|
-
if (res.data.stopRecordingSession === 'success') {
|
|
85
|
-
// Once the backend sucessfuly stops recording,
|
|
86
|
-
// send a control message to everbody in the channel indicating that cloud recording is now inactive.
|
|
87
|
-
// sendControlMessage(controlMessageEnum.cloudRecordingUnactive);
|
|
88
|
-
// set the local recording state to false to update the UI
|
|
89
|
-
// setScreenshareActive(false);
|
|
90
|
-
}
|
|
91
|
-
})
|
|
92
|
-
.catch((err) => {
|
|
93
|
-
console.log(err);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
}, []);
|
|
97
|
-
|
|
98
|
-
useEffect(() => {
|
|
99
|
-
if (prevUsers !== undefined) {
|
|
100
|
-
let joinedUser = users.filter((person) =>
|
|
101
|
-
prevUsers.users.every((person2) => !(person2.uid === person.uid)),
|
|
102
|
-
);
|
|
103
|
-
let leftUser = prevUsers.users.filter((person) =>
|
|
104
|
-
users.every((person2) => !(person2.uid === person.uid)),
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
if (joinedUser.length === 1) {
|
|
108
|
-
const newUserUid = joinedUser[0].uid;
|
|
109
|
-
if (userList[newUserUid] && userList[newUserUid].type === 1) {
|
|
110
|
-
dispatch({
|
|
111
|
-
type: 'SwapVideo',
|
|
112
|
-
value: [joinedUser[0]],
|
|
113
|
-
});
|
|
114
|
-
setLayout(Layout.Pinned);
|
|
115
|
-
} else if (newUserUid === 1) {
|
|
116
|
-
if (newUserUid !== users[0].uid) {
|
|
117
|
-
dispatch({
|
|
118
|
-
type: 'SwapVideo',
|
|
119
|
-
value: [joinedUser[0]],
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
setLayout(Layout.Pinned);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (leftUser.length === 1) {
|
|
127
|
-
const leftUserUid = leftUser[0].uid;
|
|
128
|
-
if (userList[leftUserUid] && userList[leftUserUid].type === 1) {
|
|
129
|
-
setLayout((l: Layout) =>
|
|
130
|
-
l === Layout.Pinned ? Layout.Grid : Layout.Pinned,
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}, [users, userList]);
|
|
136
|
-
return (
|
|
137
|
-
<TouchableOpacity
|
|
138
|
-
onPress={async () => {
|
|
139
|
-
const isScreenActive = screenshareActive;
|
|
140
|
-
if (!isScreenActive && recordingActive) {
|
|
141
|
-
// If screen share is not going on, start the screen share by executing the graphql query
|
|
142
|
-
setPresenterQuery({
|
|
143
|
-
variables: {
|
|
144
|
-
uid: screenShareUid,
|
|
145
|
-
passphrase: phrase,
|
|
146
|
-
},
|
|
147
|
-
})
|
|
148
|
-
.then((res) => {
|
|
149
|
-
if (res.data.setPresenter === 'success') {
|
|
150
|
-
// Once the backend sucessfuly starts screnshare,
|
|
151
|
-
// send a control message to everbody in the channel indicating that screen sharing is now active.
|
|
152
|
-
// sendControlMessage(controlMessageEnum.cloudRecordingActive);
|
|
153
|
-
// set the local recording state to true to update the UI
|
|
154
|
-
// setScreenshareActive(true);
|
|
155
|
-
}
|
|
156
|
-
})
|
|
157
|
-
.catch((err) => {
|
|
158
|
-
console.log(err);
|
|
159
|
-
});
|
|
160
|
-
} else if (isScreenActive && recordingActive) {
|
|
161
|
-
// If recording is already going on, stop the recording by executing the graphql query.
|
|
162
|
-
setNormalQuery({variables: {passphrase: phrase}})
|
|
163
|
-
.then((res) => {
|
|
164
|
-
console.log(res.data);
|
|
165
|
-
if (res.data.stopRecordingSession === 'success') {
|
|
166
|
-
// Once the backend sucessfuly stops recording,
|
|
167
|
-
// send a control message to everbody in the channel indicating that cloud recording is now inactive.
|
|
168
|
-
// sendControlMessage(controlMessageEnum.cloudRecordingUnactive);
|
|
169
|
-
// set the local recording state to false to update the UI
|
|
170
|
-
// setScreenshareActive(false);
|
|
171
|
-
}
|
|
172
|
-
})
|
|
173
|
-
.catch((err) => {
|
|
174
|
-
console.log(err);
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
try {
|
|
178
|
-
await rtc.RtcEngine.startScreenshare(
|
|
179
|
-
screenShareToken,
|
|
180
|
-
channel,
|
|
181
|
-
null,
|
|
182
|
-
screenShareUid,
|
|
183
|
-
appId,
|
|
184
|
-
rtc.RtcEngine,
|
|
185
|
-
encryption,
|
|
186
|
-
);
|
|
187
|
-
!isScreenActive && setScreenshareActive(true);
|
|
188
|
-
} catch (e) {
|
|
189
|
-
console.error("can't start the screen share", e);
|
|
190
|
-
setNormalQuery({variables: {passphrase: phrase}})
|
|
191
|
-
.then((res) => {
|
|
192
|
-
console.log(res.data);
|
|
193
|
-
if (res.data.stopRecordingSession === 'success') {
|
|
194
|
-
// Once the backend sucessfuly stops recording,
|
|
195
|
-
// send a control message to everbody in the channel indicating that cloud recording is now inactive.
|
|
196
|
-
// sendControlMessage(controlMessageEnum.cloudRecordingUnactive);
|
|
197
|
-
// set the local recording state to false to update the UI
|
|
198
|
-
// setScreenshareActive(false);
|
|
199
|
-
}
|
|
200
|
-
})
|
|
201
|
-
.catch((err) => {
|
|
202
|
-
console.log(err);
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
}}>
|
|
206
|
-
<View
|
|
207
|
-
style={
|
|
208
|
-
screenshareActive
|
|
209
|
-
? style.greenLocalButton
|
|
210
|
-
: [style.localButton, {borderColor: primaryColor}]
|
|
211
|
-
}>
|
|
212
|
-
<ImageIcon
|
|
213
|
-
name={screenshareActive ? 'screenshareOffIcon' : 'screenshareIcon'}
|
|
214
|
-
style={[style.buttonIcon]}
|
|
215
|
-
/>
|
|
216
|
-
</View>
|
|
217
|
-
<Text
|
|
218
|
-
style={{
|
|
219
|
-
textAlign: 'center',
|
|
220
|
-
marginTop: 5,
|
|
221
|
-
color: $config.PRIMARY_COLOR,
|
|
222
|
-
}}>
|
|
223
|
-
Share
|
|
224
|
-
</Text>
|
|
225
|
-
</TouchableOpacity>
|
|
226
|
-
);
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
const style = StyleSheet.create({
|
|
230
|
-
localButton: {
|
|
231
|
-
backgroundColor: $config.SECONDARY_FONT_COLOR,
|
|
232
|
-
borderRadius: 20,
|
|
233
|
-
borderColor: $config.PRIMARY_COLOR,
|
|
234
|
-
width: 40,
|
|
235
|
-
height: 40,
|
|
236
|
-
display: 'flex',
|
|
237
|
-
alignSelf: 'center',
|
|
238
|
-
alignItems: 'center',
|
|
239
|
-
justifyContent: 'center',
|
|
240
|
-
},
|
|
241
|
-
greenLocalButton: {
|
|
242
|
-
backgroundColor: '#4BEB5B',
|
|
243
|
-
borderRadius: 20,
|
|
244
|
-
borderColor: '#F86051',
|
|
245
|
-
width: 40,
|
|
246
|
-
height: 40,
|
|
247
|
-
alignSelf: 'center',
|
|
248
|
-
alignItems: 'center',
|
|
249
|
-
justifyContent: 'center',
|
|
250
|
-
},
|
|
251
|
-
buttonIcon: {
|
|
252
|
-
width: '90%',
|
|
253
|
-
height: '90%',
|
|
254
|
-
},
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
export default ScreenshareButton;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import React, {useContext} from 'react';
|
|
2
|
-
import {StyleSheet} from 'react-native';
|
|
3
|
-
import {RtcContext} from '../../agora-rn-uikit';
|
|
4
|
-
import {BtnTemplate} from '../../agora-rn-uikit';
|
|
5
|
-
import {LocalContext} from '../../agora-rn-uikit';
|
|
6
|
-
|
|
7
|
-
function SwitchCamera() {
|
|
8
|
-
const {RtcEngine} = useContext(RtcContext);
|
|
9
|
-
const local = useContext(LocalContext);
|
|
10
|
-
return (
|
|
11
|
-
<BtnTemplate
|
|
12
|
-
name={'switchCamera'}
|
|
13
|
-
btnText={'Switch'}
|
|
14
|
-
disabled={local.video ? false : true }
|
|
15
|
-
style={{
|
|
16
|
-
backgroundColor: $config.SECONDARY_FONT_COLOR, //'#fff',
|
|
17
|
-
borderRadius: 23,
|
|
18
|
-
borderColor: $config.PRIMARY_COLOR,
|
|
19
|
-
borderWidth: 0,
|
|
20
|
-
width: 40,
|
|
21
|
-
height: 40,
|
|
22
|
-
padding: 3,
|
|
23
|
-
display: 'flex',
|
|
24
|
-
alignSelf: 'center',
|
|
25
|
-
alignItems: 'center',
|
|
26
|
-
justifyContent: 'center',
|
|
27
|
-
}}
|
|
28
|
-
onPress={() => {
|
|
29
|
-
RtcEngine.switchCamera();
|
|
30
|
-
}}
|
|
31
|
-
/>
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export default SwitchCamera;
|