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,7 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
declare global{
|
|
2
|
+
interface Window {opera?: any}
|
|
3
|
+
}
|
|
4
|
+
const isMobileOrTablet = () => {
|
|
2
5
|
let check = false;
|
|
3
6
|
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator?.userAgent||navigator?.vendor||window?.opera);
|
|
4
7
|
return check;
|
|
5
8
|
}
|
|
6
9
|
|
|
7
|
-
export default
|
|
10
|
+
export default isMobileOrTablet;
|
|
@@ -0,0 +1,30 @@
|
|
|
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 useUserList from './useUserList';
|
|
14
|
+
/**
|
|
15
|
+
* This hook will return the function to check whether the current user is a PSTN user or not
|
|
16
|
+
* @returns function
|
|
17
|
+
*/
|
|
18
|
+
function useIsPSTN() {
|
|
19
|
+
const {renderList} = useUserList();
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* @param uid number
|
|
23
|
+
* @returns boolean
|
|
24
|
+
*/
|
|
25
|
+
const isPSTN = (uid: UidType) =>
|
|
26
|
+
!renderList[uid] && String(uid)[0] === '1' ? true : false;
|
|
27
|
+
return isPSTN;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default useIsPSTN;
|
|
@@ -0,0 +1,31 @@
|
|
|
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 {useScreenContext} from '../components/contexts/ScreenShareContext';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* This hook will return the function to check whether the screen is shared or not
|
|
17
|
+
* @returns function
|
|
18
|
+
*/
|
|
19
|
+
function useIsScreenShare() {
|
|
20
|
+
const {screenShareData} = useScreenContext();
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
* @param uid number | string
|
|
24
|
+
* @returns boolean
|
|
25
|
+
*/
|
|
26
|
+
const isScreenShare = (uid: UidType): boolean =>
|
|
27
|
+
screenShareData[uid]?.isActive ? true : false;
|
|
28
|
+
return isScreenShare;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default useIsScreenShare;
|
|
@@ -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 useIsVideoEnabled() {
|
|
17
|
+
const {renderList} = useUserList();
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
* @param uid UidType
|
|
22
|
+
* @returns boolean
|
|
23
|
+
*/
|
|
24
|
+
const videoEnabled = (uid: UidType): boolean =>
|
|
25
|
+
renderList[uid]?.video === ToggleState.enabled;
|
|
26
|
+
|
|
27
|
+
return videoEnabled;
|
|
28
|
+
}
|
|
29
|
+
export default useIsVideoEnabled;
|
|
@@ -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 {createHook} from 'fpe-implementation';
|
|
15
|
+
|
|
16
|
+
export enum ButtonTemplateName {
|
|
17
|
+
topBar,
|
|
18
|
+
bottomBar,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ButtonTemplateInferface {
|
|
22
|
+
buttonTemplateName?: ButtonTemplateName;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const ButtonTemplateContext = React.createContext<ButtonTemplateInferface>({
|
|
26
|
+
buttonTemplateName: undefined,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
interface ButtonTemplateProviderProps {
|
|
30
|
+
value: ButtonTemplateInferface;
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
}
|
|
33
|
+
const ButtonTemplateProvider = (props: ButtonTemplateProviderProps) => {
|
|
34
|
+
return (
|
|
35
|
+
<ButtonTemplateContext.Provider value={{...props.value}}>
|
|
36
|
+
{props.children}
|
|
37
|
+
</ButtonTemplateContext.Provider>
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const useButtonTemplate = createHook(ButtonTemplateContext);
|
|
42
|
+
|
|
43
|
+
export {ButtonTemplateProvider, useButtonTemplate};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import {gql, useMutation} from '@apollo/client';
|
|
2
|
+
import {MeetingInfoContextInterface} from '../components/meeting-info/useMeetingInfo';
|
|
3
|
+
import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
|
|
4
|
+
|
|
5
|
+
const CREATE_CHANNEL = gql`
|
|
6
|
+
mutation CreateChannel(
|
|
7
|
+
$title: String!
|
|
8
|
+
$backendURL: String!
|
|
9
|
+
$enablePSTN: Boolean
|
|
10
|
+
) {
|
|
11
|
+
createChannel(
|
|
12
|
+
title: $title
|
|
13
|
+
backendURL: $backendURL
|
|
14
|
+
enablePSTN: $enablePSTN
|
|
15
|
+
) {
|
|
16
|
+
passphrase {
|
|
17
|
+
host
|
|
18
|
+
view
|
|
19
|
+
}
|
|
20
|
+
channel
|
|
21
|
+
title
|
|
22
|
+
pstn {
|
|
23
|
+
number
|
|
24
|
+
dtmf
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
29
|
+
export default function useCreateMeeting() {
|
|
30
|
+
const [createChannel, {error}] = useMutation(CREATE_CHANNEL);
|
|
31
|
+
const {setMeetingInfo} = useSetMeetingInfo();
|
|
32
|
+
return async (
|
|
33
|
+
roomTitle: string,
|
|
34
|
+
enablePSTN?: boolean,
|
|
35
|
+
isSeparateHostLink?: boolean,
|
|
36
|
+
) => {
|
|
37
|
+
const res = await createChannel({
|
|
38
|
+
variables: {
|
|
39
|
+
title: roomTitle,
|
|
40
|
+
backendURL: $config.BACKEND_ENDPOINT,
|
|
41
|
+
enablePSTN: enablePSTN,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
if (error) {
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
if (res && res?.data && res?.data?.createChannel) {
|
|
48
|
+
let meetingInfoPassPhrase: MeetingInfoContextInterface['meetingPassphrase'] =
|
|
49
|
+
{
|
|
50
|
+
attendee: '',
|
|
51
|
+
};
|
|
52
|
+
if (res?.data?.createChannel?.passphrase?.view) {
|
|
53
|
+
meetingInfoPassPhrase.attendee = res.data.createChannel.passphrase.view;
|
|
54
|
+
}
|
|
55
|
+
if (res?.data?.createChannel?.passphrase?.host) {
|
|
56
|
+
meetingInfoPassPhrase.host = res.data.createChannel.passphrase.host;
|
|
57
|
+
}
|
|
58
|
+
if (enablePSTN === true && res?.data?.createChannel?.pstn) {
|
|
59
|
+
meetingInfoPassPhrase.pstn = {
|
|
60
|
+
number: res.data.createChannel.pstn.number,
|
|
61
|
+
pin: res.data.createChannel.pstn.dtmf,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
setMeetingInfo({
|
|
65
|
+
isHost: true,
|
|
66
|
+
isSeparateHostLink: isSeparateHostLink ? true : false,
|
|
67
|
+
meetingTitle: roomTitle,
|
|
68
|
+
meetingPassphrase: meetingInfoPassPhrase,
|
|
69
|
+
});
|
|
70
|
+
} else {
|
|
71
|
+
throw new Error(`An error occurred in parsing the channel data.`);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
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 {useContext} from 'react';
|
|
13
|
+
import LiveStreamContext from '../components/livestream';
|
|
14
|
+
/**
|
|
15
|
+
* This hook will fetch the user list
|
|
16
|
+
* @returns userList
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
function useGetLiveStreamingRequests() {
|
|
20
|
+
const {currLiveStreamRequest} = useContext(LiveStreamContext);
|
|
21
|
+
return currLiveStreamRequest;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default useGetLiveStreamingRequests;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import {useContext} from 'react';
|
|
2
|
+
import {gql} from '@apollo/client';
|
|
3
|
+
import {MeetingInfoContextInterface} from '../components/meeting-info/useMeetingInfo';
|
|
4
|
+
import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
|
|
5
|
+
import {GraphQLContext} from '../components/GraphQLProvider';
|
|
6
|
+
|
|
7
|
+
const SHARE = gql`
|
|
8
|
+
query share($passphrase: String!) {
|
|
9
|
+
share(passphrase: $passphrase) {
|
|
10
|
+
passphrase {
|
|
11
|
+
host
|
|
12
|
+
view
|
|
13
|
+
}
|
|
14
|
+
channel
|
|
15
|
+
title
|
|
16
|
+
pstn {
|
|
17
|
+
number
|
|
18
|
+
dtmf
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
|
|
24
|
+
export default function useGetMeetingPhrase() {
|
|
25
|
+
const {setMeetingInfo} = useSetMeetingInfo();
|
|
26
|
+
const {client} = useContext(GraphQLContext);
|
|
27
|
+
return async (phrase: string) => {
|
|
28
|
+
const response = await client.query({
|
|
29
|
+
query: SHARE,
|
|
30
|
+
variables: {
|
|
31
|
+
passphrase: phrase,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
if (response.error) {
|
|
35
|
+
throw response.error;
|
|
36
|
+
} else {
|
|
37
|
+
try {
|
|
38
|
+
if (response && response.data) {
|
|
39
|
+
let data = response.data;
|
|
40
|
+
let meetingPassphrase: MeetingInfoContextInterface['meetingPassphrase'] =
|
|
41
|
+
{
|
|
42
|
+
attendee: '',
|
|
43
|
+
};
|
|
44
|
+
if (data?.share?.passphrase?.view) {
|
|
45
|
+
meetingPassphrase.attendee = data.share.passphrase.view;
|
|
46
|
+
}
|
|
47
|
+
if (data?.share?.passphrase?.host) {
|
|
48
|
+
meetingPassphrase.host = data.share.passphrase.host;
|
|
49
|
+
}
|
|
50
|
+
if (data?.share?.pstn) {
|
|
51
|
+
meetingPassphrase.pstn = {
|
|
52
|
+
number: data.share.pstn.number,
|
|
53
|
+
pin: data.share.pstn.dtmf,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
setMeetingInfo((prevState) => {
|
|
57
|
+
return {
|
|
58
|
+
...prevState,
|
|
59
|
+
meetingPassphrase,
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
throw new Error('An error occurred in parsing the channel data.');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
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 {useContext} from 'react';
|
|
13
|
+
import ChatContext from '../components/ChatContext';
|
|
14
|
+
|
|
15
|
+
function useGetName() {
|
|
16
|
+
const {displayName} = useContext(ChatContext);
|
|
17
|
+
return displayName;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default useGetName;
|
package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts}
RENAMED
|
@@ -9,13 +9,16 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import {createContext} from 'react';
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
import {useChatMessages} from '../components/chat-messages/useChatMessages';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* This hook will fetch the group messages
|
|
17
|
+
* @returns userList
|
|
18
|
+
*/
|
|
19
|
+
function useGroupMessages() {
|
|
20
|
+
const {messageStore} = useChatMessages();
|
|
21
|
+
return messageStore;
|
|
18
22
|
}
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
export default ScreenshareContext;
|
|
24
|
+
export default useGroupMessages;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import {useContext} from 'react';
|
|
2
|
+
import {gql} from '@apollo/client';
|
|
3
|
+
import StorageContext from '../components/StorageContext';
|
|
4
|
+
import {MeetingInfoContextInterface} from '../components/meeting-info/useMeetingInfo';
|
|
5
|
+
import {useSetMeetingInfo} from '../components/meeting-info/useSetMeetingInfo';
|
|
6
|
+
import {GraphQLContext} from '../components/GraphQLProvider';
|
|
7
|
+
|
|
8
|
+
const JOIN_CHANNEL_PHRASE_AND_GET_USER = gql`
|
|
9
|
+
query JoinChannel($passphrase: String!) {
|
|
10
|
+
joinChannel(passphrase: $passphrase) {
|
|
11
|
+
channel
|
|
12
|
+
title
|
|
13
|
+
isHost
|
|
14
|
+
secret
|
|
15
|
+
mainUser {
|
|
16
|
+
rtc
|
|
17
|
+
rtm
|
|
18
|
+
uid
|
|
19
|
+
}
|
|
20
|
+
screenShare {
|
|
21
|
+
rtc
|
|
22
|
+
rtm
|
|
23
|
+
uid
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
getUser {
|
|
27
|
+
name
|
|
28
|
+
email
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
const JOIN_CHANNEL_PHRASE = gql`
|
|
34
|
+
query JoinChannel($passphrase: String!) {
|
|
35
|
+
joinChannel(passphrase: $passphrase) {
|
|
36
|
+
channel
|
|
37
|
+
title
|
|
38
|
+
isHost
|
|
39
|
+
secret
|
|
40
|
+
mainUser {
|
|
41
|
+
rtc
|
|
42
|
+
rtm
|
|
43
|
+
uid
|
|
44
|
+
}
|
|
45
|
+
screenShare {
|
|
46
|
+
rtc
|
|
47
|
+
rtm
|
|
48
|
+
uid
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
|
|
54
|
+
export default function useJoinMeeting() {
|
|
55
|
+
const {store} = useContext(StorageContext);
|
|
56
|
+
const {setMeetingInfo} = useSetMeetingInfo();
|
|
57
|
+
const {client} = useContext(GraphQLContext);
|
|
58
|
+
return async (phrase: string) => {
|
|
59
|
+
const response = await client.query({
|
|
60
|
+
query:
|
|
61
|
+
store.token === null
|
|
62
|
+
? JOIN_CHANNEL_PHRASE
|
|
63
|
+
: JOIN_CHANNEL_PHRASE_AND_GET_USER,
|
|
64
|
+
variables: {
|
|
65
|
+
passphrase: phrase,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
if (response.error) {
|
|
69
|
+
throw response.error;
|
|
70
|
+
} else {
|
|
71
|
+
try {
|
|
72
|
+
if (response && response.data) {
|
|
73
|
+
let data = response.data;
|
|
74
|
+
let meetingInfo: Partial<MeetingInfoContextInterface> = {
|
|
75
|
+
isJoinDataFetched: true,
|
|
76
|
+
};
|
|
77
|
+
if (data?.joinChannel?.channel) {
|
|
78
|
+
meetingInfo.channel = data.joinChannel.channel;
|
|
79
|
+
}
|
|
80
|
+
if (data?.joinChannel?.mainUser?.uid) {
|
|
81
|
+
meetingInfo.uid = data.joinChannel.mainUser.uid;
|
|
82
|
+
}
|
|
83
|
+
if (data?.joinChannel?.mainUser?.rtc) {
|
|
84
|
+
meetingInfo.token = data.joinChannel.mainUser.rtc;
|
|
85
|
+
}
|
|
86
|
+
if (data?.joinChannel?.mainUser?.rtm) {
|
|
87
|
+
meetingInfo.rtm = data.joinChannel.mainUser.rtm;
|
|
88
|
+
}
|
|
89
|
+
if (data?.joinChannel?.secret) {
|
|
90
|
+
meetingInfo.secret = data.joinChannel.secret;
|
|
91
|
+
}
|
|
92
|
+
if (data?.joinChannel?.screenShare?.uid) {
|
|
93
|
+
meetingInfo.screenShareUid = data.joinChannel.screenShare.uid;
|
|
94
|
+
}
|
|
95
|
+
if (data?.joinChannel?.screenShare?.rtc) {
|
|
96
|
+
meetingInfo.screenShareToken = data.joinChannel.screenShare.rtc;
|
|
97
|
+
}
|
|
98
|
+
if (data?.joinChannel?.isHost) {
|
|
99
|
+
meetingInfo.isHost = data.joinChannel.isHost;
|
|
100
|
+
}
|
|
101
|
+
if (data?.joinChannel?.title) {
|
|
102
|
+
meetingInfo.meetingTitle = data.joinChannel.title;
|
|
103
|
+
}
|
|
104
|
+
//getUser is not available from backend
|
|
105
|
+
// if (data?.getUser?.name) {
|
|
106
|
+
// meetingInfo.username = data.getUser.name;
|
|
107
|
+
// }
|
|
108
|
+
setMeetingInfo((prevState) => {
|
|
109
|
+
return {
|
|
110
|
+
...prevState,
|
|
111
|
+
...meetingInfo,
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
} catch (error) {
|
|
116
|
+
throw new Error('An error occurred in parsing the channel data.');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
@@ -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
|
+
|
|
13
|
+
import React, {SetStateAction} from 'react';
|
|
14
|
+
import {createHook} from 'fpe-implementation';
|
|
15
|
+
|
|
16
|
+
export interface LayoutContextInterface {
|
|
17
|
+
activeLayoutName: string;
|
|
18
|
+
setActiveLayoutName: React.Dispatch<SetStateAction<string>>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const LayoutContext = React.createContext<LayoutContextInterface>({
|
|
22
|
+
activeLayoutName: '',
|
|
23
|
+
setActiveLayoutName: () => {},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
interface LayoutProviderProps {
|
|
27
|
+
value: LayoutContextInterface;
|
|
28
|
+
children: React.ReactNode;
|
|
29
|
+
}
|
|
30
|
+
const LayoutProvider = (props: LayoutProviderProps) => {
|
|
31
|
+
return (
|
|
32
|
+
<LayoutContext.Provider value={{...props.value}}>
|
|
33
|
+
{props.children}
|
|
34
|
+
</LayoutContext.Provider>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const useLayout = createHook(LayoutContext);
|
|
39
|
+
|
|
40
|
+
export {LayoutProvider, useLayout};
|
|
@@ -0,0 +1,26 @@
|
|
|
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 {useLiveStreamDataContext} from '../components/contexts/LiveStreamDataContext';
|
|
13
|
+
/**
|
|
14
|
+
* This hook will fetch the user list
|
|
15
|
+
* @returns userList
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
function useLiveStreamingUids() {
|
|
19
|
+
const {audienceUids, hostUids} = useLiveStreamDataContext();
|
|
20
|
+
return {
|
|
21
|
+
hostUids: hostUids,
|
|
22
|
+
audienceUids: audienceUids,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default useLiveStreamingUids;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {gql, useMutation} from '@apollo/client';
|
|
2
|
+
import {UidType} from '../../agora-rn-uikit';
|
|
3
|
+
import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
|
|
4
|
+
import useIsPSTN from './isPSTNUser';
|
|
5
|
+
const MUTE_PSTN = gql`
|
|
6
|
+
mutation mutePSTN($uid: Int!, $passphrase: String!, $mute: Boolean!) {
|
|
7
|
+
mutePSTN(uid: $uid, passphrase: $passphrase, mute: $mute) {
|
|
8
|
+
uid
|
|
9
|
+
mute
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
13
|
+
|
|
14
|
+
const useMutePSTN = () => {
|
|
15
|
+
const [mutePSTN, {data, loading, error}] = useMutation(MUTE_PSTN);
|
|
16
|
+
const {isHost, meetingPassphrase} = useMeetingInfo();
|
|
17
|
+
const isPSTN = useIsPSTN();
|
|
18
|
+
return async (uid: UidType) => {
|
|
19
|
+
if (isHost) {
|
|
20
|
+
if (isPSTN(uid)) {
|
|
21
|
+
await mutePSTN({
|
|
22
|
+
variables: {
|
|
23
|
+
uid: uid,
|
|
24
|
+
passphrase: meetingPassphrase?.host,
|
|
25
|
+
//todo: hari need to test mute flag for PSTN
|
|
26
|
+
mute: 1,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
} else {
|
|
30
|
+
console.error('UID does not belong to the PSTN user.');
|
|
31
|
+
}
|
|
32
|
+
if (!loading && error) {
|
|
33
|
+
throw error;
|
|
34
|
+
} else {
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
console.error('A host can only mute audience audio or video.');
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default useMutePSTN;
|