agora-appbuilder-core 2.2.0 → 2.3.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +7 -1
- package/package.json +4 -3
- package/template/Gulpfile.js +306 -87
- package/template/_gitignore +4 -1
- package/template/_package-lock.json +32186 -3078
- package/template/agora-rn-uikit/src/AgoraUIKit.tsx +23 -20
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +13 -8
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +25 -9
- package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +10 -0
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +11 -5
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +1 -1
- package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +2 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +2 -2
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -2
- package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +11 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +10 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +7 -6
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +6 -5
- package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +3 -3
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +13 -13
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +16 -13
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +28 -31
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +48 -35
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +11 -13
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +11 -13
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +18 -15
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +14 -2
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +19 -3
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +161 -44
- package/template/agora-rn-uikit/src/Utils/useLocalUid.ts +8 -0
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +8 -6
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +8 -6
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +18 -9
- package/template/agora-rn-uikit/src/index.ts +12 -12
- package/template/babel.config.js +17 -1
- package/template/bridge/rtc/webNg/RtcEngine.ts +34 -28
- package/template/bridge/rtc/webNg/SurfaceView.tsx +3 -2
- package/template/bridge/rtc/webNg/Types.ts +14 -0
- package/template/bridge/rtc/webNg/index.ts +5 -2
- package/template/bridge/rtm/web/index.ts +13 -7
- package/template/electron-builder.js +3 -2
- package/template/esbuild.rsdk.go +226 -0
- package/template/{src/subComponents/LayoutEnum.tsx → esbuildConfigTransform.js} +1 -5
- package/template/fpe-api/components.ts +42 -0
- package/template/fpe-api/context.ts +45 -0
- package/template/fpe-api/fpeEvents.ts +9 -0
- package/template/fpe-api/index.ts +21 -0
- package/template/fpe-api/install.ts +128 -0
- package/template/fpe-api/typeDefinition.ts +143 -0
- package/template/fpe-api/useFpe.tsx +35 -0
- package/template/fpe-api/utils.ts +62 -0
- package/template/fpe-implementation/createHook.ts +33 -0
- package/template/fpe-implementation/dummyFpe.ts +17 -0
- package/template/fpe-implementation/index.ts +1 -0
- package/template/fpe-todo.txt +14 -0
- package/template/fpe.config.js +29 -0
- package/template/global.d.ts +4 -0
- package/template/index.rsdk.tsx +27 -0
- package/template/index.wsdk.tsx +27 -0
- package/template/package.json +28 -12
- package/template/react-native-toast-message/src/index.js +9 -10
- package/template/react-native-toast-message/src/index.wsdk.js +419 -0
- package/template/src/App.tsx +97 -65
- package/template/src/AppWrapper.tsx +79 -0
- package/template/src/SDKAppWrapper.tsx +67 -0
- package/template/src/atoms/PrimaryButton.tsx +14 -8
- package/template/src/atoms/TextInput.tsx +13 -5
- package/template/src/components/Chat.tsx +171 -139
- package/template/src/components/ChatContext.ts +14 -22
- package/template/src/components/ColorConfigure.tsx +2 -2
- package/template/src/components/Controls.native.tsx +72 -62
- package/template/src/components/Controls.tsx +90 -69
- package/template/src/components/DeviceConfigure.tsx +1 -1
- package/template/src/components/DeviceContext.tsx +14 -7
- package/template/src/components/GraphQLProvider.tsx +9 -2
- package/template/src/components/GridVideo.tsx +20 -159
- package/template/src/components/HostControlView.tsx +54 -15
- package/template/src/components/Navbar.tsx +408 -157
- package/template/src/components/NetworkQualityContext.tsx +29 -22
- package/template/src/components/ParticipantsView.tsx +91 -115
- package/template/src/components/PinnedVideo.tsx +41 -188
- package/template/src/components/Precall.native.tsx +131 -97
- package/template/src/components/Precall.tsx +193 -158
- package/template/src/components/RTMConfigure.tsx +328 -416
- package/template/src/components/Router.sdk.ts +20 -0
- package/template/src/components/SessionContext.tsx +6 -3
- package/template/src/components/Settings.native.tsx +3 -0
- package/template/src/components/Settings.tsx +65 -31
- package/template/src/components/SettingsView.tsx +14 -8
- package/template/src/components/Share.tsx +188 -220
- package/template/src/components/StorageContext.tsx +5 -5
- package/template/src/components/StoreToken.tsx +5 -1
- package/template/src/components/chat-messages/useChatMessages.tsx +208 -0
- package/template/src/components/chat-notification/useChatNotification.tsx +78 -0
- package/template/src/components/chat-ui/useChatUIControl.tsx +66 -0
- package/template/src/components/common/Error.tsx +54 -0
- package/template/src/components/common/Logo.tsx +35 -0
- package/template/src/components/common/index.tsx +8 -0
- package/template/src/components/contexts/LiveStreamDataContext.tsx +79 -0
- package/template/src/components/contexts/ScreenShareContext.tsx +47 -0
- package/template/src/components/contexts/WhiteboardContext.tsx +59 -0
- package/template/src/components/dimension/DimensionContext.ts +27 -0
- package/template/src/components/dimension/DimensionProvider.tsx +34 -0
- package/template/src/components/livestream/LiveStreamContext.tsx +293 -272
- package/template/src/components/livestream/Types.ts +26 -7
- package/template/src/components/livestream/index.ts +13 -2
- package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -1
- package/template/src/components/meeting-info/useMeetingInfo.tsx +63 -0
- package/template/src/components/meeting-info/useSetMeetingInfo.tsx +38 -0
- package/template/src/components/participants/AllAudienceParticipants.tsx +26 -21
- package/template/src/components/participants/AllHostParticipants.tsx +41 -53
- package/template/src/components/participants/MeParticipant.tsx +9 -10
- package/template/src/components/participants/ParticipantName.tsx +2 -1
- package/template/src/components/participants/RemoteParticipants.tsx +3 -3
- package/template/src/components/precall/LocalMute.native.tsx +91 -0
- package/template/src/components/precall/LocalMute.tsx +90 -0
- package/template/src/components/precall/VideoPreview.native.tsx +35 -0
- package/template/src/components/precall/VideoPreview.tsx +33 -0
- package/template/src/components/precall/index.tsx +28 -0
- package/template/src/components/precall/joinCallBtn.native.tsx +69 -0
- package/template/src/components/precall/joinCallBtn.tsx +91 -0
- package/template/src/components/precall/meetingTitle.tsx +26 -0
- package/template/src/components/precall/selectDevice.tsx +46 -0
- package/template/src/components/precall/textInput.tsx +43 -0
- package/template/src/components/precall/usePreCall.tsx +41 -0
- package/template/src/components/styles.ts +20 -3
- package/template/src/components/useShareLink.tsx +239 -0
- package/template/src/components/useWakeLock.tsx +3 -3
- package/template/src/custom-events/CustomEvents.ts +221 -0
- package/template/src/custom-events/index.tsx +4 -0
- package/template/src/custom-events/types.ts +51 -0
- package/template/src/language/default-labels/commonLabels.ts +21 -0
- package/template/src/language/default-labels/createScreenLabels.ts +22 -0
- package/template/src/language/default-labels/index.ts +38 -0
- package/template/src/language/default-labels/joinScreenLabels.ts +13 -0
- package/template/src/language/default-labels/precallScreenLabels.ts +33 -0
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +44 -0
- package/template/src/language/default-labels/videoCallScreenLabels.ts +189 -0
- package/template/src/language/i18nTypes.ts +10 -0
- package/template/src/language/index.ts +18 -0
- package/template/src/language/useLanguage.tsx +92 -0
- package/template/src/pages/Authenticate.tsx +21 -15
- package/template/src/pages/Create.tsx +176 -159
- package/template/src/pages/Join.tsx +44 -32
- package/template/src/pages/VideoCall.tsx +134 -406
- package/template/src/pages/create/useCreate.tsx +37 -0
- package/template/src/pages/video-call/CustomLayout.ts +17 -0
- package/template/src/pages/video-call/CustomUserContextHolder.tsx +12 -0
- package/template/src/pages/video-call/DefaultLayouts.ts +65 -0
- package/template/src/pages/video-call/NameWithMicStatus.tsx +62 -0
- package/template/src/pages/video-call/RenderComponent.tsx +52 -0
- package/template/src/pages/video-call/VideoCallScreen.tsx +191 -0
- package/template/src/pages/video-call/VideoComponent.tsx +34 -0
- package/template/src/pages/video-call/VideoRenderer.tsx +86 -0
- package/template/src/pages/video-call/index.ts +20 -0
- package/template/src/rtm/RTMEngine.ts +58 -0
- package/template/src/rtm/utils.ts +44 -0
- package/template/src/rtm-events/EventUtils.ts +267 -0
- package/template/src/rtm-events/EventsQueue.ts +38 -0
- package/template/src/rtm-events/constants.ts +40 -0
- package/template/src/rtm-events/index.tsx +8 -0
- package/template/src/rtm-events/types.ts +7 -0
- package/template/src/subComponents/ChatBubble.tsx +18 -11
- package/template/src/subComponents/ChatContainer.tsx +79 -30
- package/template/src/subComponents/ChatInput.tsx +146 -70
- package/template/src/subComponents/CopyJoinInfo.tsx +52 -67
- package/template/src/subComponents/Error.tsx +35 -24
- package/template/src/subComponents/LanguageSelector.tsx +85 -0
- package/template/src/subComponents/LayoutIconDropdown.native.tsx +163 -0
- package/template/src/subComponents/LayoutIconDropdown.tsx +198 -0
- package/template/src/subComponents/LocalAudioMute.tsx +52 -30
- package/template/src/subComponents/LocalEndCall.tsx +52 -0
- package/template/src/subComponents/LocalSwitchCamera.tsx +61 -0
- package/template/src/subComponents/LocalVideoMute.tsx +48 -30
- package/template/src/subComponents/LogoutButton.tsx +20 -5
- package/template/src/subComponents/NetworkQualityPill.tsx +43 -13
- package/template/src/subComponents/OpenInNativeButton.tsx +3 -2
- package/template/src/subComponents/Recording.tsx +46 -138
- package/template/src/subComponents/RemoteAudioMute.tsx +30 -34
- package/template/src/subComponents/RemoteEndCall.tsx +18 -7
- package/template/src/subComponents/RemoteVideoMute.tsx +17 -9
- package/template/src/subComponents/ScreenShareNotice.tsx +40 -40
- package/template/src/subComponents/SelectDevice.tsx +88 -45
- package/template/src/subComponents/SelectOAuth.tsx +30 -6
- package/template/src/subComponents/SidePanelButtons.ts +39 -0
- package/template/src/subComponents/TextWithTooltip.native.tsx +2 -1
- package/template/src/subComponents/TextWithTooltip.tsx +15 -20
- package/template/src/subComponents/chat/ChatParticipants.tsx +31 -32
- package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +7 -3
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -18
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +22 -8
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +12 -7
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -27
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +23 -26
- package/template/src/subComponents/livestream/index.ts +10 -2
- package/template/src/subComponents/recording/useRecording.tsx +209 -0
- package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +64 -0
- package/template/src/subComponents/screenshare/ScreenshareButton.native.tsx +18 -0
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +61 -31
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +57 -52
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +102 -143
- package/template/src/subComponents/screenshare/useScreenshare.tsx +29 -0
- package/template/src/subComponents/toastConfig.tsx +25 -20
- package/template/src/utils/IsAttendeeUser.ts +34 -0
- package/template/src/utils/SdkEvents.ts +68 -0
- package/template/src/utils/common.tsx +40 -0
- package/template/src/utils/eventEmitter.ts +29 -0
- package/template/src/utils/getMeetingInvite.ts +30 -0
- package/template/src/utils/index.tsx +11 -2
- package/template/src/utils/isAudioEnabled.ts +29 -0
- package/template/src/utils/isHostUser.ts +33 -0
- package/template/src/utils/isMobileOrTablet.native.ts +5 -0
- package/template/src/utils/{mobileWebTest.tsx → isMobileOrTablet.ts} +5 -2
- package/template/src/utils/isPSTNUser.ts +30 -0
- package/template/src/utils/isSDK.sdk.ts +5 -0
- package/template/src/utils/isSDK.ts +5 -0
- package/template/src/utils/isScreenShareUser.ts +31 -0
- package/template/src/utils/isVideoEnabled.ts +29 -0
- package/template/src/utils/useButtonTemplate.tsx +43 -0
- package/template/src/utils/useCreateMeeting.ts +74 -0
- package/template/src/utils/useGetLiveStreamingRequests.ts +24 -0
- package/template/src/utils/useGetMeetingPhrase.ts +68 -0
- package/template/src/utils/useGetName.ts +20 -0
- package/template/src/{subComponents/screenshare/ScreenshareContext.tsx → utils/useGroupMessages.ts} +10 -7
- package/template/src/utils/useJoinMeeting.ts +120 -0
- package/template/src/utils/useLayout.tsx +40 -0
- package/template/src/utils/useLiveStreamingUids.ts +26 -0
- package/template/src/utils/useMutePSTN.ts +43 -0
- package/template/src/utils/useMuteToggleLocal.ts +109 -0
- package/template/src/utils/useNavParams.ts +6 -0
- package/template/src/utils/useNavigateTo.ts +8 -0
- package/template/src/utils/usePrivateMessages.ts +33 -0
- package/template/src/utils/useRemoteEndCall.ts +27 -0
- package/template/src/utils/useRemoteMute.ts +64 -0
- package/template/src/utils/useSendControlMessage.ts +51 -0
- package/template/src/utils/useSendMessage.ts +40 -0
- package/template/src/utils/useSetName.ts +20 -0
- package/template/src/utils/useSetUnreadMessageCount.ts +43 -0
- package/template/src/utils/useSidePanel.tsx +41 -0
- package/template/src/utils/useString.ts +61 -0
- package/template/src/utils/useUnreadMessageCount.ts +50 -0
- package/template/src/utils/useUserList.ts +26 -0
- package/template/tsconfig.json +4 -4
- package/template/tsconfig_fpeApi.json +103 -0
- package/template/tsconfig_rsdk_index.json +105 -0
- package/template/tsconfig_wsdk_index.json +104 -0
- package/template/webpack.commons.js +40 -16
- package/template/webpack.main.config.js +2 -1
- package/template/webpack.renderer.config.js +1 -1
- package/template/webpack.rsdk.config.js +33 -0
- package/template/webpack.ts.config.js +89 -0
- package/template/webpack.web.config.js +8 -1
- package/template/webpack.wsdk.config.js +34 -0
- package/template/agora-rn-uikit/.git/HEAD +0 -1
- package/template/agora-rn-uikit/.git/config +0 -16
- package/template/agora-rn-uikit/.git/description +0 -1
- package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
- package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
- package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -173
- package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
- package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
- package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
- package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
- package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
- package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
- package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
- package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
- package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
- package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
- package/template/agora-rn-uikit/.git/index +0 -0
- package/template/agora-rn-uikit/.git/info/exclude +0 -6
- package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
- package/template/agora-rn-uikit/.git/logs/refs/heads/ab-dev-auto +0 -1
- package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
- package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
- package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.idx +0 -0
- package/template/agora-rn-uikit/.git/objects/pack/pack-0061d00cd98162a329a32b537488a35d0abeb069.pack +0 -0
- package/template/agora-rn-uikit/.git/packed-refs +0 -24
- package/template/agora-rn-uikit/.git/refs/heads/ab-dev-auto +0 -1
- package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
- package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
- package/template/agora-rn-uikit/.gitignore +0 -63
- package/template/agora-rn-uikit/package-lock.json +0 -7612
- package/template/agora-rn-uikit/src/Contexts/MaxUidContext.tsx +0 -7
- package/template/agora-rn-uikit/src/Contexts/MinUidContext.tsx +0 -8
- package/template/package-lock.json +0 -22923
- package/template/react-native-toast-message/.gitignore +0 -5
- package/template/react-native-toast-message/.npmignore +0 -5
- package/template/react-native-toast-message/package-lock.json +0 -10553
- package/template/src/.DS_Store +0 -0
- package/template/src/components/participants/context/ParticipantContext.tsx +0 -97
- package/template/src/subComponents/.DS_Store +0 -0
- package/template/src/subComponents/ScreenshareButton.tsx +0 -257
- package/template/src/subComponents/SwitchCamera.tsx +0 -35
- package/template/src/utils/hasBrandLogo.tsx +0 -3
- package/template/src/utils/mobileWebTest.native.tsx +0 -5
- package/template/src/utils/shouldAuthenticate.tsx +0 -7
|
@@ -3,8 +3,7 @@ import {ScrollView, View} from 'react-native';
|
|
|
3
3
|
import RtcConfigure from './RtcConfigure';
|
|
4
4
|
import MaxVideoView from './Views/MaxVideoView';
|
|
5
5
|
import MinVideoView from './Views/MinVideoView';
|
|
6
|
-
import {
|
|
7
|
-
import {MaxUidConsumer} from './Contexts/MaxUidContext';
|
|
6
|
+
import {RenderConsumer} from './Contexts/RenderContext';
|
|
8
7
|
import {PropsProvider, PropsInterface} from './Contexts/PropsContext';
|
|
9
8
|
|
|
10
9
|
import styles from './Style';
|
|
@@ -17,24 +16,28 @@ const AgoraUIKit: React.FC<PropsInterface> = (props) => {
|
|
|
17
16
|
<PropsProvider value={props}>
|
|
18
17
|
<View style={{backgroundColor: '#000', flex: 1}}>
|
|
19
18
|
<RtcConfigure>
|
|
20
|
-
<
|
|
21
|
-
{(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
19
|
+
<RenderConsumer>
|
|
20
|
+
{({renderList, renderPosition}) => {
|
|
21
|
+
const [maxUid, ...minUids] = renderPosition;
|
|
22
|
+
return (
|
|
23
|
+
<>
|
|
24
|
+
<MaxVideoView user={renderList[maxUid]} key={maxUid} />
|
|
25
|
+
<ScrollView
|
|
26
|
+
showsHorizontalScrollIndicator={false}
|
|
27
|
+
horizontal={true}
|
|
28
|
+
style={styles.minContainer}>
|
|
29
|
+
{minUids.map((minUid) => (
|
|
30
|
+
<MinVideoView
|
|
31
|
+
showOverlay
|
|
32
|
+
user={renderList[minUid]}
|
|
33
|
+
key={minUid}
|
|
34
|
+
/>
|
|
35
|
+
))}
|
|
36
|
+
</ScrollView>
|
|
37
|
+
</>
|
|
38
|
+
);
|
|
39
|
+
}}
|
|
40
|
+
</RenderConsumer>
|
|
38
41
|
<LocalControls />
|
|
39
42
|
</RtcConfigure>
|
|
40
43
|
</View>
|
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import React, {useContext, createContext} from 'react';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
2
|
+
import RenderContext from './RenderContext';
|
|
3
|
+
import {RenderInterface} from './PropsContext';
|
|
4
|
+
import {UidType} from './RtcContext';
|
|
5
5
|
|
|
6
|
-
export const LocalContext = createContext<
|
|
6
|
+
export const LocalContext = createContext<RenderInterface>(
|
|
7
|
+
{} as RenderInterface,
|
|
8
|
+
);
|
|
7
9
|
export const LocalProvider = LocalContext.Provider;
|
|
8
10
|
export const LocalConsumer = LocalContext.Consumer;
|
|
9
11
|
|
|
10
12
|
interface LocalUserContextInterface {
|
|
11
13
|
children: React.ReactNode;
|
|
14
|
+
localUid: UidType;
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
const LocalUserContext: React.FC<LocalUserContextInterface> = (props) => {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
const {renderList} = useContext(RenderContext);
|
|
19
|
+
let localUser: RenderInterface = renderList[props?.localUid];
|
|
20
|
+
if (!localUser) {
|
|
21
|
+
console.error("Error: we couldn't find the local user data");
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
19
24
|
return (
|
|
20
25
|
<LocalContext.Provider value={localUser}>
|
|
21
26
|
{props.children}
|
|
@@ -3,6 +3,7 @@ import {StyleProp, ViewStyle} from 'react-native';
|
|
|
3
3
|
import {RtcEngineEvents} from 'react-native-agora/lib/typescript/src/common/RtcEvents';
|
|
4
4
|
import {EncryptionMode} from 'react-native-agora';
|
|
5
5
|
import {VideoProfile} from '../Utils/quality';
|
|
6
|
+
import {UidType} from './RtcContext';
|
|
6
7
|
|
|
7
8
|
/* User role for live streaming mode */
|
|
8
9
|
export enum ClientRole {
|
|
@@ -34,13 +35,20 @@ export enum ToggleState {
|
|
|
34
35
|
export const toggleHelper = (state: ToggleState) =>
|
|
35
36
|
state === ToggleState.enabled ? ToggleState.disabled : ToggleState.enabled;
|
|
36
37
|
|
|
37
|
-
export interface
|
|
38
|
-
|
|
39
|
-
uid: number | string;
|
|
38
|
+
export interface DefaultRenderInterface {
|
|
39
|
+
uid: UidType;
|
|
40
40
|
audio: ToggleState;
|
|
41
41
|
video: ToggleState;
|
|
42
42
|
streamType: 'high' | 'low';
|
|
43
|
+
type: 'rtc';
|
|
43
44
|
}
|
|
45
|
+
export interface CustomRenderInterface<T> {
|
|
46
|
+
type: T extends DefaultRenderInterface['type'] ? never : T;
|
|
47
|
+
}
|
|
48
|
+
interface ExtenedRenderInterface extends CustomRenderInterface<string> {
|
|
49
|
+
[key: string]: any;
|
|
50
|
+
}
|
|
51
|
+
export type RenderInterface = DefaultRenderInterface | ExtenedRenderInterface;
|
|
44
52
|
|
|
45
53
|
interface remoteBtnStylesInterface {
|
|
46
54
|
muteRemoteAudio?: StyleProp<ViewStyle>;
|
|
@@ -78,7 +86,7 @@ export enum DualStreamMode {
|
|
|
78
86
|
export interface RtcPropsInterface {
|
|
79
87
|
appId: string;
|
|
80
88
|
channel: string;
|
|
81
|
-
uid?:
|
|
89
|
+
uid?: UidType;
|
|
82
90
|
token?: string | null;
|
|
83
91
|
dual?: boolean | null;
|
|
84
92
|
profile?: VideoProfile;
|
|
@@ -92,7 +100,12 @@ export interface RtcPropsInterface {
|
|
|
92
100
|
| EncryptionMode.AES256XTS
|
|
93
101
|
| EncryptionMode.AES128ECB;
|
|
94
102
|
};
|
|
95
|
-
|
|
103
|
+
// commented for v1 release
|
|
104
|
+
// lifecycle?: {
|
|
105
|
+
// useBeforeJoin?: () => () => Promise<void>;
|
|
106
|
+
// useBeforeCreate?: () => () => Promise<void>;
|
|
107
|
+
// };
|
|
108
|
+
geoFencing?: boolean;
|
|
96
109
|
}
|
|
97
110
|
|
|
98
111
|
export interface CallbacksInterface {
|
|
@@ -102,14 +115,17 @@ export interface CallbacksInterface {
|
|
|
102
115
|
UpdateDualStreamMode(mode: DualStreamMode): void;
|
|
103
116
|
UserJoined: RtcEngineEvents['UserJoined'];
|
|
104
117
|
UserOffline: RtcEngineEvents['UserOffline'];
|
|
105
|
-
SwapVideo(
|
|
106
|
-
|
|
107
|
-
|
|
118
|
+
SwapVideo(uid: UidType): void;
|
|
119
|
+
DequeVideo(uid: UidType): void;
|
|
120
|
+
UserMuteRemoteAudio(uid: UidType, muted: RenderInterface['audio']): void;
|
|
121
|
+
UserMuteRemoteVideo(uid: UidType, muted: RenderInterface['video']): void;
|
|
108
122
|
LocalMuteAudio(muted: ToggleState): void;
|
|
109
123
|
LocalMuteVideo(muted: ToggleState): void;
|
|
110
124
|
RemoteAudioStateChanged: RtcEngineEvents['RemoteAudioStateChanged'];
|
|
111
125
|
RemoteVideoStateChanged: RtcEngineEvents['RemoteVideoStateChanged'];
|
|
112
126
|
JoinChannelSuccess: RtcEngineEvents['JoinChannelSuccess'];
|
|
127
|
+
UpdateRenderList(uid: UidType, user: Partial<RenderInterface>): void;
|
|
128
|
+
AddCustomContent(uid: UidType, data: any): void;
|
|
113
129
|
}
|
|
114
130
|
|
|
115
131
|
export type CustomCallbacksInterface = CallbacksInterface;
|
|
@@ -125,7 +141,7 @@ const initialValue: PropsInterface = {
|
|
|
125
141
|
rtcProps: {
|
|
126
142
|
appId: '',
|
|
127
143
|
channel: '',
|
|
128
|
-
geoFencing: true
|
|
144
|
+
geoFencing: true,
|
|
129
145
|
},
|
|
130
146
|
};
|
|
131
147
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {RenderStateInterface} from './RtcContext';
|
|
3
|
+
|
|
4
|
+
const RenderContext = React.createContext<RenderStateInterface>(
|
|
5
|
+
{} as RenderStateInterface,
|
|
6
|
+
);
|
|
7
|
+
|
|
8
|
+
export const RenderProvider = RenderContext.Provider;
|
|
9
|
+
export const RenderConsumer = RenderContext.Consumer;
|
|
10
|
+
export default RenderContext;
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import {CallbacksInterface} from './PropsContext';
|
|
3
3
|
import RtcEngine from 'react-native-agora';
|
|
4
|
-
import type {DualStreamMode,
|
|
4
|
+
import type {DualStreamMode, RenderInterface} from './PropsContext';
|
|
5
5
|
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
export type UidType = number;
|
|
7
|
+
|
|
8
|
+
export interface RenderObjectInterface {
|
|
9
|
+
[key: number]: RenderInterface;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface RenderStateInterface {
|
|
13
|
+
renderList: RenderObjectInterface;
|
|
14
|
+
renderPosition: Array<UidType>;
|
|
9
15
|
}
|
|
10
16
|
|
|
11
17
|
export interface ActionInterface<T extends keyof CallbacksInterface> {
|
|
@@ -28,7 +28,7 @@ interface BtnTemplateInterfaceWithName extends BtnTemplateBasicInterface {
|
|
|
28
28
|
interface BtnTemplateInterfaceWithIcon extends BtnTemplateBasicInterface {
|
|
29
29
|
icon?: any;
|
|
30
30
|
}
|
|
31
|
-
type BtnTemplateInterface = Either<
|
|
31
|
+
export type BtnTemplateInterface = Either<
|
|
32
32
|
BtnTemplateInterfaceWithIcon,
|
|
33
33
|
BtnTemplateInterfaceWithName
|
|
34
34
|
>;
|
|
@@ -62,7 +62,11 @@ const BtnTemplate: React.FC<BtnTemplateInterface> = (props) => {
|
|
|
62
62
|
tintColor: disabled ? 'grey' : props.color || theme || '#fff',
|
|
63
63
|
}}
|
|
64
64
|
resizeMode={'contain'}
|
|
65
|
-
source={
|
|
65
|
+
source={
|
|
66
|
+
props.name && icons[props.name]
|
|
67
|
+
? {uri: icons[props.name]}
|
|
68
|
+
: props.icon
|
|
69
|
+
}
|
|
66
70
|
/>
|
|
67
71
|
</View>
|
|
68
72
|
<Text
|
|
@@ -49,7 +49,7 @@ const ImageIcon: React.FC<ImageIconInterface> = (props) => {
|
|
|
49
49
|
props.style as object,
|
|
50
50
|
]}
|
|
51
51
|
resizeMode={'contain'}
|
|
52
|
-
source={
|
|
52
|
+
source={props.name && icons[props.name] ? {uri: icons[props.name] } : props.icon}
|
|
53
53
|
/>
|
|
54
54
|
);
|
|
55
55
|
};
|
|
@@ -4,7 +4,11 @@ import RtcContext from '../../Contexts/RtcContext';
|
|
|
4
4
|
import BtnTemplate from '../BtnTemplate';
|
|
5
5
|
import styles from '../../Style';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
interface EndCallProps{
|
|
8
|
+
btnText?: string
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function EndCall(props?: EndCallProps) {
|
|
8
12
|
const {styleProps} = useContext(PropsContext);
|
|
9
13
|
const {localBtnStyles} = styleProps || {};
|
|
10
14
|
const {endCall} = localBtnStyles || {};
|
|
@@ -13,7 +17,7 @@ function EndCall() {
|
|
|
13
17
|
return (
|
|
14
18
|
<BtnTemplate
|
|
15
19
|
name={'callEnd'}
|
|
16
|
-
btnText={'Hang Up'}
|
|
20
|
+
btnText={props?.btnText || 'Hang Up'}
|
|
17
21
|
color='#FD0845'
|
|
18
22
|
style={{...styles.endCall, ...(endCall as object)}}
|
|
19
23
|
onPress={() =>
|
|
@@ -5,11 +5,11 @@ import BtnTemplate from '../BtnTemplate';
|
|
|
5
5
|
import styles from '../../Style';
|
|
6
6
|
import {LocalContext} from '../../Contexts/LocalUserContext';
|
|
7
7
|
|
|
8
|
-
interface
|
|
8
|
+
interface LocalAudioMuteProps {
|
|
9
9
|
btnText?: string;
|
|
10
10
|
variant?: 'outlined' | 'text';
|
|
11
11
|
}
|
|
12
|
-
function LocalAudioMute(props:
|
|
12
|
+
function LocalAudioMute(props: LocalAudioMuteProps) {
|
|
13
13
|
const {btnText = 'Audio', variant = 'Outlined'} = props;
|
|
14
14
|
const {styleProps} = useContext(PropsContext);
|
|
15
15
|
const {localBtnStyles, remoteBtnStyles} = styleProps || {};
|
|
@@ -5,12 +5,12 @@ import BtnTemplate from '../BtnTemplate';
|
|
|
5
5
|
import styles from '../../Style';
|
|
6
6
|
import {LocalContext} from '../../Contexts/LocalUserContext';
|
|
7
7
|
|
|
8
|
-
interface
|
|
8
|
+
interface LocalVideoMuteProps {
|
|
9
9
|
btnText?: string;
|
|
10
10
|
variant?: 'outlined' | 'text';
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
function LocalVideoMute(props:
|
|
13
|
+
function LocalVideoMute(props: LocalVideoMuteProps) {
|
|
14
14
|
const {btnText = 'Video', variant = 'Outlined'} = props;
|
|
15
15
|
const {styleProps} = useContext(PropsContext);
|
|
16
16
|
const {localBtnStyles, remoteBtnStyles} = styleProps || {};
|
|
@@ -5,7 +5,11 @@ import RtcContext from '../../Contexts/RtcContext';
|
|
|
5
5
|
import BtnTemplate from '../BtnTemplate';
|
|
6
6
|
import styles from '../../Style';
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
interface Props{
|
|
9
|
+
btnText?: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function SwitchCamera(props?: Props) {
|
|
9
13
|
const {styleProps, callbacks} = useContext(PropsContext);
|
|
10
14
|
const {localBtnStyles} = styleProps || {};
|
|
11
15
|
const {switchCamera} = localBtnStyles || {};
|
|
@@ -15,7 +19,7 @@ function SwitchCamera() {
|
|
|
15
19
|
<BtnTemplate
|
|
16
20
|
name={'switchCamera'}
|
|
17
21
|
style={{...styles.localBtn, ...(switchCamera as object)}}
|
|
18
|
-
btnText={'Switch'}
|
|
22
|
+
btnText={props?.btnText ||'Switch'}
|
|
19
23
|
disabled={local.video === ToggleState.enabled ? false : true}
|
|
20
24
|
onPress={() => {
|
|
21
25
|
RtcEngine.switchCamera();
|
|
@@ -6,9 +6,10 @@ import LocalAudioMute from './Local/LocalAudioMute';
|
|
|
6
6
|
import LocalVideoMute from './Local/LocalVideoMute';
|
|
7
7
|
import SwitchCamera from './Local/SwitchCamera';
|
|
8
8
|
import RemoteControls from './RemoteControls';
|
|
9
|
-
import {
|
|
9
|
+
import {RenderConsumer} from '../Contexts/RenderContext';
|
|
10
10
|
import PropsContext from '../Contexts/PropsContext';
|
|
11
11
|
import LocalUserContextComponent from '../Contexts/LocalUserContext';
|
|
12
|
+
import useLocalUid from '../Utils/useLocalUid';
|
|
12
13
|
|
|
13
14
|
interface ControlsPropsInterface {
|
|
14
15
|
showButton?: boolean;
|
|
@@ -16,10 +17,11 @@ interface ControlsPropsInterface {
|
|
|
16
17
|
|
|
17
18
|
function Controls(props: ControlsPropsInterface) {
|
|
18
19
|
const {styleProps} = useContext(PropsContext);
|
|
20
|
+
const localUid = useLocalUid();
|
|
19
21
|
const {localBtnContainer} = styleProps || {};
|
|
20
22
|
const showButton = props.showButton !== undefined ? props.showButton : true;
|
|
21
23
|
return (
|
|
22
|
-
<LocalUserContextComponent>
|
|
24
|
+
<LocalUserContextComponent localUid={localUid}>
|
|
23
25
|
<View style={{...styles.Controls, ...(localBtnContainer as object)}}>
|
|
24
26
|
<LocalAudioMute />
|
|
25
27
|
<LocalVideoMute />
|
|
@@ -27,13 +29,16 @@ function Controls(props: ControlsPropsInterface) {
|
|
|
27
29
|
<EndCall />
|
|
28
30
|
</View>
|
|
29
31
|
{showButton ? (
|
|
30
|
-
<
|
|
31
|
-
{(
|
|
32
|
+
<RenderConsumer>
|
|
33
|
+
{({renderList, renderPosition}) => (
|
|
32
34
|
<View style={{...styles.Controls, top: styles.Controls.top - 100}}>
|
|
33
|
-
<RemoteControls
|
|
35
|
+
<RemoteControls
|
|
36
|
+
user={renderList[renderPosition[0]]}
|
|
37
|
+
showRemoteSwap={false}
|
|
38
|
+
/>
|
|
34
39
|
</View>
|
|
35
40
|
)}
|
|
36
|
-
</
|
|
41
|
+
</RenderConsumer>
|
|
37
42
|
) : (
|
|
38
43
|
<></>
|
|
39
44
|
)}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import React, {useContext} from 'react';
|
|
2
|
-
import RtcContext from '../../Contexts/RtcContext';
|
|
2
|
+
import RtcContext, {UidType} from '../../Contexts/RtcContext';
|
|
3
3
|
import BtnTemplate from '../BtnTemplate';
|
|
4
4
|
import styles from '../../Style';
|
|
5
|
-
import PropsContext, {
|
|
5
|
+
import PropsContext, {
|
|
6
|
+
ToggleState,
|
|
7
|
+
RenderInterface,
|
|
8
|
+
} from '../../Contexts/PropsContext';
|
|
9
|
+
import useLocalUid from '../../Utils/useLocalUid';
|
|
6
10
|
|
|
7
11
|
interface RemoteAudioMuteInterface {
|
|
8
|
-
user:
|
|
12
|
+
user: RenderInterface;
|
|
9
13
|
}
|
|
10
14
|
|
|
11
15
|
const RemoteAudioMute: React.FC<RemoteAudioMuteInterface> = (props) => {
|
|
12
|
-
const {RtcEngine
|
|
16
|
+
const {RtcEngine} = useContext(RtcContext);
|
|
13
17
|
const {styleProps} = useContext(PropsContext);
|
|
14
18
|
const {remoteBtnStyles} = styleProps || {};
|
|
15
19
|
const {muteRemoteAudio} = remoteBtnStyles || {};
|
|
16
|
-
|
|
17
|
-
return props.user.uid !==
|
|
20
|
+
const localUid = useLocalUid();
|
|
21
|
+
return props.user.uid !== localUid ? (
|
|
18
22
|
<BtnTemplate
|
|
19
23
|
name={props.user.audio === ToggleState.enabled ? 'mic' : 'micOff'}
|
|
20
24
|
style={{...styles.leftRemoteBtn, ...(muteRemoteAudio as object)}}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import React, {useContext} from 'react';
|
|
2
|
-
import RtcContext from '../../Contexts/RtcContext';
|
|
2
|
+
import RtcContext, {UidType} from '../../Contexts/RtcContext';
|
|
3
3
|
import BtnTemplate from '../BtnTemplate';
|
|
4
4
|
import styles from '../../Style';
|
|
5
|
-
import PropsContext
|
|
5
|
+
import PropsContext from '../../Contexts/PropsContext';
|
|
6
|
+
import useLocalUid from '../../Utils/useLocalUid';
|
|
6
7
|
|
|
7
8
|
interface RemoteSwapInterface {
|
|
8
|
-
|
|
9
|
+
uid: UidType;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
const RemoteSwap: React.FC<RemoteSwapInterface> = (props) => {
|
|
@@ -13,19 +14,19 @@ const RemoteSwap: React.FC<RemoteSwapInterface> = (props) => {
|
|
|
13
14
|
const {styleProps} = useContext(PropsContext);
|
|
14
15
|
const {remoteBtnStyles} = styleProps || {};
|
|
15
16
|
const {remoteSwap} = remoteBtnStyles || {};
|
|
16
|
-
|
|
17
|
+
const localUid = useLocalUid();
|
|
17
18
|
return (
|
|
18
19
|
<BtnTemplate
|
|
19
20
|
name={'remoteSwap'}
|
|
20
21
|
style={
|
|
21
|
-
props.
|
|
22
|
+
props.uid !== localUid
|
|
22
23
|
? {...styles.rightRemoteBtn, ...(remoteSwap as object)}
|
|
23
24
|
: {}
|
|
24
25
|
}
|
|
25
26
|
onPress={() => {
|
|
26
27
|
dispatch({
|
|
27
28
|
type: 'SwapVideo',
|
|
28
|
-
value: [props.
|
|
29
|
+
value: [props.uid],
|
|
29
30
|
});
|
|
30
31
|
}}
|
|
31
32
|
/>
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import React, {useContext} from 'react';
|
|
2
|
+
import useLocalUid from '../../Utils/useLocalUid';
|
|
2
3
|
import PropsContext, {
|
|
3
4
|
ToggleState,
|
|
4
|
-
|
|
5
|
+
RenderInterface,
|
|
5
6
|
} from '../../Contexts/PropsContext';
|
|
6
7
|
import RtcContext from '../../Contexts/RtcContext';
|
|
7
8
|
import styles from '../../Style';
|
|
8
9
|
import BtnTemplate from '../BtnTemplate';
|
|
9
10
|
|
|
10
11
|
interface RemoteVideoMuteInterface {
|
|
11
|
-
user:
|
|
12
|
+
user: RenderInterface;
|
|
12
13
|
rightButton: boolean;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
const RemoteVideoMute: React.FC<RemoteVideoMuteInterface> = (props) => {
|
|
16
|
-
const {RtcEngine
|
|
17
|
+
const {RtcEngine} = useContext(RtcContext);
|
|
17
18
|
const {styleProps} = useContext(PropsContext);
|
|
18
19
|
const {remoteBtnStyles} = styleProps || {};
|
|
19
20
|
const {muteRemoteVideo} = remoteBtnStyles || {};
|
|
20
|
-
|
|
21
|
-
return props.user.uid !==
|
|
21
|
+
const localUid = useLocalUid();
|
|
22
|
+
return props.user.uid !== localUid ? (
|
|
22
23
|
<BtnTemplate
|
|
23
24
|
name={
|
|
24
25
|
props.user.video === ToggleState.enabled ? 'videocam' : 'videocamOff'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, {useContext} from 'react';
|
|
2
2
|
import {View} from 'react-native';
|
|
3
|
-
import PropsContext, {
|
|
3
|
+
import PropsContext, {RenderInterface} from '../Contexts/PropsContext';
|
|
4
4
|
import styles from '../Style';
|
|
5
5
|
import RemoteAudioMute from './Remote/RemoteAudioMute';
|
|
6
6
|
import RemoteSwap from './Remote/RemoteSwap';
|
|
@@ -10,7 +10,7 @@ interface RemoteControlsInterface {
|
|
|
10
10
|
showMuteRemoteVideo?: boolean;
|
|
11
11
|
showMuteRemoteAudio?: boolean;
|
|
12
12
|
showRemoteSwap?: boolean;
|
|
13
|
-
user:
|
|
13
|
+
user: RenderInterface;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
const RemoteControls: React.FC<RemoteControlsInterface> = (props) => {
|
|
@@ -34,7 +34,7 @@ const RemoteControls: React.FC<RemoteControlsInterface> = (props) => {
|
|
|
34
34
|
<></>
|
|
35
35
|
)}
|
|
36
36
|
{props.showRemoteSwap !== false ? (
|
|
37
|
-
<RemoteSwap
|
|
37
|
+
<RemoteSwap uid={props.user.uid} />
|
|
38
38
|
) : (
|
|
39
39
|
<></>
|
|
40
40
|
)}
|
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
ActionType,
|
|
3
|
+
RenderStateInterface,
|
|
4
|
+
UidType,
|
|
5
|
+
} from '../Contexts/RtcContext';
|
|
3
6
|
|
|
4
7
|
export default function LocalMuteAudio(
|
|
5
|
-
state:
|
|
8
|
+
state: RenderStateInterface,
|
|
6
9
|
action: ActionType<'LocalMuteAudio'>,
|
|
10
|
+
localUid: UidType,
|
|
7
11
|
) {
|
|
8
|
-
let stateUpdate = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
max: state.max.map(LocalAudioMute),
|
|
12
|
+
let stateUpdate: RenderStateInterface = {
|
|
13
|
+
renderList: {
|
|
14
|
+
...state.renderList,
|
|
15
|
+
[localUid]: {
|
|
16
|
+
...state.renderList[localUid],
|
|
17
|
+
audio: action.value[0],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
renderPosition: [...state.renderPosition],
|
|
18
21
|
};
|
|
19
22
|
return stateUpdate;
|
|
20
23
|
}
|
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
ActionType,
|
|
3
|
+
RenderStateInterface,
|
|
4
|
+
UidType,
|
|
5
|
+
} from '../Contexts/RtcContext';
|
|
3
6
|
|
|
4
7
|
export default function LocalMuteVideo(
|
|
5
|
-
state:
|
|
8
|
+
state: RenderStateInterface,
|
|
6
9
|
action: ActionType<'LocalMuteVideo'>,
|
|
10
|
+
localUid: UidType,
|
|
7
11
|
) {
|
|
8
|
-
let stateUpdate = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
max: state.max.map(LocalVideoMute),
|
|
12
|
+
let stateUpdate: RenderStateInterface = {
|
|
13
|
+
renderList: {
|
|
14
|
+
...state.renderList,
|
|
15
|
+
[localUid]: {
|
|
16
|
+
...state.renderList[localUid],
|
|
17
|
+
video: action.value[0],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
renderPosition: [...state.renderPosition],
|
|
18
21
|
};
|
|
19
22
|
return stateUpdate;
|
|
20
23
|
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import {ToggleState
|
|
2
|
-
import {ActionType,
|
|
1
|
+
import {ToggleState} from '../Contexts/PropsContext';
|
|
2
|
+
import {ActionType, RenderStateInterface} from '../Contexts/RtcContext';
|
|
3
3
|
|
|
4
4
|
export default function RemoteAudioStateChanged(
|
|
5
|
-
state:
|
|
5
|
+
state: RenderStateInterface,
|
|
6
6
|
action: ActionType<'RemoteAudioStateChanged'>,
|
|
7
7
|
) {
|
|
8
|
-
let stateUpdate = {};
|
|
9
8
|
let audioState: ToggleState;
|
|
10
9
|
if (action.value[1] === 2 || action.value[1] === 1) {
|
|
11
10
|
audioState = ToggleState.enabled;
|
|
12
11
|
} else {
|
|
13
12
|
audioState = ToggleState.disabled;
|
|
14
13
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
|
|
15
|
+
const stateUpdate: RenderStateInterface = {
|
|
16
|
+
renderList: {
|
|
17
|
+
...state.renderList,
|
|
18
|
+
[action.value[0]]: {
|
|
19
|
+
...state.renderList[action.value[0]],
|
|
20
|
+
audio: audioState,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
renderPosition: [...state.renderPosition],
|
|
24
24
|
};
|
|
25
25
|
return stateUpdate;
|
|
26
26
|
}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
import {ToggleState
|
|
2
|
-
import {ActionType,
|
|
1
|
+
import {ToggleState} from '../Contexts/PropsContext';
|
|
2
|
+
import {ActionType, RenderStateInterface} from '../Contexts/RtcContext';
|
|
3
3
|
|
|
4
4
|
export default function RemoteVideoStateChanged(
|
|
5
|
-
state:
|
|
5
|
+
state: RenderStateInterface,
|
|
6
6
|
action: ActionType<'RemoteVideoStateChanged'>,
|
|
7
7
|
) {
|
|
8
|
-
let stateUpdate = {};
|
|
9
8
|
let videoState: ToggleState;
|
|
10
9
|
if (action.value[1] === 0) {
|
|
11
10
|
videoState = ToggleState.disabled;
|
|
12
11
|
} else if (action.value[1] === 2) {
|
|
13
12
|
videoState = ToggleState.enabled;
|
|
14
13
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
|
|
15
|
+
const stateUpdate: RenderStateInterface = {
|
|
16
|
+
renderList: {
|
|
17
|
+
...state.renderList,
|
|
18
|
+
[action.value[0]]: {
|
|
19
|
+
...state.renderList[action.value[0]],
|
|
20
|
+
video:
|
|
21
|
+
videoState !== undefined
|
|
22
|
+
? videoState
|
|
23
|
+
: state.renderList[action.value[0]].video,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
renderPosition: [...state.renderPosition],
|
|
24
27
|
};
|
|
25
28
|
return stateUpdate;
|
|
26
29
|
}
|