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.
- 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 +32186 -3078
- 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 +29 -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.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 +91 -115
- 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 +328 -416
- 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 +208 -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 +41 -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 +239 -0
- package/template/src/components/useWakeLock.tsx +3 -3
- package/template/src/custom-events/CustomEvents.ts +221 -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 +44 -0
- package/template/src/rtm-events/EventUtils.ts +267 -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 +79 -30
- 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 +61 -31
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +102 -143
- 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/HEAD +0 -1
- package/template/agora-rn-uikit/.git/config +0 -16
- package/template/agora-rn-uikit/.git/description +0 -1
- package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
- package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
- package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -173
- package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
- package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
- package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
- package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
- package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
- package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
- package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
- package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
- package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
- package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
- package/template/agora-rn-uikit/.git/index +0 -0
- package/template/agora-rn-uikit/.git/info/exclude +0 -6
- package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
- package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
- package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
- package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
- package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
- package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.pack +0 -0
- package/template/agora-rn-uikit/.git/packed-refs +0 -24
- package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
- package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
- package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
- package/template/agora-rn-uikit/.gitignore +0 -63
- package/template/agora-rn-uikit/package-lock.json +0 -7612
- package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
- package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
- package/template/package-lock.json +0 -22923
- package/template/react-native-toast-message/.gitignore +0 -5
- package/template/react-native-toast-message/.npmignore +0 -5
- package/template/react-native-toast-message/package-lock.json +0 -10553
- package/template/src/.DS_Store +0 -0
- package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
- package/template/src/subComponents/.DS_Store +0 -0
- 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,36 +1,21 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
useEffect,
|
|
5
|
-
useRef,
|
|
6
|
-
useState,
|
|
7
|
-
} from 'react';
|
|
8
|
-
import {useParams} from '../../components/Router';
|
|
9
|
-
import ChatContext from '../../components/ChatContext';
|
|
1
|
+
import React, {useContext, useEffect, useRef, useState} from 'react';
|
|
2
|
+
import {RtcContext, PropsContext, UidType} from '../../../agora-rn-uikit';
|
|
3
|
+
import {ScreenshareContext} from './useScreenshare';
|
|
10
4
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} from '
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
5
|
+
useChangeDefaultLayout,
|
|
6
|
+
useSetPinnedLayout,
|
|
7
|
+
} from '../../pages/video-call/DefaultLayouts';
|
|
8
|
+
import {useRecording} from '../recording/useRecording';
|
|
9
|
+
import {useScreenContext} from '../../components/contexts/ScreenShareContext';
|
|
10
|
+
import useUserList from '../../utils/useUserList';
|
|
11
|
+
import CustomEvents, {EventLevel} from '../../custom-events';
|
|
12
|
+
import {EventNames} from '../../rtm-events';
|
|
13
|
+
import {IAgoraRTC} from 'agora-rtc-sdk-ng';
|
|
14
|
+
import useRecordingLayoutQuery from '../recording/useRecordingLayoutQuery';
|
|
15
|
+
import {useString} from '../../utils/useString';
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
setPresenter(uid: $uid, passphrase: $passphrase)
|
|
23
|
-
}
|
|
24
|
-
`;
|
|
25
|
-
|
|
26
|
-
const SET_NORMAL = gql`
|
|
27
|
-
mutation setNormal($passphrase: String!) {
|
|
28
|
-
setNormal(passphrase: $passphrase)
|
|
29
|
-
}
|
|
30
|
-
`;
|
|
31
|
-
|
|
32
|
-
function usePrevious(value: any) {
|
|
33
|
-
const ref = useRef();
|
|
17
|
+
function usePrevious<T = any>(value: any) {
|
|
18
|
+
const ref = useRef<T>();
|
|
34
19
|
useEffect(() => {
|
|
35
20
|
ref.current = value;
|
|
36
21
|
});
|
|
@@ -39,159 +24,133 @@ function usePrevious(value: any) {
|
|
|
39
24
|
|
|
40
25
|
export const ScreenshareContextConsumer = ScreenshareContext.Consumer;
|
|
41
26
|
|
|
42
|
-
export const ScreenshareConfigure = (props:
|
|
43
|
-
const
|
|
44
|
-
const [screenshareActive, setScreenshareActive] = useState(false);
|
|
27
|
+
export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
28
|
+
const [isScreenshareActive, setScreenshareActive] = useState(false);
|
|
45
29
|
const rtc = useContext(RtcContext);
|
|
46
30
|
const {dispatch} = rtc;
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
const
|
|
31
|
+
const {renderList, renderPosition} = useUserList();
|
|
32
|
+
const {isRecordingActive} = useRecording();
|
|
33
|
+
const {executeNormalQuery, executePresenterQuery} = useRecordingLayoutQuery();
|
|
34
|
+
const {setScreenShareData, screenShareData} = useScreenContext();
|
|
35
|
+
// commented for v1 release
|
|
36
|
+
// const getScreenShareName = useString('screenshareUserName');
|
|
37
|
+
// const userText = useString('remoteUserDefaultLabel')();
|
|
38
|
+
const getScreenShareName = (name: string) => `${name}'s screenshare`;
|
|
39
|
+
const userText = 'User';
|
|
40
|
+
const setPinnedLayout = useSetPinnedLayout();
|
|
41
|
+
const changeLayout = useChangeDefaultLayout();
|
|
42
|
+
|
|
53
43
|
const {channel, appId, screenShareUid, screenShareToken, encryption} =
|
|
54
44
|
useContext(PropsContext).rtcProps;
|
|
55
45
|
|
|
56
|
-
const
|
|
57
|
-
|
|
46
|
+
const renderListRef = useRef({renderList: renderList});
|
|
47
|
+
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
renderListRef.current.renderList = renderList;
|
|
50
|
+
}, [renderList]);
|
|
51
|
+
|
|
52
|
+
const triggerChangeLayout = (pinned: boolean, screenShareUid?: UidType) => {
|
|
53
|
+
//screenshare is started set the layout to Pinned View
|
|
54
|
+
if (pinned && screenShareUid) {
|
|
55
|
+
dispatch({
|
|
56
|
+
type: 'SwapVideo',
|
|
57
|
+
value: [screenShareUid],
|
|
58
|
+
});
|
|
59
|
+
setPinnedLayout();
|
|
60
|
+
} else {
|
|
61
|
+
//screenshare is stopped set the layout Grid View
|
|
62
|
+
changeLayout();
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
CustomEvents.on(EventNames.SCREENSHARE_ATTRIBUTE, (data) => {
|
|
68
|
+
const screenUidOfUser =
|
|
69
|
+
renderListRef.current.renderList[data.sender].screenUid;
|
|
70
|
+
setScreenShareData((prevState) => {
|
|
71
|
+
return {
|
|
72
|
+
...prevState,
|
|
73
|
+
[screenUidOfUser]: {
|
|
74
|
+
name: renderListRef.current.renderList[screenUidOfUser]?.name,
|
|
75
|
+
isActive: data.payload.value === 'true' ? true : false,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
//if remote user started/stopped the screenshare then change the layout to pinned/grid
|
|
80
|
+
data.payload.value === 'true'
|
|
81
|
+
? triggerChangeLayout(true, screenUidOfUser)
|
|
82
|
+
: triggerChangeLayout(false);
|
|
83
|
+
});
|
|
84
|
+
}, []);
|
|
58
85
|
|
|
59
86
|
useEffect(() => {
|
|
87
|
+
// @ts-ignore
|
|
60
88
|
rtc.RtcEngine.addListener('ScreenshareStopped', () => {
|
|
61
89
|
setScreenshareActive(false);
|
|
62
90
|
console.log('STOPPED SHARING');
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
})
|
|
72
|
-
.catch((err) => {
|
|
73
|
-
console.log(err);
|
|
74
|
-
});
|
|
91
|
+
executeNormalQuery();
|
|
92
|
+
CustomEvents.send(EventNames.SCREENSHARE_ATTRIBUTE, {
|
|
93
|
+
value: `${false}`,
|
|
94
|
+
level: EventLevel.LEVEL2,
|
|
95
|
+
});
|
|
96
|
+
//if local user stopped the screenshare then change layout to grid
|
|
97
|
+
triggerChangeLayout(false);
|
|
75
98
|
});
|
|
76
99
|
}, []);
|
|
77
100
|
|
|
78
|
-
useEffect(() => {
|
|
79
|
-
if (prevUsers !== undefined) {
|
|
80
|
-
let joinedUser = users.filter((person) =>
|
|
81
|
-
prevUsers?.users.every((person2) => !(person2.uid === person.uid)),
|
|
82
|
-
);
|
|
83
|
-
let leftUser = prevUsers?.users.filter((person) =>
|
|
84
|
-
users.every((person2) => !(person2.uid === person.uid)),
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
if (joinedUser.length === 1) {
|
|
88
|
-
const newUserUid = joinedUser[0].uid;
|
|
89
|
-
// identify remote user screen type, if screen share, swap to PIN
|
|
90
|
-
if (userList[newUserUid] && userList[newUserUid].type === 1) {
|
|
91
|
-
dispatch({
|
|
92
|
-
type: 'SwapVideo',
|
|
93
|
-
value: [joinedUser[0]],
|
|
94
|
-
});
|
|
95
|
-
setLayout(Layout.Pinned);
|
|
96
|
-
} else if (newUserUid === 1) {
|
|
97
|
-
// identify local user screen type
|
|
98
|
-
if (newUserUid !== users[0].uid) {
|
|
99
|
-
// if not already maximized
|
|
100
|
-
dispatch({
|
|
101
|
-
type: 'SwapVideo',
|
|
102
|
-
value: [joinedUser[0]],
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
setLayout(Layout.Pinned);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (leftUser.length === 1) {
|
|
110
|
-
const leftUserUid = leftUser[0].uid;
|
|
111
|
-
if (userList[leftUserUid] && userList[leftUserUid].type === 1) {
|
|
112
|
-
setLayout((l: Layout) =>
|
|
113
|
-
l === Layout.Pinned ? Layout.Grid : Layout.Pinned,
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}, [users, userList]);
|
|
119
|
-
|
|
120
101
|
const executeRecordingQuery = (isScreenActive: boolean) => {
|
|
121
102
|
if (!isScreenActive) {
|
|
122
103
|
// If screen share is not going on, start the screen share by executing the graphql query
|
|
123
|
-
|
|
124
|
-
variables: {
|
|
125
|
-
uid: screenShareUid,
|
|
126
|
-
passphrase: phrase,
|
|
127
|
-
},
|
|
128
|
-
})
|
|
129
|
-
.then((res) => {
|
|
130
|
-
if (res.data.setPresenter === 'success') {
|
|
131
|
-
}
|
|
132
|
-
})
|
|
133
|
-
.catch((err) => {
|
|
134
|
-
console.log(err);
|
|
135
|
-
});
|
|
104
|
+
executePresenterQuery();
|
|
136
105
|
} else {
|
|
137
106
|
// If recording is already going on, stop the recording by executing the graphql query.
|
|
138
|
-
|
|
139
|
-
.then((res) => {
|
|
140
|
-
console.log(res.data);
|
|
141
|
-
if (res.data.stopRecordingSession === 'success') {
|
|
142
|
-
}
|
|
143
|
-
})
|
|
144
|
-
.catch((err) => {
|
|
145
|
-
console.log(err);
|
|
146
|
-
});
|
|
107
|
+
executeNormalQuery();
|
|
147
108
|
}
|
|
148
109
|
};
|
|
149
110
|
|
|
150
111
|
const stopUserScreenShare = () => {
|
|
151
|
-
if (
|
|
152
|
-
|
|
153
|
-
|
|
112
|
+
if (!isScreenshareActive) return;
|
|
113
|
+
userScreenshare(false);
|
|
114
|
+
};
|
|
115
|
+
const startUserScreenshare = () => {
|
|
116
|
+
if (isScreenshareActive) return;
|
|
117
|
+
userScreenshare(true);
|
|
154
118
|
};
|
|
155
119
|
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
executeRecordingQuery(isScreenActive);
|
|
120
|
+
const userScreenshare = async (isActive: boolean) => {
|
|
121
|
+
if (isRecordingActive) {
|
|
122
|
+
executeRecordingQuery(isActive);
|
|
160
123
|
}
|
|
161
124
|
try {
|
|
125
|
+
// @ts-ignore
|
|
162
126
|
await rtc.RtcEngine.startScreenshare(
|
|
163
127
|
screenShareToken,
|
|
164
128
|
channel,
|
|
165
129
|
null,
|
|
166
130
|
screenShareUid,
|
|
167
131
|
appId,
|
|
168
|
-
rtc.RtcEngine,
|
|
169
|
-
encryption,
|
|
132
|
+
rtc.RtcEngine as unknown as IAgoraRTC,
|
|
133
|
+
encryption as unknown as any,
|
|
170
134
|
);
|
|
171
|
-
|
|
135
|
+
isActive && setScreenshareActive(true);
|
|
172
136
|
} catch (e) {
|
|
173
137
|
console.error("can't start the screen share", e);
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
})
|
|
185
|
-
.catch((err) => {
|
|
186
|
-
console.log(err);
|
|
187
|
-
});
|
|
138
|
+
executeNormalQuery();
|
|
139
|
+
}
|
|
140
|
+
if (isActive) {
|
|
141
|
+
CustomEvents.send(EventNames.SCREENSHARE_ATTRIBUTE, {
|
|
142
|
+
value: `${true}`,
|
|
143
|
+
level: EventLevel.LEVEL2,
|
|
144
|
+
});
|
|
145
|
+
//if local user started the screenshare then change layout to pinned
|
|
146
|
+
triggerChangeLayout(true, screenShareUid);
|
|
188
147
|
}
|
|
189
148
|
};
|
|
190
149
|
|
|
191
150
|
return (
|
|
192
151
|
<ScreenshareContext.Provider
|
|
193
152
|
value={{
|
|
194
|
-
|
|
153
|
+
isScreenshareActive,
|
|
195
154
|
startUserScreenshare,
|
|
196
155
|
stopUserScreenShare,
|
|
197
156
|
}}>
|
|
@@ -0,0 +1,29 @@
|
|
|
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 {createHook} from 'fpe-implementation';
|
|
14
|
+
|
|
15
|
+
export interface ScreenshareContextInterface {
|
|
16
|
+
isScreenshareActive: boolean;
|
|
17
|
+
startUserScreenshare: () => void;
|
|
18
|
+
stopUserScreenShare: () => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const ScreenshareContext = createContext<ScreenshareContextInterface>({
|
|
22
|
+
isScreenshareActive: false,
|
|
23
|
+
startUserScreenshare: () => {},
|
|
24
|
+
stopUserScreenShare: () => {},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const useScreenshare = createHook(ScreenshareContext);
|
|
28
|
+
|
|
29
|
+
export {useScreenshare};
|
|
@@ -9,32 +9,37 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
+
// @ts-nocheck
|
|
12
13
|
import React from 'react';
|
|
13
14
|
import {Platform} from 'react-native';
|
|
14
|
-
import Toast, {
|
|
15
|
-
import
|
|
15
|
+
import Toast, {BaseToast} from '../../react-native-toast-message';
|
|
16
|
+
import isMobileOrTablet from '../utils/isMobileOrTablet';
|
|
16
17
|
|
|
17
18
|
const toastConfig = {
|
|
18
|
-
|
|
19
|
+
/*
|
|
19
20
|
overwrite 'success' type,
|
|
20
21
|
modifying the existing `BaseToast` component
|
|
21
22
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
success: ({text1, text2, props, ...rest}) => (
|
|
24
|
+
<BaseToast
|
|
25
|
+
{...rest}
|
|
26
|
+
//BaseToast is modified to have zIndex: 100
|
|
27
|
+
style={{
|
|
28
|
+
borderLeftColor: $config.PRIMARY_COLOR,
|
|
29
|
+
backgroundColor: $config.SECONDARY_FONT_COLOR,
|
|
30
|
+
width: !isMobileOrTablet() ? '40%' : '95%',
|
|
31
|
+
}}
|
|
32
|
+
contentContainerStyle={{paddingHorizontal: 15, overflow: 'hidden'}}
|
|
33
|
+
text1Style={{
|
|
34
|
+
fontSize: 15,
|
|
35
|
+
fontWeight: '400',
|
|
36
|
+
color: $config.PRIMARY_FONT_COLOR,
|
|
37
|
+
}}
|
|
38
|
+
text1={text1}
|
|
39
|
+
text2={text2}
|
|
40
|
+
// text2={props.uuid}
|
|
41
|
+
/>
|
|
42
|
+
),
|
|
38
43
|
};
|
|
39
44
|
|
|
40
|
-
export default toastConfig;
|
|
45
|
+
export default toastConfig;
|
|
@@ -0,0 +1,34 @@
|
|
|
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 {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
|
|
13
|
+
import {useLiveStreamDataContext} from '../components/contexts/LiveStreamDataContext';
|
|
14
|
+
import {UidType} from '../../agora-rn-uikit';
|
|
15
|
+
|
|
16
|
+
function useIsAttendee() {
|
|
17
|
+
if ($config.EVENT_MODE) {
|
|
18
|
+
const {audienceUids} = useLiveStreamDataContext();
|
|
19
|
+
const isAttendee = (uid: UidType) => {
|
|
20
|
+
return audienceUids.filter((audienceUid) => audienceUid === uid).length
|
|
21
|
+
? true
|
|
22
|
+
: false;
|
|
23
|
+
};
|
|
24
|
+
return isAttendee;
|
|
25
|
+
} else {
|
|
26
|
+
const {isHost} = useMeetingInfo();
|
|
27
|
+
const isAttendee = (uid: UidType) => {
|
|
28
|
+
return !isHost ? true : false;
|
|
29
|
+
};
|
|
30
|
+
return isAttendee;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export default useIsAttendee;
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
* @format
|
|
14
|
+
*/
|
|
15
|
+
type callBackType = (...args: any[]) => void;
|
|
16
|
+
import {userEventsMapInterface} from '../SDKAppWrapper';
|
|
17
|
+
|
|
18
|
+
interface eventsMapInterface extends userEventsMapInterface {
|
|
19
|
+
addFpe: callBackType;
|
|
20
|
+
joinMeetingWithPhrase: (phrase: string) => void;
|
|
21
|
+
}
|
|
22
|
+
interface SDKEventsInterface {
|
|
23
|
+
eventsMap: eventsMapInterface;
|
|
24
|
+
eventSubs: {[key in keyof eventsMapInterface]: any};
|
|
25
|
+
emit: (eventName: keyof eventsMapInterface, ...args: any) => void;
|
|
26
|
+
on: (eventName: keyof eventsMapInterface, cb: callBackType) => void;
|
|
27
|
+
off: (eventName: keyof eventsMapInterface) => void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const SDKEvents: SDKEventsInterface = {
|
|
31
|
+
eventsMap: {
|
|
32
|
+
addFpe: () => {},
|
|
33
|
+
joinMeetingWithPhrase: (p) => {},
|
|
34
|
+
leave: () => {},
|
|
35
|
+
create: () => {},
|
|
36
|
+
preJoin: () => {},
|
|
37
|
+
join: () => {},
|
|
38
|
+
},
|
|
39
|
+
eventSubs: {
|
|
40
|
+
addFpe: null,
|
|
41
|
+
joinMeetingWithPhrase: null,
|
|
42
|
+
leave: null,
|
|
43
|
+
create: null,
|
|
44
|
+
preJoin: null,
|
|
45
|
+
join: null,
|
|
46
|
+
},
|
|
47
|
+
on: function (eventName, cb) {
|
|
48
|
+
console.log(
|
|
49
|
+
'DEBUG(aditya)-SDKEvents: event registered:',
|
|
50
|
+
eventName,
|
|
51
|
+
);
|
|
52
|
+
this.eventsMap[eventName] = cb;
|
|
53
|
+
if (this.eventSubs[eventName]) {
|
|
54
|
+
cb(...this.eventSubs[eventName]);
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
emit: function (eventName, ...args) {
|
|
58
|
+
console.log('DEBUG(aditya)-SDKEvents: emit called:', eventName, ...args);
|
|
59
|
+
this.eventsMap[eventName](...args);
|
|
60
|
+
this.eventSubs[eventName] = args;
|
|
61
|
+
},
|
|
62
|
+
off: function (eventName) {
|
|
63
|
+
console.log('DEBUG(aditya)-SDKEvents: event deregistered:', eventName);
|
|
64
|
+
this.eventSubs[eventName] = null;
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default SDKEvents;
|
|
@@ -0,0 +1,40 @@
|
|
|
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 from 'react';
|
|
13
|
+
import {Platform} from 'react-native';
|
|
14
|
+
import * as ReactIs from 'react-is';
|
|
15
|
+
|
|
16
|
+
const isValidReactComponent = <T,>(Component?: React.ComponentType<T>) =>
|
|
17
|
+
Component && ReactIs.isValidElementType(Component) ? true : false;
|
|
18
|
+
|
|
19
|
+
const hasBrandLogo: boolean = !!$config.LOGO;
|
|
20
|
+
|
|
21
|
+
const shouldAuthenticate: boolean =
|
|
22
|
+
$config.ENABLE_APPLE_OAUTH ||
|
|
23
|
+
$config.ENABLE_GOOGLE_OAUTH ||
|
|
24
|
+
$config.ENABLE_MICROSOFT_OAUTH ||
|
|
25
|
+
$config.ENABLE_SLACK_OAUTH;
|
|
26
|
+
|
|
27
|
+
const isWeb = Platform.OS === 'web';
|
|
28
|
+
const isAndroid = Platform.OS === 'android';
|
|
29
|
+
const isIOS = Platform.OS === 'ios';
|
|
30
|
+
const isArray = (data: any[]) =>
|
|
31
|
+
data && Array.isArray(data) && data.length ? true : false ? true : false;
|
|
32
|
+
export {
|
|
33
|
+
hasBrandLogo,
|
|
34
|
+
shouldAuthenticate,
|
|
35
|
+
isWeb,
|
|
36
|
+
isIOS,
|
|
37
|
+
isAndroid,
|
|
38
|
+
isArray,
|
|
39
|
+
isValidReactComponent,
|
|
40
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function EventEmitter(this: any) {
|
|
2
|
+
// key: eventName,
|
|
3
|
+
// value: An array of callback functions with the same eventName
|
|
4
|
+
this.events = new Map();
|
|
5
|
+
|
|
6
|
+
return {
|
|
7
|
+
on: (eventName: string, callback: Function) => {
|
|
8
|
+
if (this.events.has(eventName)) {
|
|
9
|
+
throw new Error(`Event with ${eventName} is already registered`);
|
|
10
|
+
}
|
|
11
|
+
//if eventName does not exist, add
|
|
12
|
+
console.log('on', eventName, callback);
|
|
13
|
+
this.events.set(eventName, callback);
|
|
14
|
+
},
|
|
15
|
+
emit: (eventName: string, args: any) => {
|
|
16
|
+
console.log('emit', args, eventName);
|
|
17
|
+
|
|
18
|
+
if (this.events.has(eventName)) {
|
|
19
|
+
//if eventName exists, call the callback in events accordingly
|
|
20
|
+
const registeredCallback = this.events.get(eventName);
|
|
21
|
+
// handle for this context
|
|
22
|
+
registeredCallback(args);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const SDKEvents = new (EventEmitter as any)();
|
|
29
|
+
export {SDKEvents};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const GetMeetingInviteURL = (
|
|
2
|
+
baseUrl: string,
|
|
3
|
+
attendee: string,
|
|
4
|
+
host?: string,
|
|
5
|
+
) => {
|
|
6
|
+
if (host) {
|
|
7
|
+
return {
|
|
8
|
+
host: `${baseUrl}/${host}`,
|
|
9
|
+
attendee: `${baseUrl}/${attendee}`,
|
|
10
|
+
};
|
|
11
|
+
} else {
|
|
12
|
+
return {
|
|
13
|
+
attendee: `${baseUrl}/${attendee}`,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const GetMeetingInviteID = (attendee: string, host?: string) => {
|
|
18
|
+
if (host) {
|
|
19
|
+
return {
|
|
20
|
+
host: `${host}`,
|
|
21
|
+
attendee: `${attendee}`,
|
|
22
|
+
};
|
|
23
|
+
} else {
|
|
24
|
+
return {
|
|
25
|
+
attendee: `${attendee}`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export {GetMeetingInviteURL, GetMeetingInviteID};
|
|
@@ -23,11 +23,11 @@ export function numFormatter(num: number) {
|
|
|
23
23
|
}
|
|
24
24
|
const value = Math.abs(num);
|
|
25
25
|
const sign = Math.sign(num);
|
|
26
|
-
let newValue = value;
|
|
26
|
+
let newValue: string | number = value;
|
|
27
27
|
if (value >= 1000) {
|
|
28
28
|
var suffixes = ['', 'k', 'm', 'b', 't', 't+'];
|
|
29
29
|
var suffixNum = Math.floor(('' + value).length / 3);
|
|
30
|
-
var shortValue
|
|
30
|
+
var shortValue;
|
|
31
31
|
for (var precision = 2; precision >= 1; precision--) {
|
|
32
32
|
shortValue = parseFloat(
|
|
33
33
|
(suffixNum != 0
|
|
@@ -46,3 +46,12 @@ export function numFormatter(num: number) {
|
|
|
46
46
|
newValue = sign === -1 ? `-${newValue}` : `${newValue}`;
|
|
47
47
|
return newValue;
|
|
48
48
|
}
|
|
49
|
+
|
|
50
|
+
export function isEmptyObject(obj: object) {
|
|
51
|
+
if (obj == null) return true;
|
|
52
|
+
if (typeof obj !== 'object') return true;
|
|
53
|
+
for (const key in obj) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 {UidType} from '../../agora-rn-uikit';
|
|
13
|
+
import {ToggleState} from '../../agora-rn-uikit/src/Contexts/PropsContext';
|
|
14
|
+
import useUserList from './useUserList';
|
|
15
|
+
|
|
16
|
+
function useIsAudioEnabled() {
|
|
17
|
+
const {renderList} = useUserList();
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @param uid UidType
|
|
21
|
+
* @returns boolean
|
|
22
|
+
*/
|
|
23
|
+
const audioEnabled = (uid: UidType): boolean =>
|
|
24
|
+
renderList[uid]?.audio === ToggleState.enabled;
|
|
25
|
+
|
|
26
|
+
return audioEnabled;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default useIsAudioEnabled;
|