agora-appbuilder-core 3.0.10 → 3.0.12
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 +0 -6
- package/package.json +2 -2
- package/template/_package-lock.json +4979 -7086
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +0 -4
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +0 -18
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +0 -2
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +26 -30
- package/template/agora-rn-uikit/src/Controls/Icons.ts +83 -30
- package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +0 -1
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +0 -1
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +0 -1
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +0 -1
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +0 -1
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +0 -2
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +0 -1
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +0 -1
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +0 -1
- package/template/agora-rn-uikit/src/Reducer/index.ts +0 -3
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +1 -89
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +2 -39
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +5 -15
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +9 -15
- package/template/agora-rn-uikit/src/index.ts +1 -3
- package/template/android/app/build.gradle +0 -1
- package/template/android/app/src/main/AndroidManifest.xml +15 -22
- package/template/android/app/src/main/java/com/helloworld/MainActivity.java +0 -50
- package/template/android/build.gradle +3 -3
- package/template/babel.config.js +0 -1
- package/template/bridge/rtc/webNg/RtcEngine.ts +17 -110
- package/template/customization-api/sub-components.ts +1 -1
- package/template/customization-api/typeDefinition.ts +1 -2
- package/template/electron/index.html +27 -27
- package/template/electron/renderer/index.js +0 -1
- package/template/global.d.ts +4 -26
- package/template/index.js +0 -4
- package/template/index.rsdk.tsx +0 -1
- package/template/index.web.js +1 -7
- package/template/index.wsdk.tsx +1 -1
- package/template/ios/HelloWorld/Info.plist +1 -14
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +0 -17
- package/template/metro.config.js +1 -1
- package/template/package.json +7 -21
- package/template/react-native-toast-message/index.d.ts +43 -43
- package/template/react-native-toast-message/src/colors/index.js +2 -3
- package/template/react-native-toast-message/src/components/base/index.js +59 -46
- package/template/react-native-toast-message/src/components/base/styles.js +32 -16
- package/template/react-native-toast-message/src/components/error.js +2 -3
- package/template/react-native-toast-message/src/components/info.js +2 -3
- package/template/react-native-toast-message/src/components/success.js +2 -3
- package/template/react-native-toast-message/src/index.js +31 -122
- package/template/react-native-toast-message/src/index.sdk.tsx +35 -125
- package/template/react-native-toast-message/src/styles.js +4 -3
- package/template/react-native-toast-message/src/styles.sdk.ts +4 -3
- package/template/src/App.tsx +0 -6
- package/template/src/AppWrapper.tsx +28 -63
- package/template/src/assets/icons.ts +102 -0
- package/template/src/atoms/HorizontalRule.tsx +1 -3
- package/template/src/atoms/PrimaryButton.tsx +26 -51
- package/template/src/atoms/SecondaryButton.tsx +5 -8
- package/template/src/atoms/TextInput.tsx +14 -12
- package/template/src/components/Chat.tsx +214 -86
- package/template/src/components/ChatContext.ts +1 -8
- package/template/src/components/ColorConfigure.tsx +1 -1
- package/template/src/components/ColorContext.ts +1 -1
- package/template/src/components/{Controls1.native.tsx → Controls.native.tsx} +4 -6
- package/template/src/components/Controls.tsx +42 -342
- package/template/src/components/DeviceConfigure.tsx +101 -461
- package/template/src/components/DeviceContext.tsx +4 -8
- package/template/src/components/EventsConfigure.tsx +7 -144
- package/template/src/components/GraphQLProvider.tsx +1 -1
- package/template/src/components/GridVideo.tsx +44 -59
- package/template/src/components/HostControlView.tsx +35 -114
- package/template/src/components/Navbar.tsx +398 -216
- package/template/src/components/NetworkQualityContext.tsx +20 -20
- package/template/src/components/ParticipantsView.tsx +154 -177
- package/template/src/components/PinnedVideo.tsx +120 -207
- package/template/src/components/Precall.native.tsx +119 -358
- package/template/src/components/Precall.tsx +135 -269
- package/template/src/components/RTMConfigure.tsx +4 -27
- package/template/src/components/Router.electron.ts +0 -1
- package/template/src/components/Router.native.ts +0 -1
- package/template/src/components/Router.sdk.ts +0 -1
- package/template/src/components/Router.ts +0 -1
- package/template/src/components/Settings.tsx +95 -26
- package/template/src/components/SettingsView.tsx +56 -251
- package/template/src/components/Share.tsx +273 -302
- package/template/src/components/StorageContext.tsx +3 -30
- package/template/src/components/chat-messages/useChatMessages.tsx +23 -69
- package/template/src/components/chat-ui/useChatUIControl.tsx +0 -7
- package/template/src/components/common/Error.tsx +6 -20
- package/template/src/components/common/Logo.tsx +15 -16
- package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -10
- package/template/src/components/contexts/VideoMeetingDataContext.tsx +7 -37
- package/template/src/components/livestream/LiveStreamContext.tsx +36 -270
- package/template/src/components/livestream/Types.ts +14 -39
- package/template/src/components/livestream/index.ts +0 -1
- package/template/src/components/livestream/views/LiveStreamControls.tsx +4 -12
- package/template/src/components/participants/AllAudienceParticipants.tsx +30 -101
- package/template/src/components/participants/AllHostParticipants.tsx +34 -103
- package/template/src/components/participants/MeParticipant.tsx +38 -0
- package/template/src/components/participants/ParticipantName.tsx +7 -13
- package/template/src/components/participants/ParticipantSectionTitle.tsx +10 -35
- package/template/src/components/participants/RemoteParticipants.tsx +71 -0
- package/template/src/components/participants/ScreenshareParticipants.tsx +12 -144
- package/template/src/components/precall/{LocalMute1.native.tsx → LocalMute.native.tsx} +5 -21
- package/template/src/components/precall/LocalMute.tsx +14 -84
- package/template/src/components/precall/VideoPreview.native.tsx +3 -48
- package/template/src/components/precall/VideoPreview.tsx +7 -163
- package/template/src/components/precall/joinCallBtn.tsx +2 -15
- package/template/src/components/precall/meetingTitle.tsx +12 -15
- package/template/src/components/precall/selectDevice.tsx +21 -1
- package/template/src/components/precall/textInput.tsx +4 -32
- package/template/src/components/precall/usePreCall.tsx +0 -16
- package/template/src/components/styles.ts +21 -42
- package/template/src/components/useShareLink.tsx +14 -12
- package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
- package/template/src/pages/Authenticate.tsx +15 -5
- package/template/src/pages/Create.tsx +165 -293
- package/template/src/pages/Join.tsx +67 -93
- package/template/src/pages/VideoCall.tsx +64 -89
- package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
- package/template/src/pages/video-call/NameWithMicIcon.tsx +44 -120
- package/template/src/pages/video-call/RenderComponent.tsx +2 -3
- package/template/src/pages/video-call/VideoCallScreen.tsx +9 -45
- package/template/src/pages/video-call/VideoComponent.tsx +3 -18
- package/template/src/pages/video-call/VideoRenderer.tsx +60 -218
- package/template/src/rtm-events/constants.ts +0 -2
- package/template/src/subComponents/ChatBubble.tsx +83 -123
- package/template/src/subComponents/ChatContainer.tsx +84 -257
- package/template/src/subComponents/ChatInput.tsx +46 -61
- package/template/src/subComponents/Checkbox.native.tsx +5 -16
- package/template/src/subComponents/Checkbox.tsx +2 -2
- package/template/src/subComponents/CopyJoinInfo.tsx +58 -36
- package/template/src/subComponents/FallbackLogo.tsx +40 -122
- package/template/src/subComponents/LanguageSelector.tsx +1 -1
- package/template/src/subComponents/{LayoutIconDropdown1.native.tsx → LayoutIconDropdown.native.tsx} +18 -4
- package/template/src/subComponents/LayoutIconDropdown.tsx +134 -131
- package/template/src/subComponents/LocalAudioMute.tsx +27 -119
- package/template/src/subComponents/LocalEndCall.tsx +33 -71
- package/template/src/subComponents/LocalSwitchCamera.tsx +30 -17
- package/template/src/subComponents/LocalVideoMute.tsx +27 -117
- package/template/src/subComponents/Logo.tsx +4 -3
- package/template/src/subComponents/LogoutButton.tsx +1 -1
- package/template/src/subComponents/NetworkQualityPill.tsx +63 -60
- package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
- package/template/src/subComponents/Recording.tsx +29 -28
- package/template/src/subComponents/RemoteAudioMute.tsx +29 -83
- package/template/src/subComponents/RemoteEndCall.tsx +5 -8
- package/template/src/subComponents/RemoteVideoMute.tsx +21 -74
- package/template/src/subComponents/ScreenShareNotice.tsx +8 -83
- package/template/src/subComponents/SelectDevice.tsx +61 -404
- package/template/src/subComponents/SelectOAuth.tsx +8 -9
- package/template/src/subComponents/ToastConfig.tsx +10 -150
- package/template/src/subComponents/chat/ChatParticipants.tsx +78 -187
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -95
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -29
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +11 -24
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +10 -17
- package/template/src/subComponents/recording/useRecording.tsx +27 -79
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +70 -52
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +2 -11
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +4 -26
- package/template/src/utils/common.tsx +1 -155
- package/template/src/utils/index.tsx +0 -19
- package/template/src/utils/isMobileOrTablet.ts +2 -7
- package/template/src/utils/useButtonTemplate.tsx +0 -1
- package/template/src/utils/useMuteToggleLocal.ts +3 -54
- package/template/web/index.html +0 -5
- package/template/webpack.commons.js +8 -13
- package/template/webpack.web.config.js +0 -1
- package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
- package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +0 -24
- package/template/agora-rn-uikit/src/Reducer/UserPin.ts +0 -11
- 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/res/values/colors.xml +0 -7
- package/template/react-native-toast-message/src/components/checkbox.js +0 -178
- package/template/react-native.config.js +0 -7
- package/template/src/assets/font-styles.css +0 -329
- 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 +0 -1
- package/template/src/atoms/ActionMenu.tsx +0 -236
- package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +0 -71
- package/template/src/atoms/AnimatedActiveSpeaker.tsx +0 -84
- package/template/src/atoms/AnimatedRings.native.tsx +0 -68
- package/template/src/atoms/AnimatedRings.tsx +0 -70
- package/template/src/atoms/Card.tsx +0 -61
- package/template/src/atoms/CircularProgress.native.tsx +0 -121
- package/template/src/atoms/CircularProgress.tsx +0 -102
- package/template/src/atoms/CustomIcon.tsx +0 -88
- package/template/src/atoms/CustomSwitch.tsx +0 -287
- package/template/src/atoms/Dropdown.tsx +0 -306
- package/template/src/atoms/IconButton.tsx +0 -162
- package/template/src/atoms/ImageIcon.tsx +0 -98
- package/template/src/atoms/InfoBubble.tsx +0 -291
- package/template/src/atoms/Input.tsx +0 -87
- package/template/src/atoms/InviteInfo.tsx +0 -166
- package/template/src/atoms/LinkButton.tsx +0 -28
- package/template/src/atoms/OutlineButton.tsx +0 -61
- package/template/src/atoms/ParticipantsCount.tsx +0 -73
- package/template/src/atoms/Popup.tsx +0 -147
- package/template/src/atoms/RecordingInfo.tsx +0 -49
- package/template/src/atoms/Spacer.tsx +0 -22
- package/template/src/atoms/TertiaryButton.tsx +0 -78
- package/template/src/atoms/Toggle.tsx +0 -47
- package/template/src/atoms/Tooltip.native.tsx +0 -65
- package/template/src/atoms/Tooltip.tsx +0 -94
- package/template/src/atoms/UserAvatar.tsx +0 -60
- package/template/src/components/CommonStyles.ts +0 -44
- package/template/src/components/ToastComponent.tsx +0 -8
- package/template/src/components/participants/Participant.tsx +0 -302
- package/template/src/components/participants/UserActionMenuOptions.tsx +0 -398
- package/template/src/components/popups/InvitePopup.tsx +0 -115
- package/template/src/components/popups/StopRecordingPopup.tsx +0 -114
- package/template/src/components/precall/PermissionHelper.native.tsx +0 -5
- package/template/src/components/precall/PermissionHelper.tsx +0 -126
- package/template/src/components/precall/PreCallSettings.tsx +0 -52
- package/template/src/components/useToast.tsx +0 -41
- package/template/src/components/useVideoCall.tsx +0 -65
- package/template/src/pages/Endcall.tsx +0 -148
- package/template/src/pages/video-call/ActionSheet.native.tsx +0 -215
- package/template/src/pages/video-call/ActionSheet.tsx +0 -226
- package/template/src/pages/video-call/ActionSheetContent.tsx +0 -479
- package/template/src/pages/video-call/ActionSheetHandle.tsx +0 -38
- package/template/src/pages/video-call/ActionSheetStyles.css +0 -138
- package/template/src/pages/video-call/SidePanelHeader.tsx +0 -190
- package/template/src/pages/video-call/VideoCallMobileView.tsx +0 -139
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +0 -37
- package/template/src/subComponents/ChatInput.ios.tsx +0 -237
- package/template/src/subComponents/EndcallPopup.tsx +0 -107
- package/template/src/subComponents/LayoutIconButton.tsx +0 -201
- package/template/src/subComponents/RemoteMutePopup.tsx +0 -193
- package/template/src/subComponents/RemoveMeetingPopup.tsx +0 -109
- package/template/src/subComponents/RemoveScreensharePopup.tsx +0 -109
- package/template/src/subComponents/SelectDeviceSettings.backup.tsx +0 -207
- package/template/src/subComponents/SidePanelHeader.tsx +0 -112
- package/template/src/theme/index.ts +0 -46
- package/template/src/utils/PlatformWrapper.tsx +0 -21
- package/template/src/utils/hexadecimalTransparency.ts +0 -108
- package/template/src/utils/pendingStateUpdateHelper.ts +0 -19
- package/template/src/utils/useFocus.tsx +0 -46
- package/template/src/utils/useIsActiveSpeaker.ts +0 -27
- package/template/src/utils/useIsHandRaised.ts +0 -13
- package/template/src/utils/useRemoteEndScreenshare.ts +0 -26
- package/template/src/utils/useRemoteRequest.ts +0 -84
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
********************************************
|
|
3
|
-
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
-
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
-
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
-
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
-
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
-
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
-
information visit https://appbuilder.agora.io.
|
|
10
|
-
*********************************************
|
|
11
|
-
*/
|
|
12
|
-
import React, {useContext, useEffect} from 'react';
|
|
13
|
-
import {StyleSheet, View, Text} from 'react-native';
|
|
14
|
-
import {PropsContext, ClientRole} from '../../agora-rn-uikit';
|
|
15
|
-
import DeviceContext from '../components/DeviceContext';
|
|
16
|
-
import ColorContext from '../components/ColorContext';
|
|
17
|
-
import {useString} from '../utils/useString';
|
|
18
|
-
import Spacer from '../atoms/Spacer';
|
|
19
|
-
import Dropdown from '../atoms/Dropdown';
|
|
20
|
-
import {usePreCall} from '../components/precall/usePreCall';
|
|
21
|
-
import ThemeConfig from '../theme';
|
|
22
|
-
// import {dropdown} from '../../theme.json';
|
|
23
|
-
/**
|
|
24
|
-
* A component to diplay a dropdown and select a device.
|
|
25
|
-
* It will add the selected device to the device context.
|
|
26
|
-
*/
|
|
27
|
-
const useSelectDevice = (): [boolean, string] => {
|
|
28
|
-
const {rtcProps} = useContext(PropsContext);
|
|
29
|
-
const {primaryColor} = useContext(ColorContext);
|
|
30
|
-
const [btnTheme, setBtnTheme] = React.useState<string>(primaryColor);
|
|
31
|
-
const [isPickerDisabled, setPickerDisabled] = React.useState<boolean>(false);
|
|
32
|
-
React.useEffect(() => {
|
|
33
|
-
if ($config.EVENT_MODE && rtcProps.role === ClientRole.Audience) {
|
|
34
|
-
setPickerDisabled(true);
|
|
35
|
-
setBtnTheme('rgba(16, 16, 16, 0.3)');
|
|
36
|
-
} else {
|
|
37
|
-
setPickerDisabled(false);
|
|
38
|
-
setBtnTheme(primaryColor);
|
|
39
|
-
}
|
|
40
|
-
}, [rtcProps?.role]);
|
|
41
|
-
return [isPickerDisabled, btnTheme];
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
interface SelectVideoDeviceProps {
|
|
45
|
-
render?: (
|
|
46
|
-
selectedCam: string,
|
|
47
|
-
setSelectedCam: (cam: string) => void,
|
|
48
|
-
deviceList: MediaDeviceInfo[],
|
|
49
|
-
isDisabled: boolean,
|
|
50
|
-
) => JSX.Element;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const SelectVideoDevice = (props: SelectVideoDeviceProps) => {
|
|
54
|
-
const {selectedCam, setSelectedCam, deviceList} = useContext(DeviceContext);
|
|
55
|
-
const [isPickerDisabled, btnTheme] = useSelectDevice();
|
|
56
|
-
const [isFocussed, setIsFocussed] = React.useState(false);
|
|
57
|
-
const data = deviceList
|
|
58
|
-
.filter((device: any) => {
|
|
59
|
-
if (device.kind === 'videoinput') {
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
})
|
|
63
|
-
?.map((device) => {
|
|
64
|
-
return {
|
|
65
|
-
label: device.label,
|
|
66
|
-
value: device.deviceId,
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
return props?.render ? (
|
|
71
|
-
props.render(selectedCam, setSelectedCam, deviceList, isPickerDisabled)
|
|
72
|
-
) : (
|
|
73
|
-
<>
|
|
74
|
-
<Text style={[style.label]}>Camera</Text>
|
|
75
|
-
<Dropdown
|
|
76
|
-
icon={'video-on'}
|
|
77
|
-
enabled={!isPickerDisabled}
|
|
78
|
-
label={!data || !data.length ? 'No Camera Detected' : ''}
|
|
79
|
-
data={data}
|
|
80
|
-
onSelect={({label, value}) => {
|
|
81
|
-
setIsFocussed(true);
|
|
82
|
-
setSelectedCam(value);
|
|
83
|
-
}}
|
|
84
|
-
selectedValue={selectedCam}
|
|
85
|
-
/>
|
|
86
|
-
</>
|
|
87
|
-
);
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
interface SelectAudioDeviceProps {
|
|
91
|
-
render?: (
|
|
92
|
-
selectedMic: string,
|
|
93
|
-
setSelectedMic: (mic: string) => void,
|
|
94
|
-
deviceList: MediaDeviceInfo[],
|
|
95
|
-
isDisabled: boolean,
|
|
96
|
-
) => JSX.Element;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const SelectAudioDevice = (props: SelectAudioDeviceProps) => {
|
|
100
|
-
const {selectedMic, setSelectedMic, deviceList} = useContext(DeviceContext);
|
|
101
|
-
const [isPickerDisabled, btnTheme] = useSelectDevice();
|
|
102
|
-
const [isFocussed, setIsFocussed] = React.useState(false);
|
|
103
|
-
|
|
104
|
-
const data = deviceList
|
|
105
|
-
.filter((device) => {
|
|
106
|
-
if (device.kind === 'audioinput') {
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
})
|
|
110
|
-
?.map((device: any) => {
|
|
111
|
-
if (device.kind === 'audioinput') {
|
|
112
|
-
return {
|
|
113
|
-
label: device.label,
|
|
114
|
-
value: device.deviceId,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
return props?.render ? (
|
|
119
|
-
props.render(selectedMic, setSelectedMic, deviceList, isPickerDisabled)
|
|
120
|
-
) : (
|
|
121
|
-
<>
|
|
122
|
-
<Text style={[style.label]}>Microphone</Text>
|
|
123
|
-
<Dropdown
|
|
124
|
-
icon="mic-on"
|
|
125
|
-
enabled={!isPickerDisabled}
|
|
126
|
-
selectedValue={selectedMic}
|
|
127
|
-
label={!data || !data.length ? 'No Microphone Detected' : ''}
|
|
128
|
-
data={data}
|
|
129
|
-
onSelect={({label, value}) => {
|
|
130
|
-
setIsFocussed(true);
|
|
131
|
-
setSelectedMic(value);
|
|
132
|
-
}}
|
|
133
|
-
/>
|
|
134
|
-
</>
|
|
135
|
-
);
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
const SelectDeviceSettings = () => {
|
|
139
|
-
const [isPickerDisabled] = useSelectDevice();
|
|
140
|
-
const {deviceList} = useContext(DeviceContext);
|
|
141
|
-
const {setCameraAvailable, setMicAvailable} = usePreCall();
|
|
142
|
-
|
|
143
|
-
const audioDevices = deviceList.filter((device) => {
|
|
144
|
-
if (device.kind === 'audioinput') {
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
const videoDevices = deviceList.filter((device) => {
|
|
149
|
-
if (device.kind === 'videoinput') {
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
useEffect(() => {
|
|
155
|
-
if (audioDevices && audioDevices.length) {
|
|
156
|
-
setMicAvailable(true);
|
|
157
|
-
}
|
|
158
|
-
}, [audioDevices]);
|
|
159
|
-
|
|
160
|
-
useEffect(() => {
|
|
161
|
-
if (videoDevices && videoDevices.length) {
|
|
162
|
-
setCameraAvailable(true);
|
|
163
|
-
}
|
|
164
|
-
}, [videoDevices]);
|
|
165
|
-
|
|
166
|
-
//commented for v1 release
|
|
167
|
-
// const settingScreenInfoMessage = useString('settingScreenInfoMessage')();
|
|
168
|
-
const settingScreenInfoMessage = $config.AUDIO_ROOM
|
|
169
|
-
? 'Audio sharing is disabled for attendees. Raise hand to request permission to share.'
|
|
170
|
-
: 'Video and Audio sharing is disabled for attendees. Raise hand to request permission to share.';
|
|
171
|
-
return (
|
|
172
|
-
<View>
|
|
173
|
-
<View>
|
|
174
|
-
{!$config.AUDIO_ROOM && <SelectVideoDevice />}
|
|
175
|
-
<Spacer size={20} />
|
|
176
|
-
<SelectAudioDevice />
|
|
177
|
-
</View>
|
|
178
|
-
{$config.EVENT_MODE && isPickerDisabled && (
|
|
179
|
-
<View>
|
|
180
|
-
<Text style={style.infoTxt}>{settingScreenInfoMessage}</Text>
|
|
181
|
-
</View>
|
|
182
|
-
)}
|
|
183
|
-
</View>
|
|
184
|
-
);
|
|
185
|
-
};
|
|
186
|
-
export const SelectDeviceSettingsComponentsArray: [
|
|
187
|
-
(props: SelectVideoDeviceProps) => JSX.Element,
|
|
188
|
-
(props: SelectAudioDeviceProps) => JSX.Element,
|
|
189
|
-
] = [SelectVideoDevice, SelectAudioDevice];
|
|
190
|
-
|
|
191
|
-
const style = StyleSheet.create({
|
|
192
|
-
infoTxt: {
|
|
193
|
-
textAlign: 'center',
|
|
194
|
-
fontSize: 12,
|
|
195
|
-
color: '#FF0000',
|
|
196
|
-
},
|
|
197
|
-
label: {
|
|
198
|
-
fontWeight: '400',
|
|
199
|
-
fontSize: ThemeConfig.FontSize.small,
|
|
200
|
-
color: $config.FONT_COLOR,
|
|
201
|
-
fontFamily: ThemeConfig.FontFamily.sansPro,
|
|
202
|
-
marginBottom: 12,
|
|
203
|
-
lineHeight: ThemeConfig.FontSize.small,
|
|
204
|
-
},
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
export default SelectDeviceSettings;
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {View, StyleSheet, ViewStyle} from 'react-native';
|
|
3
|
-
import IconButton from '../atoms/IconButton';
|
|
4
|
-
import ThemeConfig from '../theme';
|
|
5
|
-
import {IconsInterface} from '../atoms/CustomIcon';
|
|
6
|
-
import {isWebInternal} from '../utils/common';
|
|
7
|
-
|
|
8
|
-
export interface SidePanelHeaderProps {
|
|
9
|
-
centerComponent?: React.ReactNode;
|
|
10
|
-
leadingIconName?: keyof IconsInterface;
|
|
11
|
-
leadingIconOnPress?: () => void;
|
|
12
|
-
trailingIconName?: keyof IconsInterface;
|
|
13
|
-
trailingIconOnPress?: () => void;
|
|
14
|
-
isChat?: boolean;
|
|
15
|
-
}
|
|
16
|
-
const SidePanelHeader = (props: SidePanelHeaderProps) => {
|
|
17
|
-
const {isChat = false} = props;
|
|
18
|
-
return (
|
|
19
|
-
<View
|
|
20
|
-
style={[
|
|
21
|
-
SidePanelStyles.sidePanelHeader,
|
|
22
|
-
isChat ? SidePanelStyles.chatPadding : {},
|
|
23
|
-
]}>
|
|
24
|
-
{props?.leadingIconName ? (
|
|
25
|
-
<View>
|
|
26
|
-
<IconButton
|
|
27
|
-
hoverEffect={true}
|
|
28
|
-
hoverEffectStyle={{
|
|
29
|
-
backgroundColor: $config.ICON_BG_COLOR,
|
|
30
|
-
borderRadius: 20,
|
|
31
|
-
}}
|
|
32
|
-
iconProps={{
|
|
33
|
-
iconType: 'plain',
|
|
34
|
-
iconContainerStyle: {
|
|
35
|
-
padding: 5,
|
|
36
|
-
},
|
|
37
|
-
iconSize: 20,
|
|
38
|
-
name: props.leadingIconName,
|
|
39
|
-
tintColor: $config.SECONDARY_ACTION_COLOR,
|
|
40
|
-
}}
|
|
41
|
-
onPress={() => {
|
|
42
|
-
props?.leadingIconOnPress && props.leadingIconOnPress();
|
|
43
|
-
}}
|
|
44
|
-
/>
|
|
45
|
-
</View>
|
|
46
|
-
) : isChat ? (
|
|
47
|
-
<View style={{width: 30, height: 'auto'}}></View>
|
|
48
|
-
) : (
|
|
49
|
-
<></>
|
|
50
|
-
)}
|
|
51
|
-
{props?.centerComponent ? props.centerComponent : <></>}
|
|
52
|
-
<View>
|
|
53
|
-
{props?.trailingIconName ? (
|
|
54
|
-
<IconButton
|
|
55
|
-
hoverEffect={true}
|
|
56
|
-
hoverEffectStyle={{
|
|
57
|
-
backgroundColor: $config.ICON_BG_COLOR,
|
|
58
|
-
borderRadius: 20,
|
|
59
|
-
}}
|
|
60
|
-
iconProps={{
|
|
61
|
-
iconType: 'plain',
|
|
62
|
-
iconContainerStyle: {
|
|
63
|
-
padding: 5,
|
|
64
|
-
},
|
|
65
|
-
iconSize: 20,
|
|
66
|
-
name: props?.trailingIconName,
|
|
67
|
-
tintColor: $config.SECONDARY_ACTION_COLOR,
|
|
68
|
-
}}
|
|
69
|
-
onPress={() => {
|
|
70
|
-
props?.trailingIconOnPress && props.trailingIconOnPress();
|
|
71
|
-
}}
|
|
72
|
-
/>
|
|
73
|
-
) : (
|
|
74
|
-
<></>
|
|
75
|
-
)}
|
|
76
|
-
</View>
|
|
77
|
-
</View>
|
|
78
|
-
);
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export const SidePanelStyles = StyleSheet.create({
|
|
82
|
-
sidePanelHeader: {
|
|
83
|
-
height: isWebInternal() ? 60 : 'auto',
|
|
84
|
-
flexDirection: 'row',
|
|
85
|
-
justifyContent: 'space-between',
|
|
86
|
-
alignItems: 'center',
|
|
87
|
-
paddingHorizontal: 20,
|
|
88
|
-
paddingVertical: 22,
|
|
89
|
-
borderBottomWidth: 1,
|
|
90
|
-
borderBottomColor: $config.CARD_LAYER_3_COLOR,
|
|
91
|
-
},
|
|
92
|
-
chatPadding: {
|
|
93
|
-
paddingHorizontal: 20,
|
|
94
|
-
paddingVertical: 12,
|
|
95
|
-
},
|
|
96
|
-
heading: {
|
|
97
|
-
fontFamily: ThemeConfig.FontFamily.sansPro,
|
|
98
|
-
fontSize: ThemeConfig.FontSize.normal,
|
|
99
|
-
lineHeight: 1.6 * ThemeConfig.FontSize.normal,
|
|
100
|
-
fontWeight: '600',
|
|
101
|
-
color: $config.FONT_COLOR,
|
|
102
|
-
alignSelf: 'center',
|
|
103
|
-
},
|
|
104
|
-
alignCenterNoPadding: {
|
|
105
|
-
padding: 0,
|
|
106
|
-
display: 'flex',
|
|
107
|
-
alignSelf: 'center',
|
|
108
|
-
alignItems: 'center',
|
|
109
|
-
justifyContent: 'center',
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
export default SidePanelHeader;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import hexadecimalTransparency from '../utils/hexadecimalTransparency';
|
|
2
|
-
|
|
3
|
-
const EmphasisOpacity = {
|
|
4
|
-
high: 1,
|
|
5
|
-
medium: 0.85,
|
|
6
|
-
disabled: 0.4,
|
|
7
|
-
};
|
|
8
|
-
const EmphasisPlus = {
|
|
9
|
-
high: '',
|
|
10
|
-
medium: hexadecimalTransparency['85%'],
|
|
11
|
-
disabled: hexadecimalTransparency['40%'],
|
|
12
|
-
};
|
|
13
|
-
const FontSize: {
|
|
14
|
-
extraLarge: 32;
|
|
15
|
-
large: 20;
|
|
16
|
-
medium: 18;
|
|
17
|
-
normal: 16;
|
|
18
|
-
small: 14;
|
|
19
|
-
tiny: 12;
|
|
20
|
-
} = {
|
|
21
|
-
extraLarge: 32,
|
|
22
|
-
large: 20,
|
|
23
|
-
medium: 18,
|
|
24
|
-
normal: 16,
|
|
25
|
-
small: 14,
|
|
26
|
-
tiny: 12,
|
|
27
|
-
};
|
|
28
|
-
const FontFamily = {
|
|
29
|
-
sansPro: 'Source Sans Pro',
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const BorderRadius: {small: 4; medium: 8; large: 12; extraLarge: 20} = {
|
|
33
|
-
small: 4,
|
|
34
|
-
medium: 8,
|
|
35
|
-
large: 12,
|
|
36
|
-
extraLarge: 20,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const ThemeConfig = {
|
|
40
|
-
EmphasisOpacity,
|
|
41
|
-
EmphasisPlus,
|
|
42
|
-
FontSize,
|
|
43
|
-
FontFamily,
|
|
44
|
-
BorderRadius,
|
|
45
|
-
};
|
|
46
|
-
export default ThemeConfig;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {useState} from 'react';
|
|
3
|
-
import {isWebInternal} from './common';
|
|
4
|
-
|
|
5
|
-
const PlatformWrapper = ({children}) => {
|
|
6
|
-
const [isHovered, setIsHovered] = useState(false);
|
|
7
|
-
return isWebInternal() ? (
|
|
8
|
-
<div
|
|
9
|
-
onMouseEnter={() => {
|
|
10
|
-
setIsHovered(true);
|
|
11
|
-
}}
|
|
12
|
-
onMouseLeave={() => {
|
|
13
|
-
setIsHovered(false);
|
|
14
|
-
}}>
|
|
15
|
-
{children(isHovered)}
|
|
16
|
-
</div>
|
|
17
|
-
) : (
|
|
18
|
-
<>{children(false)}</>
|
|
19
|
-
);
|
|
20
|
-
};
|
|
21
|
-
export default PlatformWrapper;
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hexadecimal color code for transparency
|
|
3
|
-
* ref https://gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
|
|
4
|
-
*/
|
|
5
|
-
const hexadecimalTransparency = {
|
|
6
|
-
'100%': 'FF',
|
|
7
|
-
'99%': 'FC',
|
|
8
|
-
'98%': 'FA',
|
|
9
|
-
'97%': 'F7',
|
|
10
|
-
'96%': 'F5',
|
|
11
|
-
'95%': 'F2',
|
|
12
|
-
'94%': 'F0',
|
|
13
|
-
'93%': 'ED',
|
|
14
|
-
'92%': 'EB',
|
|
15
|
-
'91%': 'E8',
|
|
16
|
-
'90%': 'E6',
|
|
17
|
-
'89%': 'E3',
|
|
18
|
-
'88%': 'E0',
|
|
19
|
-
'87%': 'DE',
|
|
20
|
-
'86%': 'DB',
|
|
21
|
-
'85%': 'D9',
|
|
22
|
-
'84%': 'D6',
|
|
23
|
-
'83%': 'D4',
|
|
24
|
-
'82%': 'D1',
|
|
25
|
-
'81%': 'CF',
|
|
26
|
-
'80%': 'CC',
|
|
27
|
-
'79%': 'C9',
|
|
28
|
-
'78%': 'C7',
|
|
29
|
-
'77%': 'C4',
|
|
30
|
-
'76%': 'C2',
|
|
31
|
-
'75%': 'BF',
|
|
32
|
-
'74%': 'BD',
|
|
33
|
-
'73%': 'BA',
|
|
34
|
-
'72%': 'B8',
|
|
35
|
-
'71%': 'B5',
|
|
36
|
-
'70%': 'B3',
|
|
37
|
-
'69%': 'B0',
|
|
38
|
-
'68%': 'AD',
|
|
39
|
-
'67%': 'AB',
|
|
40
|
-
'66%': 'A8',
|
|
41
|
-
'65%': 'A6',
|
|
42
|
-
'64%': 'A3',
|
|
43
|
-
'63%': 'A1',
|
|
44
|
-
'62%': '9E',
|
|
45
|
-
'61%': '9C',
|
|
46
|
-
'60%': '99',
|
|
47
|
-
'59%': '96',
|
|
48
|
-
'58%': '94',
|
|
49
|
-
'57%': '91',
|
|
50
|
-
'56%': '8F',
|
|
51
|
-
'55%': '8C',
|
|
52
|
-
'54%': '8A',
|
|
53
|
-
'53%': '87',
|
|
54
|
-
'52%': '85',
|
|
55
|
-
'51%': '82',
|
|
56
|
-
'50%': '80',
|
|
57
|
-
'49%': '7D',
|
|
58
|
-
'48%': '7A',
|
|
59
|
-
'47%': '78',
|
|
60
|
-
'46%': '75',
|
|
61
|
-
'45%': '73',
|
|
62
|
-
'44%': '70',
|
|
63
|
-
'43%': '6E',
|
|
64
|
-
'42%': '6B',
|
|
65
|
-
'41%': '69',
|
|
66
|
-
'40%': '66',
|
|
67
|
-
'39%': '63',
|
|
68
|
-
'38%': '61',
|
|
69
|
-
'37%': '5E',
|
|
70
|
-
'36%': '5C',
|
|
71
|
-
'35%': '59',
|
|
72
|
-
'34%': '57',
|
|
73
|
-
'33%': '54',
|
|
74
|
-
'32%': '52',
|
|
75
|
-
'31%': '4F',
|
|
76
|
-
'30%': '4D',
|
|
77
|
-
'29%': '4A',
|
|
78
|
-
'28%': '47',
|
|
79
|
-
'27%': '45',
|
|
80
|
-
'26%': '42',
|
|
81
|
-
'25%': '40',
|
|
82
|
-
'24%': '3D',
|
|
83
|
-
'23%': '3B',
|
|
84
|
-
'22%': '38',
|
|
85
|
-
'21%': '36',
|
|
86
|
-
'20%': '33',
|
|
87
|
-
'19%': '30',
|
|
88
|
-
'18%': '2E',
|
|
89
|
-
'17%': '2B',
|
|
90
|
-
'16%': '29',
|
|
91
|
-
'15%': '26',
|
|
92
|
-
'14%': '24',
|
|
93
|
-
'13%': '21',
|
|
94
|
-
'12%': '1F',
|
|
95
|
-
'11%': '1C',
|
|
96
|
-
'10%': '1A',
|
|
97
|
-
'9%': '17',
|
|
98
|
-
'8%': '14',
|
|
99
|
-
'7%': '12',
|
|
100
|
-
'6%': '0F',
|
|
101
|
-
'5%': '0D',
|
|
102
|
-
'4%': '0A',
|
|
103
|
-
'3%': '08',
|
|
104
|
-
'2%': '05',
|
|
105
|
-
'1%': '03',
|
|
106
|
-
'0%': '00',
|
|
107
|
-
};
|
|
108
|
-
export default hexadecimalTransparency;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wrapper around 200ms buffered updates.
|
|
3
|
-
* @param action - The asynchronous action that causes update
|
|
4
|
-
* @param cb - Callback method called with true if 200ms exceeded in performing
|
|
5
|
-
* provided action and called with false after action completed
|
|
6
|
-
*/
|
|
7
|
-
const pendingStateUpdateHelper = async (
|
|
8
|
-
action: () => Promise<any>,
|
|
9
|
-
cb: (exceeded200ms: boolean) => void,
|
|
10
|
-
) => {
|
|
11
|
-
const pendingTimeout = setTimeout(() => {
|
|
12
|
-
cb(true);
|
|
13
|
-
}, 200);
|
|
14
|
-
await action();
|
|
15
|
-
clearTimeout(pendingTimeout);
|
|
16
|
-
cb(false);
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export default pendingStateUpdateHelper;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
********************************************
|
|
3
|
-
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
-
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
-
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
-
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
-
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
-
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
-
information visit https://appbuilder.agora.io.
|
|
10
|
-
*********************************************
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import React, {SetStateAction} from 'react';
|
|
14
|
-
import {createHook} from 'customization-implementation';
|
|
15
|
-
|
|
16
|
-
export interface currentFocus {
|
|
17
|
-
editName: boolean;
|
|
18
|
-
}
|
|
19
|
-
export interface FocusContextInterface {
|
|
20
|
-
currentFocus: currentFocus;
|
|
21
|
-
setFocus: React.Dispatch<SetStateAction<currentFocus>>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const FocusContext = React.createContext<FocusContextInterface>({
|
|
25
|
-
currentFocus: {editName: false},
|
|
26
|
-
setFocus: () => {},
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
interface FocusProviderProps {
|
|
30
|
-
value: FocusContextInterface;
|
|
31
|
-
children: React.ReactNode;
|
|
32
|
-
}
|
|
33
|
-
const FocusProvider = (props: FocusProviderProps) => {
|
|
34
|
-
return (
|
|
35
|
-
<FocusContext.Provider value={{...props.value}}>
|
|
36
|
-
{props.children}
|
|
37
|
-
</FocusContext.Provider>
|
|
38
|
-
);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* The Focus app state governs the chatinput and editname.
|
|
43
|
-
*/
|
|
44
|
-
const useFocus = createHook(FocusContext);
|
|
45
|
-
|
|
46
|
-
export {FocusProvider, useFocus};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
********************************************
|
|
3
|
-
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
-
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
-
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
-
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
-
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
-
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
-
information visit https://appbuilder.agora.io.
|
|
10
|
-
*********************************************
|
|
11
|
-
*/
|
|
12
|
-
import {useRender} from 'customization-api';
|
|
13
|
-
import {UidType} from '../../agora-rn-uikit';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Returns a function that checks whether the given uid is a active speaker and returns true/false
|
|
17
|
-
* @returns function
|
|
18
|
-
*/
|
|
19
|
-
function useIsActiveSpeaker() {
|
|
20
|
-
const {activeSpeaker, renderList} = useRender();
|
|
21
|
-
const isActiveSpeaker = (uid: UidType) => {
|
|
22
|
-
return renderList[uid].audio && activeSpeaker === uid;
|
|
23
|
-
};
|
|
24
|
-
return isActiveSpeaker;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export default useIsActiveSpeaker;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import {useContext} from 'react';
|
|
2
|
-
import {UidType} from '../../agora-rn-uikit';
|
|
3
|
-
import LiveStreamContext from '../components/livestream/LiveStreamContext';
|
|
4
|
-
import {RaiseHandValue} from '../components/livestream/Types';
|
|
5
|
-
|
|
6
|
-
const useIsHandRaised = () => {
|
|
7
|
-
const {raiseHandList} = useContext(LiveStreamContext);
|
|
8
|
-
const isHandRaised = (uid: UidType) => {
|
|
9
|
-
return raiseHandList[uid]?.raised === RaiseHandValue.TRUE;
|
|
10
|
-
};
|
|
11
|
-
return isHandRaised;
|
|
12
|
-
};
|
|
13
|
-
export default useIsHandRaised;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import {controlMessageEnum} from '../components/ChatContext';
|
|
2
|
-
import {useMeetingInfo} from '../components/meeting-info/useMeetingInfo';
|
|
3
|
-
import {UidType} from '../../agora-rn-uikit';
|
|
4
|
-
import events, {EventPersistLevel} from '../rtm-events-api';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Returns a function to end the screenshare for a remote user with the given uid.
|
|
8
|
-
*/
|
|
9
|
-
const useRemoteEndScreenshare = () => {
|
|
10
|
-
const {
|
|
11
|
-
data: {isHost},
|
|
12
|
-
} = useMeetingInfo();
|
|
13
|
-
return (uid: UidType) => {
|
|
14
|
-
if (isHost && uid) {
|
|
15
|
-
events.send(
|
|
16
|
-
controlMessageEnum.kickScreenshare,
|
|
17
|
-
'',
|
|
18
|
-
EventPersistLevel.LEVEL1,
|
|
19
|
-
uid,
|
|
20
|
-
);
|
|
21
|
-
} else {
|
|
22
|
-
console.error('A host can only remove the screenshare from the call.');
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
export default useRemoteEndScreenshare;
|