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
|
@@ -9,150 +9,58 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import React
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
import
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import {BtnTemplate, BtnTemplateInterface} from '../../agora-rn-uikit';
|
|
14
|
+
import {useRecording} from './recording/useRecording';
|
|
15
|
+
import {useString} from '../utils/useString';
|
|
16
|
+
import {
|
|
17
|
+
ButtonTemplateName,
|
|
18
|
+
useButtonTemplate,
|
|
19
|
+
} from '../utils/useButtonTemplate';
|
|
20
|
+
import Styles from '../components/styles';
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
mutation stopRecordingSession($passphrase: String!) {
|
|
30
|
-
stopRecordingSession(passphrase: $passphrase)
|
|
31
|
-
}
|
|
32
|
-
`;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Component to start / stop Agora cloud recording.
|
|
36
|
-
* Sends a control message to all users in the channel over RTM to indicate that
|
|
37
|
-
* Cloud recording has started/stopped.
|
|
38
|
-
*/
|
|
39
|
-
function usePrevious(value: any) {
|
|
40
|
-
const ref = useRef();
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
ref.current = value;
|
|
43
|
-
});
|
|
44
|
-
return ref.current;
|
|
22
|
+
export interface RecordingButtonProps {
|
|
23
|
+
buttonTemplateName?: ButtonTemplateName;
|
|
24
|
+
render?: (
|
|
25
|
+
onPress: () => void,
|
|
26
|
+
isRecordingActive: boolean,
|
|
27
|
+
buttonTemplateName?: ButtonTemplateName,
|
|
28
|
+
) => JSX.Element;
|
|
45
29
|
}
|
|
46
30
|
|
|
47
|
-
const Recording = (props:
|
|
48
|
-
const {
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
* The below check makes sure the notification is triggered
|
|
61
|
-
* only once. In native apps, this componenet is mounted everytime
|
|
62
|
-
* when chat icon is toggle, as Controls component is hidden and
|
|
63
|
-
* shown
|
|
64
|
-
*/
|
|
65
|
-
if (prevRecordingState) {
|
|
66
|
-
if (prevRecordingState?.recordingActive === recordingActive) return;
|
|
67
|
-
Toast.show({
|
|
68
|
-
type: 'success',
|
|
69
|
-
text1: recordingActive ? 'Recording Started' : 'Recording Stopped',
|
|
70
|
-
visibilityTime: 1000,
|
|
71
|
-
});
|
|
31
|
+
const Recording = (props: RecordingButtonProps) => {
|
|
32
|
+
const {startRecording, stopRecording, isRecordingActive} = useRecording();
|
|
33
|
+
//commented for v1 release
|
|
34
|
+
//const recordingButton = useString<boolean>('recordingButton');
|
|
35
|
+
const recordingButton = (recording: boolean) =>
|
|
36
|
+
recording ? 'Recording' : 'Record';
|
|
37
|
+
const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
|
|
38
|
+
const {buttonTemplateName = defaultTemplateValue} = props;
|
|
39
|
+
const onPress = () => {
|
|
40
|
+
if (!isRecordingActive) {
|
|
41
|
+
startRecording && startRecording();
|
|
42
|
+
} else {
|
|
43
|
+
stopRecording && stopRecording();
|
|
72
44
|
}
|
|
73
|
-
}
|
|
45
|
+
};
|
|
46
|
+
let btnTemplateProps: BtnTemplateInterface = {
|
|
47
|
+
name: isRecordingActive ? 'recordingActiveIcon' : 'recordingIcon',
|
|
48
|
+
onPress,
|
|
49
|
+
color: isRecordingActive ? '#FD0845' : $config.PRIMARY_COLOR,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
if (buttonTemplateName === ButtonTemplateName.topBar) {
|
|
53
|
+
btnTemplateProps.style = Styles.fullWidthButton as Object;
|
|
54
|
+
} else {
|
|
55
|
+
btnTemplateProps.btnText = recordingButton(isRecordingActive);
|
|
56
|
+
btnTemplateProps.style = Styles.localButton as Object;
|
|
57
|
+
}
|
|
74
58
|
|
|
75
|
-
return (
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
// If recording is not going on, start the recording by executing the graphql query
|
|
80
|
-
startRecordingQuery({
|
|
81
|
-
variables: {
|
|
82
|
-
passphrase: phrase,
|
|
83
|
-
secret:
|
|
84
|
-
rtcProps.encryption && rtcProps.encryption.key
|
|
85
|
-
? rtcProps.encryption.key
|
|
86
|
-
: '',
|
|
87
|
-
},
|
|
88
|
-
})
|
|
89
|
-
.then((res) => {
|
|
90
|
-
console.log(res.data);
|
|
91
|
-
if (res.data.startRecordingSession === 'success') {
|
|
92
|
-
// Once the backend sucessfuly starts recording,
|
|
93
|
-
// send a control message to everbody in the channel indicating that cloud recording is now active.
|
|
94
|
-
sendControlMessage(controlMessageEnum.cloudRecordingActive);
|
|
95
|
-
// set the local recording state to true to update the UI
|
|
96
|
-
setRecordingActive(true);
|
|
97
|
-
}
|
|
98
|
-
})
|
|
99
|
-
.catch((err) => {
|
|
100
|
-
console.log(err);
|
|
101
|
-
});
|
|
102
|
-
} else {
|
|
103
|
-
// If recording is already going on, stop the recording by executing the graphql query.
|
|
104
|
-
stopRecordingQuery({variables: {passphrase: phrase}})
|
|
105
|
-
.then((res) => {
|
|
106
|
-
console.log(res.data);
|
|
107
|
-
if (res.data.stopRecordingSession === 'success') {
|
|
108
|
-
// Once the backend sucessfuly stops recording,
|
|
109
|
-
// send a control message to everbody in the channel indicating that cloud recording is now inactive.
|
|
110
|
-
sendControlMessage(controlMessageEnum.cloudRecordingUnactive);
|
|
111
|
-
// set the local recording state to false to update the UI
|
|
112
|
-
setRecordingActive(false);
|
|
113
|
-
}
|
|
114
|
-
})
|
|
115
|
-
.catch((err) => {
|
|
116
|
-
console.log(err);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
}}>
|
|
120
|
-
<View style={[style.localButton, {borderColor: primaryColor}]}>
|
|
121
|
-
<ImageIcon
|
|
122
|
-
name={recordingActive ? 'recordingActiveIcon' : 'recordingIcon'}
|
|
123
|
-
style={[style.buttonIcon]}
|
|
124
|
-
color={recordingActive ? '#FD0845' : $config.PRIMARY_COLOR}
|
|
125
|
-
/>
|
|
126
|
-
</View>
|
|
127
|
-
<Text
|
|
128
|
-
style={{
|
|
129
|
-
textAlign: 'center',
|
|
130
|
-
marginTop: 5,
|
|
131
|
-
color: recordingActive ? '#FD0845' : $config.PRIMARY_COLOR,
|
|
132
|
-
}}>
|
|
133
|
-
{recordingActive ? 'Recording' : 'Record'}
|
|
134
|
-
</Text>
|
|
135
|
-
</TouchableOpacity>
|
|
59
|
+
return props?.render ? (
|
|
60
|
+
props.render(onPress, isRecordingActive, buttonTemplateName)
|
|
61
|
+
) : (
|
|
62
|
+
<BtnTemplate {...btnTemplateProps} />
|
|
136
63
|
);
|
|
137
64
|
};
|
|
138
65
|
|
|
139
|
-
const style = StyleSheet.create({
|
|
140
|
-
localButton: {
|
|
141
|
-
backgroundColor: $config.SECONDARY_FONT_COLOR,
|
|
142
|
-
borderRadius: 23,
|
|
143
|
-
borderColor: $config.PRIMARY_COLOR,
|
|
144
|
-
borderWidth: 0,
|
|
145
|
-
width: 40,
|
|
146
|
-
height: 40,
|
|
147
|
-
display: 'flex',
|
|
148
|
-
alignSelf: 'center',
|
|
149
|
-
alignItems: 'center',
|
|
150
|
-
justifyContent: 'center',
|
|
151
|
-
},
|
|
152
|
-
buttonIcon: {
|
|
153
|
-
width: '90%',
|
|
154
|
-
height: '90%',
|
|
155
|
-
},
|
|
156
|
-
});
|
|
157
|
-
|
|
158
66
|
export default Recording;
|
|
@@ -9,52 +9,48 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import React
|
|
12
|
+
import React from 'react';
|
|
13
13
|
import {StyleSheet} from 'react-native';
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
mutation mutePSTN($uid: Int!, $passphrase: String!, $mute: Boolean!) {
|
|
22
|
-
mutePSTN(uid: $uid, passphrase: $passphrase, mute: $mute) {
|
|
23
|
-
uid
|
|
24
|
-
mute
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
`;
|
|
14
|
+
import {controlMessageEnum} from '../components/ChatContext';
|
|
15
|
+
import {BtnTemplate, UidType} from '../../agora-rn-uikit';
|
|
16
|
+
import useIsPSTN from '../utils/isPSTNUser';
|
|
17
|
+
import useMutePSTN from '../utils/useMutePSTN';
|
|
18
|
+
import useSendControlMessage, {
|
|
19
|
+
CONTROL_MESSAGE_TYPE,
|
|
20
|
+
} from '../utils/useSendControlMessage';
|
|
28
21
|
|
|
22
|
+
export interface RemoteAudioMuteProps {
|
|
23
|
+
uid: UidType;
|
|
24
|
+
audio: boolean;
|
|
25
|
+
isHost: boolean;
|
|
26
|
+
}
|
|
29
27
|
/**
|
|
30
28
|
* Component to mute / unmute remote audio.
|
|
31
29
|
* Sends a control message to another user over RTM if the local user is a host.
|
|
32
30
|
* If the local user is not a host, it simply renders an image
|
|
33
31
|
*/
|
|
34
|
-
const RemoteAudioMute = (props: {
|
|
35
|
-
uid: number;
|
|
36
|
-
audio: boolean;
|
|
37
|
-
isHost: boolean;
|
|
38
|
-
}) => {
|
|
32
|
+
const RemoteAudioMute = (props: RemoteAudioMuteProps) => {
|
|
39
33
|
const {isHost = false} = props;
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const {phrase} = useParams<{phrase: string}>();
|
|
44
|
-
|
|
34
|
+
const sendCtrlMsgToUid = useSendControlMessage();
|
|
35
|
+
const isPSTN = useIsPSTN();
|
|
36
|
+
const mutePSTN = useMutePSTN();
|
|
45
37
|
return (
|
|
46
38
|
<BtnTemplate
|
|
47
39
|
disabled={!isHost}
|
|
48
40
|
onPress={() => {
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
if (isPSTN(props.uid)) {
|
|
42
|
+
try {
|
|
43
|
+
mutePSTN(props.uid);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
console.error('An error occurred while muting the PSTN user.');
|
|
46
|
+
}
|
|
47
|
+
} else {
|
|
48
|
+
sendCtrlMsgToUid(
|
|
49
|
+
CONTROL_MESSAGE_TYPE.controlMessageToUid,
|
|
50
|
+
controlMessageEnum.muteAudio,
|
|
51
|
+
props.uid,
|
|
52
|
+
);
|
|
53
|
+
}
|
|
58
54
|
}}
|
|
59
55
|
style={style.buttonIconMic}
|
|
60
56
|
name={props.audio ? 'mic' : 'micOff'}
|
|
@@ -9,20 +9,31 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import React
|
|
12
|
+
import React from 'react';
|
|
13
13
|
import {StyleSheet} from 'react-native';
|
|
14
|
-
import
|
|
15
|
-
import {BtnTemplate} from '../../agora-rn-uikit';
|
|
14
|
+
import {controlMessageEnum} from '../components/ChatContext';
|
|
15
|
+
import {BtnTemplate, UidType} from '../../agora-rn-uikit';
|
|
16
|
+
import useSendControlMessage, {
|
|
17
|
+
CONTROL_MESSAGE_TYPE,
|
|
18
|
+
} from '../utils/useSendControlMessage';
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
export interface RemoteEndCallProps {
|
|
21
|
+
uid: UidType;
|
|
22
|
+
isHost: boolean;
|
|
23
|
+
}
|
|
24
|
+
const RemoteEndCall = (props: RemoteEndCallProps) => {
|
|
25
|
+
const sendCtrlMsgToUid = useSendControlMessage();
|
|
19
26
|
return props.isHost && String(props.uid)[0] !== '1' ? (
|
|
20
27
|
<BtnTemplate
|
|
21
28
|
style={style.remoteButton}
|
|
22
29
|
onPress={() => {
|
|
23
|
-
|
|
30
|
+
sendCtrlMsgToUid(
|
|
31
|
+
CONTROL_MESSAGE_TYPE.controlMessageToUid,
|
|
32
|
+
controlMessageEnum.kickUser,
|
|
33
|
+
props.uid,
|
|
34
|
+
);
|
|
24
35
|
}}
|
|
25
|
-
color=
|
|
36
|
+
color="#FD0845"
|
|
26
37
|
name={'remoteEndCall'} // earlier was endCall, added remoteEndCall
|
|
27
38
|
/>
|
|
28
39
|
) : (
|
|
@@ -9,29 +9,37 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import React
|
|
12
|
+
import React from 'react';
|
|
13
13
|
import {StyleSheet} from 'react-native';
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import {
|
|
14
|
+
import {controlMessageEnum} from '../components/ChatContext';
|
|
15
|
+
import {BtnTemplate, UidType} from '../../agora-rn-uikit';
|
|
16
|
+
import useSendControlMessage, {
|
|
17
|
+
CONTROL_MESSAGE_TYPE,
|
|
18
|
+
} from '../utils/useSendControlMessage';
|
|
19
|
+
|
|
17
20
|
/**
|
|
18
21
|
* Component to mute / unmute remote video.
|
|
19
22
|
* Sends a control message to another user over RTM if the local user is a host.
|
|
20
23
|
* If the local user is not a host, it simply renders an image
|
|
21
24
|
*/
|
|
22
|
-
|
|
23
|
-
uid:
|
|
25
|
+
export interface RemoteVideoMuteProps {
|
|
26
|
+
uid: UidType;
|
|
24
27
|
video: boolean;
|
|
25
28
|
isHost: boolean;
|
|
26
|
-
}
|
|
29
|
+
}
|
|
30
|
+
const RemoteVideoMute = (props: RemoteVideoMuteProps) => {
|
|
27
31
|
const {isHost = false} = props;
|
|
28
|
-
const
|
|
32
|
+
const sendCtrlMsgToUid = useSendControlMessage();
|
|
29
33
|
|
|
30
34
|
return String(props.uid)[0] !== '1' ? (
|
|
31
35
|
<BtnTemplate
|
|
32
36
|
disabled={!isHost}
|
|
33
37
|
onPress={() => {
|
|
34
|
-
|
|
38
|
+
sendCtrlMsgToUid(
|
|
39
|
+
CONTROL_MESSAGE_TYPE.controlMessageToUid,
|
|
40
|
+
controlMessageEnum.muteVideo,
|
|
41
|
+
props.uid,
|
|
42
|
+
);
|
|
35
43
|
}}
|
|
36
44
|
style={style.buttonIconCam}
|
|
37
45
|
name={props.video ? 'videocam' : 'videocamOff'}
|
|
@@ -10,52 +10,52 @@
|
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import {PropsContext, UidType} from '../../agora-rn-uikit';
|
|
13
14
|
import React, {useContext} from 'react';
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
15
|
+
import {StyleSheet, View, Text} from 'react-native';
|
|
16
|
+
import {useString} from '../utils/useString';
|
|
16
17
|
/**
|
|
17
18
|
*
|
|
18
|
-
* @param uid - uid of the user
|
|
19
|
+
* @param uid - uid of the user
|
|
19
20
|
* @returns This component display overlay message "Screen sharing is active now" if user started sharing the screen.
|
|
20
|
-
* why its needed : To prevent screensharing tunneling effect
|
|
21
|
-
*
|
|
21
|
+
* why its needed : To prevent screensharing tunneling effect
|
|
22
|
+
*
|
|
22
23
|
*/
|
|
23
|
-
function ScreenShareNotice({ uid }
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
: null
|
|
24
|
+
function ScreenShareNotice({uid}: {uid: UidType}) {
|
|
25
|
+
//commented for v1 release
|
|
26
|
+
// const screensharingActiveOverlayLabel = useString(
|
|
27
|
+
// 'screensharingActiveOverlayLabel',
|
|
28
|
+
// )();
|
|
29
|
+
const screensharingActiveOverlayLabel = 'Your screen share is active.';
|
|
30
|
+
const {rtcProps} = useContext(PropsContext);
|
|
31
|
+
return uid === rtcProps?.screenShareUid ? (
|
|
32
|
+
<View style={styles.screenSharingMessageContainer}>
|
|
33
|
+
<Text style={styles.screensharingMessage}>
|
|
34
|
+
{screensharingActiveOverlayLabel}
|
|
35
|
+
</Text>
|
|
36
|
+
</View>
|
|
37
|
+
) : null;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
const styles = StyleSheet.create({
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
})
|
|
41
|
+
screenSharingMessageContainer: {
|
|
42
|
+
position: 'absolute',
|
|
43
|
+
top: 0,
|
|
44
|
+
left: 0,
|
|
45
|
+
right: 0,
|
|
46
|
+
bottom: 0,
|
|
47
|
+
width: '100%',
|
|
48
|
+
height: '100%',
|
|
49
|
+
justifyContent: 'center',
|
|
50
|
+
zIndex: 2,
|
|
51
|
+
backgroundColor: 'rgba(0,0,0,0.9)',
|
|
52
|
+
borderRadius: 15,
|
|
53
|
+
},
|
|
54
|
+
screensharingMessage: {
|
|
55
|
+
alignSelf: 'center',
|
|
56
|
+
fontSize: 20,
|
|
57
|
+
color: $config.SECONDARY_FONT_COLOR,
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
60
|
|
|
61
|
-
export default ScreenShareNotice;
|
|
61
|
+
export default ScreenShareNotice;
|
|
@@ -14,21 +14,17 @@ import {Picker, StyleSheet, View, Text} from 'react-native';
|
|
|
14
14
|
import {PropsContext, ClientRole} from '../../agora-rn-uikit';
|
|
15
15
|
import DeviceContext from '../components/DeviceContext';
|
|
16
16
|
import ColorContext from '../components/ColorContext';
|
|
17
|
+
import {useString} from '../utils/useString';
|
|
17
18
|
// import {dropdown} from '../../theme.json';
|
|
18
19
|
/**
|
|
19
20
|
* A component to diplay a dropdown and select a device.
|
|
20
21
|
* It will add the selected device to the device context.
|
|
21
22
|
*/
|
|
22
|
-
const
|
|
23
|
-
// Contexts
|
|
23
|
+
const useSelectDevice = (): [boolean, string] => {
|
|
24
24
|
const {rtcProps} = useContext(PropsContext);
|
|
25
25
|
const {primaryColor} = useContext(ColorContext);
|
|
26
|
-
const {selectedCam, setSelectedCam, selectedMic, setSelectedMic, deviceList} =
|
|
27
|
-
useContext(DeviceContext);
|
|
28
|
-
// States
|
|
29
|
-
const [isPickerDisabled, setPickerDisabled] = React.useState<boolean>(false);
|
|
30
26
|
const [btnTheme, setBtnTheme] = React.useState<string>(primaryColor);
|
|
31
|
-
|
|
27
|
+
const [isPickerDisabled, setPickerDisabled] = React.useState<boolean>(false);
|
|
32
28
|
React.useEffect(() => {
|
|
33
29
|
if ($config.EVENT_MODE && rtcProps.role === ClientRole.Audience) {
|
|
34
30
|
setPickerDisabled(true);
|
|
@@ -38,58 +34,105 @@ const SelectDevice = () => {
|
|
|
38
34
|
setBtnTheme(primaryColor);
|
|
39
35
|
}
|
|
40
36
|
}, [rtcProps?.role]);
|
|
37
|
+
return [isPickerDisabled, btnTheme];
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
interface SelectVideoDeviceProps {
|
|
41
|
+
render?: (
|
|
42
|
+
selectedCam: string,
|
|
43
|
+
setSelectedCam: (cam: string) => void,
|
|
44
|
+
deviceList: MediaDeviceInfo[],
|
|
45
|
+
isDisabled: boolean,
|
|
46
|
+
) => JSX.Element;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const SelectVideoDevice = (props: SelectVideoDeviceProps) => {
|
|
50
|
+
const {selectedCam, setSelectedCam, deviceList} = useContext(DeviceContext);
|
|
51
|
+
const [isPickerDisabled, btnTheme] = useSelectDevice();
|
|
52
|
+
return props?.render ? (
|
|
53
|
+
props.render(selectedCam, setSelectedCam, deviceList, isPickerDisabled)
|
|
54
|
+
) : (
|
|
55
|
+
<Picker
|
|
56
|
+
enabled={!isPickerDisabled}
|
|
57
|
+
selectedValue={selectedCam}
|
|
58
|
+
style={[{borderColor: btnTheme}, style.popupPicker]}
|
|
59
|
+
onValueChange={(itemValue) => setSelectedCam(itemValue)}>
|
|
60
|
+
{deviceList.map((device: any) => {
|
|
61
|
+
if (device.kind === 'videoinput') {
|
|
62
|
+
return (
|
|
63
|
+
<Picker.Item
|
|
64
|
+
label={device.label}
|
|
65
|
+
value={device.deviceId}
|
|
66
|
+
key={device.deviceId}
|
|
67
|
+
/>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
})}
|
|
71
|
+
</Picker>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
41
74
|
|
|
75
|
+
interface SelectAudioDeviceProps {
|
|
76
|
+
render?: (
|
|
77
|
+
selectedMic: string,
|
|
78
|
+
setSelectedMic: (mic: string) => void,
|
|
79
|
+
deviceList: MediaDeviceInfo[],
|
|
80
|
+
isDisabled: boolean,
|
|
81
|
+
) => JSX.Element;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const SelectAudioDevice = (props: SelectAudioDeviceProps) => {
|
|
85
|
+
const {selectedMic, setSelectedMic, deviceList} = useContext(DeviceContext);
|
|
86
|
+
const [isPickerDisabled, btnTheme] = useSelectDevice();
|
|
87
|
+
return props?.render ? (
|
|
88
|
+
props.render(selectedMic, setSelectedMic, deviceList, isPickerDisabled)
|
|
89
|
+
) : (
|
|
90
|
+
<Picker
|
|
91
|
+
enabled={!isPickerDisabled}
|
|
92
|
+
selectedValue={selectedMic}
|
|
93
|
+
style={[{borderColor: btnTheme}, style.popupPicker]}
|
|
94
|
+
onValueChange={(itemValue) => setSelectedMic(itemValue)}>
|
|
95
|
+
{deviceList.map((device: any) => {
|
|
96
|
+
if (device.kind === 'audioinput') {
|
|
97
|
+
return (
|
|
98
|
+
<Picker.Item
|
|
99
|
+
label={device.label}
|
|
100
|
+
value={device.deviceId}
|
|
101
|
+
key={device.deviceId}
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
})}
|
|
106
|
+
</Picker>
|
|
107
|
+
);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const SelectDevice = () => {
|
|
111
|
+
const [isPickerDisabled] = useSelectDevice();
|
|
112
|
+
//commented for v1 release
|
|
113
|
+
// const settingScreenInfoMessage = useString('settingScreenInfoMessage')();
|
|
114
|
+
const settingScreenInfoMessage =
|
|
115
|
+
'Video and Audio sharing is disabled for attendees. Raise hand to request permission to share.';
|
|
42
116
|
return (
|
|
43
117
|
<View>
|
|
44
118
|
<View style={{marginTop: 15}}></View>
|
|
45
119
|
<View>
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
selectedValue={selectedCam}
|
|
49
|
-
style={[{borderColor: btnTheme}, style.popupPicker]}
|
|
50
|
-
onValueChange={(itemValue) => setSelectedCam(itemValue)}>
|
|
51
|
-
{deviceList.map((device: any) => {
|
|
52
|
-
if (device.kind === 'videoinput') {
|
|
53
|
-
return (
|
|
54
|
-
<Picker.Item
|
|
55
|
-
label={device.label}
|
|
56
|
-
value={device.deviceId}
|
|
57
|
-
key={device.deviceId}
|
|
58
|
-
/>
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
})}
|
|
62
|
-
</Picker>
|
|
63
|
-
<Picker
|
|
64
|
-
enabled={!isPickerDisabled}
|
|
65
|
-
selectedValue={selectedMic}
|
|
66
|
-
style={[{borderColor: btnTheme}, style.popupPicker]}
|
|
67
|
-
onValueChange={(itemValue) => setSelectedMic(itemValue)}>
|
|
68
|
-
{deviceList.map((device: any) => {
|
|
69
|
-
if (device.kind === 'audioinput') {
|
|
70
|
-
return (
|
|
71
|
-
<Picker.Item
|
|
72
|
-
label={device.label}
|
|
73
|
-
value={device.deviceId}
|
|
74
|
-
key={device.deviceId}
|
|
75
|
-
/>
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
})}
|
|
79
|
-
</Picker>
|
|
120
|
+
<SelectVideoDevice />
|
|
121
|
+
<SelectAudioDevice />
|
|
80
122
|
</View>
|
|
81
123
|
<View style={{marginTop: 15}}></View>
|
|
82
124
|
{$config.EVENT_MODE && isPickerDisabled && (
|
|
83
125
|
<View>
|
|
84
|
-
<Text style={style.infoTxt}>
|
|
85
|
-
Video and Audio sharing is disabled for attendees. Raise hand to
|
|
86
|
-
request permission to share
|
|
87
|
-
</Text>
|
|
126
|
+
<Text style={style.infoTxt}>{settingScreenInfoMessage}</Text>
|
|
88
127
|
</View>
|
|
89
128
|
)}
|
|
90
129
|
</View>
|
|
91
130
|
);
|
|
92
131
|
};
|
|
132
|
+
export const SelectDeviceComponentsArray: [
|
|
133
|
+
(props: SelectVideoDeviceProps) => JSX.Element,
|
|
134
|
+
(props: SelectAudioDeviceProps) => JSX.Element,
|
|
135
|
+
] = [SelectVideoDevice, SelectAudioDevice];
|
|
93
136
|
|
|
94
137
|
const style = StyleSheet.create({
|
|
95
138
|
popupPicker: {
|