agora-appbuilder-core 3.0.9 → 4.0.0-api.1
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 +6 -0
- package/package.json +2 -2
- package/template/_package-lock.json +5871 -4728
- package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
- package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
- package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +10 -6
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +28 -8
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +7 -15
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
- package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
- package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
- package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +4 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +4 -2
- package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -6
- package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +4 -4
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +4 -4
- package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +23 -0
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +7 -7
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -7
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +10 -10
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -5
- package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
- package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +72 -5
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +5 -4
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +76 -49
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +17 -7
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +17 -11
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -2
- package/template/agora-rn-uikit/src/index.ts +17 -9
- package/template/android/app/build.gradle +1 -0
- package/template/android/app/src/main/AndroidManifest.xml +22 -15
- package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
- package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
- package/template/android/app/src/main/res/values/colors.xml +7 -0
- package/template/android/build.gradle +3 -3
- package/template/babel.config.js +1 -0
- package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
- package/template/customization-api/action-library.ts +10 -14
- package/template/customization-api/app-state.ts +4 -6
- package/template/customization-api/customEvents.ts +2 -2
- package/template/customization-api/customize.ts +1 -1
- package/template/customization-api/sub-components.ts +4 -12
- package/template/customization-api/typeDefinition.ts +15 -38
- package/template/customization-implementation/createHook.ts +24 -6
- package/template/customization-implementation/index.ts +1 -1
- package/template/customization-implementation/useCustomization.tsx +5 -7
- package/template/electron/index.html +27 -27
- package/template/electron/renderer/index.js +1 -0
- package/template/global.d.ts +26 -4
- package/template/index.rsdk.tsx +1 -0
- package/template/index.web.js +2 -1
- package/template/index.wsdk.tsx +9 -2
- package/template/ios/HelloWorld/Info.plist +14 -1
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
- package/template/metro.config.js +1 -1
- package/template/package.json +18 -7
- package/template/react-native-toast-message/index.d.ts +43 -43
- package/template/react-native-toast-message/src/colors/index.js +3 -2
- package/template/react-native-toast-message/src/components/base/index.js +46 -59
- package/template/react-native-toast-message/src/components/base/styles.js +16 -32
- package/template/react-native-toast-message/src/components/checkbox.js +178 -0
- package/template/react-native-toast-message/src/components/error.js +3 -2
- package/template/react-native-toast-message/src/components/info.js +3 -2
- package/template/react-native-toast-message/src/components/success.js +3 -2
- package/template/react-native-toast-message/src/index.js +122 -31
- package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
- package/template/react-native-toast-message/src/styles.js +3 -4
- package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
- package/template/react-native.config.js +7 -0
- package/template/src/App.tsx +19 -14
- package/template/src/AppWrapper.tsx +74 -29
- package/template/src/SDKAppWrapper.tsx +60 -64
- package/template/src/app-state/useLocalUserInfo.ts +3 -3
- package/template/src/assets/font-styles.css +329 -0
- package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
- package/template/src/assets/fonts/icomoon.ttf +0 -0
- package/template/src/assets/permission.png +0 -0
- package/template/src/assets/selection.json +1 -0
- package/template/src/atoms/ActionMenu.tsx +236 -0
- package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
- package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
- package/template/src/atoms/AnimatedRings.native.tsx +68 -0
- package/template/src/atoms/AnimatedRings.tsx +70 -0
- package/template/src/atoms/Card.tsx +61 -0
- package/template/src/atoms/CircularProgress.native.tsx +121 -0
- package/template/src/atoms/CircularProgress.tsx +102 -0
- package/template/src/atoms/CustomIcon.tsx +88 -0
- package/template/src/atoms/CustomSwitch.tsx +287 -0
- package/template/src/atoms/Dropdown.tsx +306 -0
- package/template/src/atoms/HorizontalRule.tsx +3 -1
- package/template/src/atoms/IconButton.tsx +162 -0
- package/template/src/atoms/ImageIcon.tsx +98 -0
- package/template/src/atoms/InfoBubble.tsx +291 -0
- package/template/src/atoms/Input.tsx +87 -0
- package/template/src/atoms/InviteInfo.tsx +166 -0
- package/template/src/atoms/LinkButton.tsx +28 -0
- package/template/src/atoms/OutlineButton.tsx +61 -0
- package/template/src/atoms/ParticipantsCount.tsx +74 -0
- package/template/src/atoms/Popup.tsx +147 -0
- package/template/src/atoms/PrimaryButton.tsx +51 -26
- package/template/src/atoms/RecordingInfo.tsx +52 -0
- package/template/src/atoms/SecondaryButton.tsx +8 -5
- package/template/src/atoms/Spacer.tsx +22 -0
- package/template/src/atoms/TertiaryButton.tsx +78 -0
- package/template/src/atoms/TextInput.tsx +12 -14
- package/template/src/atoms/Toggle.tsx +47 -0
- package/template/src/atoms/Toolbar.tsx +68 -0
- package/template/src/atoms/ToolbarItem.tsx +63 -0
- package/template/src/atoms/Tooltip.native.tsx +65 -0
- package/template/src/atoms/Tooltip.tsx +94 -0
- package/template/src/atoms/UserAvatar.tsx +60 -0
- package/template/src/components/Chat.tsx +164 -278
- package/template/src/components/ChatContext.ts +8 -1
- package/template/src/components/ColorConfigure.tsx +1 -1
- package/template/src/components/ColorContext.ts +1 -1
- package/template/src/components/CommonStyles.ts +44 -0
- package/template/src/components/Controls.tsx +331 -73
- package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +8 -6
- package/template/src/components/DeviceConfigure.tsx +511 -106
- package/template/src/components/DeviceContext.tsx +8 -4
- package/template/src/components/EventsConfigure.tsx +192 -10
- package/template/src/components/GraphQLProvider.tsx +1 -1
- package/template/src/components/GridVideo.tsx +60 -45
- package/template/src/components/HostControlView.tsx +114 -35
- package/template/src/components/Navbar.tsx +219 -437
- package/template/src/components/Navigation.tsx +15 -1
- package/template/src/components/NetworkQualityContext.tsx +22 -22
- package/template/src/components/ParticipantsView.tsx +178 -156
- package/template/src/components/PinnedVideo.tsx +206 -121
- package/template/src/components/Precall.native.tsx +358 -119
- package/template/src/components/Precall.tsx +272 -138
- package/template/src/components/RTMConfigure.tsx +66 -19
- package/template/src/components/Router.electron.ts +1 -0
- package/template/src/components/Router.native.ts +1 -0
- package/template/src/components/Router.sdk.ts +1 -0
- package/template/src/components/Router.ts +1 -0
- package/template/src/components/SdkApiContext.tsx +161 -0
- package/template/src/components/Settings.tsx +26 -95
- package/template/src/components/SettingsView.tsx +251 -56
- package/template/src/components/Share.tsx +305 -276
- package/template/src/components/StorageContext.tsx +30 -3
- package/template/src/components/ToastComponent.tsx +8 -0
- package/template/src/components/chat-messages/useChatMessages.tsx +100 -52
- package/template/src/components/chat-ui/useChatUIControls.tsx +76 -0
- package/template/src/components/common/Error.tsx +20 -6
- package/template/src/components/common/Logo.tsx +16 -15
- package/template/src/components/contexts/LiveStreamDataContext.tsx +16 -11
- package/template/src/components/contexts/VideoMeetingDataContext.tsx +41 -11
- package/template/src/components/contexts/WhiteboardContext.tsx +3 -3
- package/template/src/components/livestream/LiveStreamContext.tsx +284 -50
- package/template/src/components/livestream/Types.ts +39 -14
- package/template/src/components/livestream/index.ts +1 -0
- package/template/src/components/livestream/views/LiveStreamControls.tsx +9 -4
- package/template/src/components/participants/AllAudienceParticipants.tsx +102 -31
- package/template/src/components/participants/AllHostParticipants.tsx +106 -35
- package/template/src/components/participants/Participant.tsx +300 -0
- package/template/src/components/participants/ParticipantName.tsx +13 -7
- package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
- package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
- package/template/src/components/participants/UserActionMenuOptions.tsx +396 -0
- package/template/src/components/popups/InvitePopup.tsx +115 -0
- package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
- package/template/src/components/precall/LocalMute.tsx +84 -14
- package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
- package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
- package/template/src/components/precall/PermissionHelper.tsx +126 -0
- package/template/src/components/precall/PreCallSettings.tsx +52 -0
- package/template/src/components/precall/VideoPreview.native.tsx +51 -6
- package/template/src/components/precall/VideoPreview.tsx +164 -8
- package/template/src/components/precall/joinCallBtn.native.tsx +2 -2
- package/template/src/components/precall/joinCallBtn.tsx +17 -4
- package/template/src/components/precall/meetingTitle.tsx +17 -14
- package/template/src/components/precall/selectDevice.tsx +1 -21
- package/template/src/components/precall/textInput.tsx +34 -6
- package/template/src/components/precall/usePreCall.tsx +39 -1
- package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +34 -10
- package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
- package/template/src/components/styles.ts +42 -21
- package/template/src/components/useShareLink.tsx +19 -21
- package/template/src/components/useToast.tsx +41 -0
- package/template/src/components/useUserPreference.tsx +9 -6
- package/template/src/components/useVideoCall.tsx +84 -0
- package/template/src/language/default-labels/createScreenLabels.ts +3 -3
- package/template/src/language/default-labels/joinScreenLabels.ts +2 -2
- package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +5 -5
- package/template/src/language/default-labels/videoCallScreenLabels.ts +5 -5
- package/template/src/pages/Authenticate.tsx +5 -15
- package/template/src/pages/Create.tsx +304 -191
- package/template/src/pages/Endcall.tsx +148 -0
- package/template/src/pages/Join.tsx +96 -70
- package/template/src/pages/VideoCall.tsx +179 -69
- package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
- package/template/src/pages/video-call/ActionSheet.tsx +226 -0
- package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
- package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
- package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
- package/template/src/pages/video-call/DefaultLayouts.ts +6 -6
- package/template/src/pages/video-call/NameWithMicIcon.tsx +93 -49
- package/template/src/pages/video-call/RenderComponent.tsx +6 -30
- package/template/src/pages/video-call/SidePanelHeader.tsx +186 -0
- package/template/src/pages/video-call/VideoCallMobileView.tsx +138 -0
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
- package/template/src/pages/video-call/VideoCallScreen.tsx +109 -66
- package/template/src/pages/video-call/VideoComponent.tsx +20 -4
- package/template/src/pages/video-call/VideoRenderer.tsx +227 -61
- package/template/src/pages/video-call/index.ts +35 -7
- package/template/src/rtm/RTMEngine.ts +8 -0
- package/template/src/rtm-events/constants.ts +3 -1
- package/template/src/rtm-events-api/Events.ts +5 -4
- package/template/src/rtm-events-api/LocalEvents.ts +6 -0
- package/template/src/rtm-events-api/types.ts +5 -5
- package/template/src/subComponents/ChatBubble.tsx +125 -84
- package/template/src/subComponents/ChatContainer.tsx +280 -93
- package/template/src/subComponents/ChatInput.ios.tsx +175 -0
- package/template/src/subComponents/ChatInput.tsx +72 -115
- package/template/src/subComponents/Checkbox.native.tsx +16 -5
- package/template/src/subComponents/Checkbox.tsx +2 -2
- package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
- package/template/src/subComponents/EndcallPopup.tsx +107 -0
- package/template/src/subComponents/FallbackLogo.tsx +122 -40
- package/template/src/subComponents/LanguageSelector.tsx +1 -1
- package/template/src/subComponents/LayoutIconButton.tsx +201 -0
- package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
- package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
- package/template/src/subComponents/LocalAudioMute.tsx +119 -27
- package/template/src/subComponents/LocalEndCall.tsx +73 -35
- package/template/src/subComponents/LocalSwitchCamera.tsx +19 -32
- package/template/src/subComponents/LocalVideoMute.tsx +117 -27
- package/template/src/subComponents/Logo.tsx +3 -4
- package/template/src/subComponents/LogoutButton.tsx +1 -1
- package/template/src/subComponents/NetworkQualityPill.tsx +66 -68
- package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
- package/template/src/subComponents/Recording.tsx +28 -29
- package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
- package/template/src/subComponents/RemoteEndCall.tsx +8 -5
- package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
- package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
- package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
- package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
- package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
- package/template/src/subComponents/SelectDevice.tsx +404 -61
- package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
- package/template/src/subComponents/SelectOAuth.tsx +9 -8
- package/template/src/subComponents/SidePanelButtons.ts +0 -3
- package/template/src/subComponents/SidePanelHeader.tsx +112 -0
- package/template/src/subComponents/ToastConfig.tsx +150 -10
- package/template/src/subComponents/chat/ChatParticipants.tsx +188 -79
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +97 -34
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +8 -8
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
- package/template/src/subComponents/recording/useRecording.tsx +81 -29
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +23 -12
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +44 -19
- package/template/src/theme/index.ts +46 -0
- package/template/src/utils/PlatformWrapper.tsx +21 -0
- package/template/src/utils/SdkEvents.ts +23 -14
- package/template/src/utils/SdkMethodEvents.ts +81 -0
- package/template/src/utils/common.tsx +155 -1
- package/template/src/utils/hexadecimalTransparency.ts +108 -0
- package/template/src/utils/index.tsx +19 -0
- package/template/src/utils/isMobileOrTablet.ts +7 -2
- package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
- package/template/src/utils/useActiveSpeaker.ts +42 -0
- package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
- package/template/src/utils/{useButtonTemplate.tsx → useFocus.tsx} +19 -16
- package/template/src/utils/useGetMeetingPhrase.ts +10 -10
- package/template/src/utils/useIsAudioEnabled.ts +3 -3
- package/template/src/utils/useIsHandRaised.ts +13 -0
- package/template/src/utils/useIsPSTN.ts +3 -3
- package/template/src/utils/useIsVideoEnabled.ts +3 -3
- package/template/src/utils/{useJoinMeeting.ts → useJoinRoom.ts} +27 -21
- package/template/src/utils/useMutePSTN.ts +2 -2
- package/template/src/utils/useMuteToggleLocal.ts +58 -5
- package/template/src/utils/useRemoteEndCall.ts +4 -4
- package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
- package/template/src/utils/useRemoteMute.ts +7 -7
- package/template/src/utils/useRemoteRequest.ts +84 -0
- package/template/src/utils/useSwitchCamera.native.tsx +25 -0
- package/template/src/utils/useSwitchCamera.tsx +19 -0
- package/template/src/utils/useToolbar.tsx +59 -0
- package/template/web/index.html +5 -0
- package/template/webpack.commons.js +13 -8
- package/template/webpack.rsdk.config.js +1 -2
- package/template/webpack.web.config.js +1 -0
- package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
- package/template/src/assets/icons.ts +0 -102
- package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
- package/template/src/components/participants/MeParticipant.tsx +0 -38
- package/template/src/components/participants/RemoteParticipants.tsx +0 -71
- package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
|
@@ -1,29 +1,36 @@
|
|
|
1
1
|
import React, {useContext} from 'react';
|
|
2
2
|
import {View} from 'react-native';
|
|
3
|
-
import {
|
|
3
|
+
import {PropsContext, UidType} from '../../../../agora-rn-uikit';
|
|
4
4
|
import LiveStreamContext from '../../../components/livestream';
|
|
5
|
-
import
|
|
5
|
+
import TertiaryButton from '../../../atoms/TertiaryButton';
|
|
6
|
+
import Toast from '../../../../react-native-toast-message';
|
|
6
7
|
|
|
7
8
|
interface RemoteLiveStreamControlProps {
|
|
8
9
|
uid: UidType;
|
|
10
|
+
toastId: number;
|
|
9
11
|
}
|
|
10
12
|
|
|
11
13
|
const RemoteLiveStreamRequestReject = (props: RemoteLiveStreamControlProps) => {
|
|
12
|
-
const {uid} = props;
|
|
14
|
+
const {uid, toastId} = props;
|
|
13
15
|
const {hostRejectsRequestOfUID} = useContext(LiveStreamContext);
|
|
14
|
-
const {styleProps} = useContext(PropsContext);
|
|
15
|
-
const {remoteBtnStyles} = styleProps || {};
|
|
16
|
-
const {liveStreamHostControlBtns} = remoteBtnStyles || {};
|
|
17
16
|
|
|
18
17
|
return (
|
|
19
|
-
<View style={{
|
|
20
|
-
<
|
|
18
|
+
<View style={{flex: 1}}>
|
|
19
|
+
<TertiaryButton
|
|
20
|
+
containerStyle={{
|
|
21
|
+
paddingHorizontal: 8,
|
|
22
|
+
paddingVertical: 8,
|
|
23
|
+
height: 38,
|
|
24
|
+
}}
|
|
21
25
|
disabled={!uid}
|
|
22
|
-
icon={icons['crossCircleIcon']}
|
|
23
|
-
style={{...(liveStreamHostControlBtns as object)}}
|
|
24
26
|
onPress={() => {
|
|
27
|
+
//Hiding the toast if its get rejected in the participant panel
|
|
28
|
+
if (Toast.getToastId() === toastId) {
|
|
29
|
+
Toast.hide();
|
|
30
|
+
}
|
|
25
31
|
hostRejectsRequestOfUID(uid);
|
|
26
32
|
}}
|
|
33
|
+
text={'DENY'}
|
|
27
34
|
/>
|
|
28
35
|
</View>
|
|
29
36
|
);
|
|
@@ -15,6 +15,7 @@ import React, {
|
|
|
15
15
|
useContext,
|
|
16
16
|
useEffect,
|
|
17
17
|
useRef,
|
|
18
|
+
useState,
|
|
18
19
|
} from 'react';
|
|
19
20
|
import {gql, useMutation} from '@apollo/client';
|
|
20
21
|
import {useParams} from '../../components/Router';
|
|
@@ -23,21 +24,25 @@ import Toast from '../../../react-native-toast-message';
|
|
|
23
24
|
import {createHook} from 'customization-implementation';
|
|
24
25
|
import {useString} from '../../utils/useString';
|
|
25
26
|
import ChatContext from '../../components/ChatContext';
|
|
26
|
-
import events, {
|
|
27
|
+
import events, {PersistanceLevel} from '../../rtm-events-api';
|
|
27
28
|
import {EventActions, EventNames} from '../../rtm-events';
|
|
28
29
|
import useRecordingLayoutQuery from './useRecordingLayoutQuery';
|
|
29
30
|
import {useScreenContext} from '../../components/contexts/ScreenShareContext';
|
|
31
|
+
import {useContent} from 'customization-api';
|
|
32
|
+
import {trimText} from '../../utils/common';
|
|
30
33
|
|
|
31
34
|
export interface RecordingContextInterface {
|
|
32
35
|
startRecording: () => void;
|
|
33
36
|
stopRecording: () => void;
|
|
34
37
|
isRecordingActive: boolean;
|
|
38
|
+
inProgress: boolean;
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
const RecordingContext = createContext<RecordingContextInterface>({
|
|
38
42
|
startRecording: () => {},
|
|
39
43
|
stopRecording: () => {},
|
|
40
44
|
isRecordingActive: false,
|
|
45
|
+
inProgress: false,
|
|
41
46
|
});
|
|
42
47
|
|
|
43
48
|
const START_RECORDING = gql`
|
|
@@ -82,6 +87,9 @@ interface RecordingProviderProps {
|
|
|
82
87
|
const RecordingProvider = (props: RecordingProviderProps) => {
|
|
83
88
|
const {rtcProps} = useContext(PropsContext);
|
|
84
89
|
const {setRecordingActive, isRecordingActive} = props?.value;
|
|
90
|
+
const [inProgress, setInProgress] = useState(false);
|
|
91
|
+
const [uidWhoStarted, setUidWhoStarted] = useState(0);
|
|
92
|
+
const {defaultContent, activeUids} = useContent();
|
|
85
93
|
const {phrase} = useParams<{phrase: string}>();
|
|
86
94
|
const [startRecordingQuery] = useMutation(START_RECORDING);
|
|
87
95
|
const [stopRecordingQuery] = useMutation(STOP_RECORDING);
|
|
@@ -101,14 +109,17 @@ const RecordingProvider = (props: RecordingProviderProps) => {
|
|
|
101
109
|
const payload = JSON.parse(data.payload);
|
|
102
110
|
const action = payload.action;
|
|
103
111
|
const value = payload.value;
|
|
104
|
-
|
|
105
112
|
switch (action) {
|
|
106
113
|
case EventActions.RECORDING_STARTED:
|
|
114
|
+
setUidWhoStarted(parseInt(value));
|
|
107
115
|
setRecordingActive(true);
|
|
108
116
|
break;
|
|
109
117
|
case EventActions.RECORDING_STOPPED:
|
|
110
118
|
setRecordingActive(false);
|
|
111
119
|
break;
|
|
120
|
+
case EventActions.RECORDING_STOP_REQUEST:
|
|
121
|
+
stopRecording();
|
|
122
|
+
break;
|
|
112
123
|
default:
|
|
113
124
|
break;
|
|
114
125
|
}
|
|
@@ -128,14 +139,22 @@ const RecordingProvider = (props: RecordingProviderProps) => {
|
|
|
128
139
|
if (prevRecordingState) {
|
|
129
140
|
if (prevRecordingState?.isRecordingActive === isRecordingActive) return;
|
|
130
141
|
Toast.show({
|
|
131
|
-
type: '
|
|
142
|
+
type: 'info',
|
|
132
143
|
text1: recordingStartedText(isRecordingActive),
|
|
133
|
-
|
|
144
|
+
text2: isRecordingActive
|
|
145
|
+
? `This room is being recorded by ${
|
|
146
|
+
trimText(defaultContent[uidWhoStarted]?.name) || 'user'
|
|
147
|
+
}`
|
|
148
|
+
: '',
|
|
149
|
+
visibilityTime: 3000,
|
|
150
|
+
primaryBtn: null,
|
|
151
|
+
secondaryBtn: null,
|
|
134
152
|
});
|
|
135
153
|
}
|
|
136
154
|
}, [isRecordingActive]);
|
|
137
155
|
|
|
138
156
|
const startRecording = () => {
|
|
157
|
+
setInProgress(true);
|
|
139
158
|
// If recording is not going on, start the recording by executing the graphql query
|
|
140
159
|
startRecordingQuery({
|
|
141
160
|
variables: {
|
|
@@ -148,6 +167,7 @@ const RecordingProvider = (props: RecordingProviderProps) => {
|
|
|
148
167
|
})
|
|
149
168
|
.then((res) => {
|
|
150
169
|
console.log(res.data);
|
|
170
|
+
setInProgress(false);
|
|
151
171
|
if (res.data.startRecordingSession === 'success') {
|
|
152
172
|
/**
|
|
153
173
|
* 1. Once the backend sucessfuly starts recording, send message
|
|
@@ -159,9 +179,10 @@ const RecordingProvider = (props: RecordingProviderProps) => {
|
|
|
159
179
|
action: EventActions.RECORDING_STARTED,
|
|
160
180
|
value: `${localUid}`,
|
|
161
181
|
}),
|
|
162
|
-
|
|
182
|
+
PersistanceLevel.Session,
|
|
163
183
|
);
|
|
164
184
|
// 2. set the local recording state to true to update the UI
|
|
185
|
+
setUidWhoStarted(localUid);
|
|
165
186
|
setRecordingActive(true);
|
|
166
187
|
// 3. set the presenter mode if screen share is active
|
|
167
188
|
// 3.a Get the most recent screenshare uid
|
|
@@ -182,40 +203,71 @@ const RecordingProvider = (props: RecordingProviderProps) => {
|
|
|
182
203
|
}
|
|
183
204
|
})
|
|
184
205
|
.catch((err) => {
|
|
206
|
+
setInProgress(false);
|
|
185
207
|
console.log(err);
|
|
186
208
|
});
|
|
187
209
|
};
|
|
188
210
|
|
|
189
211
|
const stopRecording = () => {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
212
|
+
/**
|
|
213
|
+
* if condition added for below issue
|
|
214
|
+
*
|
|
215
|
+
* user 1 and user 2 in the call
|
|
216
|
+
* user 1 start the recording
|
|
217
|
+
* user 2 stops the recording
|
|
218
|
+
* user 2 join the call getting stop recording notification which is not needed
|
|
219
|
+
*
|
|
220
|
+
* solution
|
|
221
|
+
* case 1 - if recording is not started by the host then we will send level1 message to host who started the recording
|
|
222
|
+
* case 2 - if person who started the recording no longer available in the call then will stop the recording
|
|
223
|
+
*/
|
|
224
|
+
if (
|
|
225
|
+
localUid === uidWhoStarted ||
|
|
226
|
+
activeUids.indexOf(uidWhoStarted) === -1
|
|
227
|
+
) {
|
|
228
|
+
setInProgress(true);
|
|
229
|
+
// If recording is already going on, stop the recording by executing the graphql query.
|
|
230
|
+
stopRecordingQuery({variables: {passphrase: phrase}})
|
|
231
|
+
.then((res) => {
|
|
232
|
+
console.log(res.data);
|
|
233
|
+
setInProgress(false);
|
|
234
|
+
if (res.data.stopRecordingSession === 'success') {
|
|
235
|
+
/**
|
|
236
|
+
* 1. Once the backend sucessfuly starts recording, send message
|
|
237
|
+
* in the channel indicating that cloud recording is now inactive.
|
|
238
|
+
*/
|
|
239
|
+
events.send(
|
|
240
|
+
EventNames.RECORDING_ATTRIBUTE,
|
|
241
|
+
JSON.stringify({
|
|
242
|
+
action: EventActions.RECORDING_STOPPED,
|
|
243
|
+
value: '',
|
|
244
|
+
}),
|
|
245
|
+
PersistanceLevel.Session,
|
|
246
|
+
);
|
|
247
|
+
// 2. set the local recording state to false to update the UI
|
|
248
|
+
setRecordingActive(false);
|
|
249
|
+
}
|
|
250
|
+
})
|
|
251
|
+
.catch((err) => {
|
|
252
|
+
setInProgress(false);
|
|
253
|
+
console.log(err);
|
|
254
|
+
});
|
|
255
|
+
} else {
|
|
256
|
+
events.send(
|
|
257
|
+
EventNames.RECORDING_ATTRIBUTE,
|
|
258
|
+
JSON.stringify({
|
|
259
|
+
action: EventActions.RECORDING_STOP_REQUEST,
|
|
260
|
+
value: '',
|
|
261
|
+
}),
|
|
262
|
+
PersistanceLevel.None,
|
|
263
|
+
);
|
|
264
|
+
}
|
|
214
265
|
};
|
|
215
266
|
|
|
216
267
|
return (
|
|
217
268
|
<RecordingContext.Provider
|
|
218
269
|
value={{
|
|
270
|
+
inProgress,
|
|
219
271
|
startRecording,
|
|
220
272
|
stopRecording,
|
|
221
273
|
isRecordingActive,
|
|
@@ -9,15 +9,16 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import React from 'react';
|
|
13
|
-
import
|
|
14
|
-
import
|
|
12
|
+
import React, {useContext} from 'react';
|
|
13
|
+
import ThemeConfig from '../../theme';
|
|
14
|
+
import IconButton, {IconButtonProps} from '../../atoms/IconButton';
|
|
15
|
+
import Styles from '../../components/styles';
|
|
15
16
|
import {useString} from '../../utils/useString';
|
|
16
17
|
import {useScreenshare} from './useScreenshare';
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
|
|
19
|
+
import {PropsContext, ClientRole} from '../../../agora-rn-uikit';
|
|
20
|
+
import {useLocalUserInfo, useRoomInfo} from 'customization-api';
|
|
21
|
+
import useIsHandRaised from '../../utils/useIsHandRaised';
|
|
21
22
|
/**
|
|
22
23
|
* A component to start and stop screen sharing on web clients.
|
|
23
24
|
* Screen sharing is not yet implemented on mobile platforms.
|
|
@@ -25,86 +26,67 @@ import {
|
|
|
25
26
|
*/
|
|
26
27
|
|
|
27
28
|
export interface ScreenshareButtonProps {
|
|
28
|
-
|
|
29
|
-
render?: (
|
|
30
|
-
onPress: () => void,
|
|
31
|
-
isScreenshareActive: boolean,
|
|
32
|
-
buttonTemplateName?: ButtonTemplateName,
|
|
33
|
-
) => JSX.Element;
|
|
29
|
+
render?: (onPress: () => void, isScreenshareActive: boolean) => JSX.Element;
|
|
34
30
|
}
|
|
35
31
|
|
|
36
32
|
const ScreenshareButton = (props: ScreenshareButtonProps) => {
|
|
33
|
+
const {rtcProps} = useContext(PropsContext);
|
|
34
|
+
const {
|
|
35
|
+
data: {isHost},
|
|
36
|
+
} = useRoomInfo();
|
|
37
|
+
const local = useLocalUserInfo();
|
|
38
|
+
const isHandRaised = useIsHandRaised();
|
|
37
39
|
const {isScreenshareActive, startUserScreenshare, stopUserScreenShare} =
|
|
38
40
|
useScreenshare();
|
|
39
41
|
//commented for v1 release
|
|
40
42
|
//const screenShareButton = useString('screenShareButton')();
|
|
41
|
-
|
|
42
|
-
const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
|
|
43
|
-
const {buttonTemplateName = defaultTemplateValue} = props;
|
|
43
|
+
|
|
44
44
|
const onPress = () =>
|
|
45
45
|
isScreenshareActive ? stopUserScreenShare() : startUserScreenshare();
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
const screenShareButton = isScreenshareActive ? 'Stop Share' : 'Share';
|
|
47
|
+
let iconButtonProps: IconButtonProps = {
|
|
48
|
+
iconProps: {
|
|
49
|
+
name: isScreenshareActive ? 'stop-screen-share' : 'screen-share',
|
|
50
|
+
tintColor: isScreenshareActive
|
|
51
|
+
? $config.SEMANTIC_ERROR
|
|
52
|
+
: $config.SECONDARY_ACTION_COLOR,
|
|
53
|
+
},
|
|
48
54
|
onPress,
|
|
55
|
+
btnTextProps: {
|
|
56
|
+
text: $config.ICON_TEXT ? screenShareButton : '',
|
|
57
|
+
textColor: $config.FONT_COLOR,
|
|
58
|
+
},
|
|
49
59
|
};
|
|
50
60
|
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
61
|
+
if (
|
|
62
|
+
rtcProps.role == ClientRole.Audience &&
|
|
63
|
+
$config.EVENT_MODE &&
|
|
64
|
+
!$config.RAISE_HAND
|
|
65
|
+
) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (
|
|
70
|
+
rtcProps.role == ClientRole.Audience &&
|
|
71
|
+
$config.EVENT_MODE &&
|
|
72
|
+
$config.RAISE_HAND &&
|
|
73
|
+
!isHost
|
|
74
|
+
) {
|
|
75
|
+
iconButtonProps.iconProps = {
|
|
76
|
+
...iconButtonProps.iconProps,
|
|
77
|
+
tintColor: $config.SEMANTIC_NEUTRAL,
|
|
78
|
+
};
|
|
79
|
+
iconButtonProps.toolTipMessage = isHandRaised(local.uid)
|
|
80
|
+
? 'Waiting for host to appove the request'
|
|
81
|
+
: 'Raise Hand in order to present';
|
|
82
|
+
iconButtonProps.disabled = true;
|
|
60
83
|
}
|
|
61
84
|
|
|
62
85
|
return props?.render ? (
|
|
63
|
-
props.render(onPress, isScreenshareActive
|
|
86
|
+
props.render(onPress, isScreenshareActive)
|
|
64
87
|
) : (
|
|
65
|
-
<
|
|
88
|
+
<IconButton {...iconButtonProps} />
|
|
66
89
|
);
|
|
67
90
|
};
|
|
68
91
|
|
|
69
|
-
const style = StyleSheet.create({
|
|
70
|
-
localButton: {
|
|
71
|
-
backgroundColor: $config.SECONDARY_FONT_COLOR,
|
|
72
|
-
borderRadius: 20,
|
|
73
|
-
borderColor: $config.PRIMARY_COLOR,
|
|
74
|
-
width: 40,
|
|
75
|
-
height: 40,
|
|
76
|
-
display: 'flex',
|
|
77
|
-
alignSelf: 'center',
|
|
78
|
-
alignItems: 'center',
|
|
79
|
-
justifyContent: 'center',
|
|
80
|
-
},
|
|
81
|
-
activeBtn: {
|
|
82
|
-
backgroundColor: '#4BEB5B',
|
|
83
|
-
borderRadius: 20,
|
|
84
|
-
borderColor: '#F86051',
|
|
85
|
-
width: '100%',
|
|
86
|
-
height: '100%',
|
|
87
|
-
resizeMode: 'contain',
|
|
88
|
-
},
|
|
89
|
-
nonActiveBtn: {
|
|
90
|
-
width: '100%',
|
|
91
|
-
height: '100%',
|
|
92
|
-
resizeMode: 'contain',
|
|
93
|
-
},
|
|
94
|
-
greenLocalButton: {
|
|
95
|
-
backgroundColor: '#4BEB5B',
|
|
96
|
-
borderRadius: 20,
|
|
97
|
-
borderColor: '#F86051',
|
|
98
|
-
width: 40,
|
|
99
|
-
height: 40,
|
|
100
|
-
alignSelf: 'center',
|
|
101
|
-
alignItems: 'center',
|
|
102
|
-
justifyContent: 'center',
|
|
103
|
-
},
|
|
104
|
-
buttonIcon: {
|
|
105
|
-
width: '90%',
|
|
106
|
-
height: '90%',
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
|
|
110
92
|
export default ScreenshareButton;
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import React, {useEffect, useRef} from 'react';
|
|
12
|
+
import React, {useContext, useEffect, useRef} from 'react';
|
|
13
13
|
import KeepAwake from 'react-native-keep-awake';
|
|
14
|
-
import {UidType} from '../../../agora-rn-uikit';
|
|
14
|
+
import {DispatchContext, UidType} from '../../../agora-rn-uikit';
|
|
15
15
|
import {
|
|
16
16
|
getGridLayoutName,
|
|
17
17
|
getPinnedLayoutName,
|
|
@@ -22,12 +22,12 @@ import {useScreenContext} from '../../components/contexts/ScreenShareContext';
|
|
|
22
22
|
import {useString} from '../../utils/useString';
|
|
23
23
|
import events from '../../rtm-events-api';
|
|
24
24
|
import {EventNames, EventActions} from '../../rtm-events';
|
|
25
|
-
import {useLayout,
|
|
25
|
+
import {useLayout, useContent} from 'customization-api';
|
|
26
26
|
import {filterObject} from '../../utils';
|
|
27
27
|
|
|
28
28
|
export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
29
|
-
const {dispatch} =
|
|
30
|
-
const {
|
|
29
|
+
const {dispatch} = useContext(DispatchContext);
|
|
30
|
+
const {defaultContent, activeUids, lastJoinedUid, pinnedUid} = useContent();
|
|
31
31
|
const isPinned = useRef(0);
|
|
32
32
|
const {setScreenShareData, screenShareData} = useScreenContext();
|
|
33
33
|
// commented for v1 release
|
|
@@ -38,12 +38,18 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
38
38
|
const setPinnedLayout = useSetPinnedLayout();
|
|
39
39
|
const changeLayout = useChangeDefaultLayout();
|
|
40
40
|
const {currentLayout} = useLayout();
|
|
41
|
-
const
|
|
41
|
+
const defaultContentRef = useRef({defaultContent: defaultContent});
|
|
42
42
|
const currentLayoutRef = useRef({currentLayout: currentLayout});
|
|
43
43
|
|
|
44
|
+
const pinnedUidRef = useRef({pinnedUid: pinnedUid});
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
pinnedUidRef.current.pinnedUid = pinnedUid;
|
|
48
|
+
}, [pinnedUid]);
|
|
49
|
+
|
|
44
50
|
useEffect(() => {
|
|
45
|
-
|
|
46
|
-
}, [
|
|
51
|
+
defaultContentRef.current.defaultContent = defaultContent;
|
|
52
|
+
}, [defaultContent]);
|
|
47
53
|
|
|
48
54
|
useEffect(() => {
|
|
49
55
|
currentLayoutRef.current.currentLayout = currentLayout;
|
|
@@ -93,14 +99,15 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
93
99
|
const value = payload.value;
|
|
94
100
|
|
|
95
101
|
const screenUidOfUser =
|
|
96
|
-
|
|
102
|
+
defaultContentRef.current.defaultContent[data.sender].screenUid;
|
|
97
103
|
switch (action) {
|
|
98
104
|
case EventActions.SCREENSHARE_STARTED:
|
|
99
105
|
setScreenShareData((prevState) => {
|
|
100
106
|
return {
|
|
101
107
|
...prevState,
|
|
102
108
|
[screenUidOfUser]: {
|
|
103
|
-
name:
|
|
109
|
+
name: defaultContentRef.current.defaultContent[screenUidOfUser]
|
|
110
|
+
?.name,
|
|
104
111
|
isActive: true,
|
|
105
112
|
ts: value || 0,
|
|
106
113
|
},
|
|
@@ -112,14 +119,18 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
112
119
|
return {
|
|
113
120
|
...prevState,
|
|
114
121
|
[screenUidOfUser]: {
|
|
115
|
-
name:
|
|
122
|
+
name: defaultContentRef.current.defaultContent[screenUidOfUser]
|
|
123
|
+
?.name,
|
|
116
124
|
isActive: false,
|
|
117
125
|
ts: value || 0,
|
|
118
126
|
},
|
|
119
127
|
};
|
|
120
128
|
});
|
|
121
129
|
//if remote user started/stopped the screenshare then change the layout to pinned/grid
|
|
122
|
-
|
|
130
|
+
//if user pinned somebody then don't triggerlayout change
|
|
131
|
+
if (!pinnedUidRef.current.pinnedUid) {
|
|
132
|
+
triggerChangeLayout(false);
|
|
133
|
+
}
|
|
123
134
|
break;
|
|
124
135
|
default:
|
|
125
136
|
break;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
12
|
import React, {useContext, useEffect, useRef, useState} from 'react';
|
|
13
|
-
import {PropsContext, UidType} from '../../../agora-rn-uikit';
|
|
13
|
+
import {DispatchContext, PropsContext, UidType} from '../../../agora-rn-uikit';
|
|
14
14
|
import {ScreenshareContext} from './useScreenshare';
|
|
15
15
|
import {
|
|
16
16
|
getGridLayoutName,
|
|
@@ -20,22 +20,27 @@ import {
|
|
|
20
20
|
} from '../../pages/video-call/DefaultLayouts';
|
|
21
21
|
import {useRecording} from '../recording/useRecording';
|
|
22
22
|
import {useScreenContext} from '../../components/contexts/ScreenShareContext';
|
|
23
|
-
import events, {
|
|
23
|
+
import events, {PersistanceLevel} from '../../rtm-events-api';
|
|
24
24
|
import {EventActions, EventNames} from '../../rtm-events';
|
|
25
25
|
import {IAgoraRTC} from 'agora-rtc-sdk-ng';
|
|
26
26
|
import useRecordingLayoutQuery from '../recording/useRecordingLayoutQuery';
|
|
27
27
|
import {useString} from '../../utils/useString';
|
|
28
28
|
import {timeNow} from '../../rtm/utils';
|
|
29
|
-
import {
|
|
29
|
+
import {
|
|
30
|
+
controlMessageEnum,
|
|
31
|
+
useLayout,
|
|
32
|
+
useContent,
|
|
33
|
+
useRtc,
|
|
34
|
+
} from 'customization-api';
|
|
30
35
|
import {filterObject} from '../../utils';
|
|
31
36
|
|
|
32
37
|
export const ScreenshareContextConsumer = ScreenshareContext.Consumer;
|
|
33
38
|
|
|
34
39
|
export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
35
40
|
const [isScreenshareActive, setScreenshareActive] = useState(false);
|
|
41
|
+
const {dispatch} = useContext(DispatchContext);
|
|
36
42
|
const rtc = useRtc();
|
|
37
|
-
const {
|
|
38
|
-
const {renderList, activeUids, lastJoinedUid} = useRender();
|
|
43
|
+
const {defaultContent, activeUids, lastJoinedUid, pinnedUid} = useContent();
|
|
39
44
|
const isPinned = useRef(0);
|
|
40
45
|
const {isRecordingActive} = useRecording();
|
|
41
46
|
const {executeNormalQuery, executePresenterQuery} = useRecordingLayoutQuery();
|
|
@@ -53,11 +58,16 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
53
58
|
const {channel, appId, screenShareUid, screenShareToken, encryption} =
|
|
54
59
|
useContext(PropsContext).rtcProps;
|
|
55
60
|
|
|
56
|
-
const
|
|
61
|
+
const defaultContentRef = useRef({defaultContent: defaultContent});
|
|
62
|
+
const pinnedUidRef = useRef({pinnedUid: pinnedUid});
|
|
63
|
+
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
pinnedUidRef.current.pinnedUid = pinnedUid;
|
|
66
|
+
}, [pinnedUid]);
|
|
57
67
|
|
|
58
68
|
useEffect(() => {
|
|
59
|
-
|
|
60
|
-
}, [
|
|
69
|
+
defaultContentRef.current.defaultContent = defaultContent;
|
|
70
|
+
}, [defaultContent]);
|
|
61
71
|
|
|
62
72
|
useEffect(() => {
|
|
63
73
|
currentLayoutRef.current.currentLayout = currentLayout;
|
|
@@ -109,20 +119,27 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
109
119
|
};
|
|
110
120
|
|
|
111
121
|
useEffect(() => {
|
|
122
|
+
events.on(controlMessageEnum.kickScreenshare, () => {
|
|
123
|
+
//if screenscreen already active. then below method will stop the screen share
|
|
124
|
+
// @ts-ignore
|
|
125
|
+
rtc.RtcEngineUnsafe.startScreenshare();
|
|
126
|
+
});
|
|
127
|
+
|
|
112
128
|
events.on(EventNames.SCREENSHARE_ATTRIBUTE, (data) => {
|
|
113
129
|
const payload = JSON.parse(data.payload);
|
|
114
130
|
const action = payload.action;
|
|
115
131
|
const value = payload.value;
|
|
116
132
|
|
|
117
133
|
const screenUidOfUser =
|
|
118
|
-
|
|
134
|
+
defaultContentRef.current.defaultContent[data.sender].screenUid;
|
|
119
135
|
switch (action) {
|
|
120
136
|
case EventActions.SCREENSHARE_STARTED:
|
|
121
137
|
setScreenShareData((prevState) => {
|
|
122
138
|
return {
|
|
123
139
|
...prevState,
|
|
124
140
|
[screenUidOfUser]: {
|
|
125
|
-
name:
|
|
141
|
+
name: defaultContentRef.current.defaultContent[screenUidOfUser]
|
|
142
|
+
?.name,
|
|
126
143
|
isActive: true,
|
|
127
144
|
ts: value || 0,
|
|
128
145
|
},
|
|
@@ -134,14 +151,18 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
134
151
|
return {
|
|
135
152
|
...prevState,
|
|
136
153
|
[screenUidOfUser]: {
|
|
137
|
-
name:
|
|
154
|
+
name: defaultContentRef.current.defaultContent[screenUidOfUser]
|
|
155
|
+
?.name,
|
|
138
156
|
isActive: false,
|
|
139
157
|
ts: value || 0,
|
|
140
158
|
},
|
|
141
159
|
};
|
|
142
160
|
});
|
|
143
161
|
//if remote user started/stopped the screenshare then change the layout to pinned/grid
|
|
144
|
-
|
|
162
|
+
//if user pinned somebody then don't triggerlayout change
|
|
163
|
+
if (!pinnedUidRef.current.pinnedUid) {
|
|
164
|
+
triggerChangeLayout(false);
|
|
165
|
+
}
|
|
145
166
|
break;
|
|
146
167
|
default:
|
|
147
168
|
break;
|
|
@@ -151,7 +172,7 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
151
172
|
|
|
152
173
|
useEffect(() => {
|
|
153
174
|
// @ts-ignore
|
|
154
|
-
rtc.
|
|
175
|
+
rtc.RtcEngineUnsafe.addListener('ScreenshareStopped', () => {
|
|
155
176
|
setScreenshareActive(false);
|
|
156
177
|
console.log('STOPPED SHARING');
|
|
157
178
|
executeNormalQuery();
|
|
@@ -161,7 +182,7 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
161
182
|
action: EventActions.SCREENSHARE_STOPPED,
|
|
162
183
|
value: 0,
|
|
163
184
|
}),
|
|
164
|
-
|
|
185
|
+
PersistanceLevel.Sender,
|
|
165
186
|
);
|
|
166
187
|
setScreenShareData((prevState) => {
|
|
167
188
|
return {
|
|
@@ -174,7 +195,10 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
174
195
|
};
|
|
175
196
|
});
|
|
176
197
|
//if local user stopped the screenshare then change layout to grid
|
|
177
|
-
|
|
198
|
+
//if user pinned somebody then don't triggerlayout change
|
|
199
|
+
if (!pinnedUidRef.current.pinnedUid) {
|
|
200
|
+
triggerChangeLayout(false);
|
|
201
|
+
}
|
|
178
202
|
});
|
|
179
203
|
}, []);
|
|
180
204
|
|
|
@@ -205,13 +229,13 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
205
229
|
console.log('screenshare query executed');
|
|
206
230
|
try {
|
|
207
231
|
// @ts-ignore
|
|
208
|
-
await rtc.
|
|
232
|
+
await rtc.RtcEngineUnsafe.startScreenshare(
|
|
209
233
|
screenShareToken,
|
|
210
234
|
channel,
|
|
211
235
|
null,
|
|
212
236
|
screenShareUid,
|
|
213
237
|
appId,
|
|
214
|
-
rtc.
|
|
238
|
+
rtc.RtcEngineUnsafe as unknown as IAgoraRTC,
|
|
215
239
|
encryption as unknown as any,
|
|
216
240
|
);
|
|
217
241
|
isActive && setScreenshareActive(true);
|
|
@@ -222,7 +246,8 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
222
246
|
return {
|
|
223
247
|
...prevState,
|
|
224
248
|
[screenShareUid]: {
|
|
225
|
-
name:
|
|
249
|
+
name: defaultContentRef.current.defaultContent[screenShareUid]
|
|
250
|
+
?.name,
|
|
226
251
|
isActive: true,
|
|
227
252
|
ts: timeNow(),
|
|
228
253
|
},
|
|
@@ -235,7 +260,7 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
|
|
|
235
260
|
action: EventActions.SCREENSHARE_STARTED,
|
|
236
261
|
value: timeNow(),
|
|
237
262
|
}),
|
|
238
|
-
|
|
263
|
+
PersistanceLevel.Sender,
|
|
239
264
|
);
|
|
240
265
|
}
|
|
241
266
|
} catch (e) {
|