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
|
@@ -0,0 +1,202 @@
|
|
|
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 {createHook} from 'fpe-implementation';
|
|
13
|
+
import React, {useState, useEffect, useRef} from 'react';
|
|
14
|
+
import {useRenderContext} from 'fpe-api';
|
|
15
|
+
import {SidePanelType} from '../../subComponents/SidePanelEnum';
|
|
16
|
+
import {useLocalUid} from '../../../agora-rn-uikit';
|
|
17
|
+
import CustomEvents from '../../custom-events';
|
|
18
|
+
import {EventNames} from '../../rtm-events';
|
|
19
|
+
import {useChatUIControl} from '../chat-ui/useChatUIControl';
|
|
20
|
+
import {useChatNotification} from '../chat-notification/useChatNotification';
|
|
21
|
+
import {useString} from '../../utils/useString';
|
|
22
|
+
import Toast from '../../../react-native-toast-message';
|
|
23
|
+
import {timeNow} from '../../rtm/utils';
|
|
24
|
+
import {useSidePanel} from '../../utils/useSidePanel';
|
|
25
|
+
import {UidType} from '../../../agora-rn-uikit';
|
|
26
|
+
|
|
27
|
+
interface ChatMessagesProviderProps {
|
|
28
|
+
children: React.ReactNode;
|
|
29
|
+
}
|
|
30
|
+
interface messageInterface {
|
|
31
|
+
ts: number;
|
|
32
|
+
msg: string;
|
|
33
|
+
}
|
|
34
|
+
interface messageStoreInterface extends messageInterface {
|
|
35
|
+
uid: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface ChatMessagesInterface {
|
|
39
|
+
messageStore: messageStoreInterface | any;
|
|
40
|
+
privateMessageStore: any;
|
|
41
|
+
sendChatMessage: (msg: string, toUid?: number) => void;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const ChatMessagesContext = React.createContext<ChatMessagesInterface>({
|
|
45
|
+
messageStore: [],
|
|
46
|
+
privateMessageStore: {},
|
|
47
|
+
sendChatMessage: () => {},
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
|
|
51
|
+
const {renderList} = useRenderContext();
|
|
52
|
+
const localUid = useLocalUid();
|
|
53
|
+
const {setSidePanel} = useSidePanel();
|
|
54
|
+
const {groupActive, selectedChatUserId, setGroupActive} = useChatUIControl();
|
|
55
|
+
const {setUnreadGroupMessageCount, setUnreadIndividualMessageCount} =
|
|
56
|
+
useChatNotification();
|
|
57
|
+
const [messageStore, setMessageStore] = useState<messageStoreInterface[]>([]);
|
|
58
|
+
const [privateMessageStore, setPrivateMessageStore] = useState({});
|
|
59
|
+
|
|
60
|
+
const renderListRef = useRef({renderList: renderList});
|
|
61
|
+
const groupActiveRef = useRef<boolean>();
|
|
62
|
+
const individualActiveRef = useRef<string | number>();
|
|
63
|
+
|
|
64
|
+
//commented for v1 release
|
|
65
|
+
//const fromText = useString('messageSenderNotificationLabel');
|
|
66
|
+
const fromText = (name: string) => `From : ${name}`;
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
renderListRef.current.renderList = renderList;
|
|
69
|
+
}, [renderList]);
|
|
70
|
+
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
groupActiveRef.current = groupActive;
|
|
73
|
+
}, [groupActive]);
|
|
74
|
+
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
individualActiveRef.current = selectedChatUserId;
|
|
77
|
+
}, [selectedChatUserId]);
|
|
78
|
+
|
|
79
|
+
React.useEffect(() => {
|
|
80
|
+
const showMessageNotification = (msg: string, uid: string) => {
|
|
81
|
+
Toast.show({
|
|
82
|
+
type: 'success',
|
|
83
|
+
text1: msg.length > 30 ? msg.slice(0, 30) + '...' : msg,
|
|
84
|
+
text2: renderListRef.current.renderList[parseInt(uid)]?.name
|
|
85
|
+
? fromText(renderListRef.current.renderList[parseInt(uid)]?.name)
|
|
86
|
+
: '',
|
|
87
|
+
visibilityTime: 1000,
|
|
88
|
+
onPress: () => {
|
|
89
|
+
setSidePanel(SidePanelType.Chat);
|
|
90
|
+
setUnreadGroupMessageCount(0);
|
|
91
|
+
setGroupActive(true);
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
CustomEvents.on(EventNames.PUBLIC_CHAT_MESSAGE, (data) => {
|
|
96
|
+
showMessageNotification(data.payload.value, data.sender);
|
|
97
|
+
addMessageToStore(data.sender, {
|
|
98
|
+
msg: data.payload.value,
|
|
99
|
+
ts: data.ts,
|
|
100
|
+
});
|
|
101
|
+
/**
|
|
102
|
+
* if chat group window is not active.
|
|
103
|
+
* then we will increment the unread count
|
|
104
|
+
*/
|
|
105
|
+
if (!groupActiveRef.current) {
|
|
106
|
+
setUnreadGroupMessageCount((prevState) => {
|
|
107
|
+
return prevState + 1;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
CustomEvents.on(EventNames.PRIVATE_CHAT_MESSAGE, (data) => {
|
|
112
|
+
showMessageNotification(data.payload.value, data.sender);
|
|
113
|
+
addMessageToPrivateStore(
|
|
114
|
+
data.sender,
|
|
115
|
+
{
|
|
116
|
+
msg: data.payload.value,
|
|
117
|
+
ts: data.ts,
|
|
118
|
+
},
|
|
119
|
+
false,
|
|
120
|
+
);
|
|
121
|
+
if (!(individualActiveRef.current === data.sender)) {
|
|
122
|
+
setUnreadIndividualMessageCount((prevState) => {
|
|
123
|
+
const prevCount =
|
|
124
|
+
prevState && prevState[data.sender] ? prevState[data.sender] : 0;
|
|
125
|
+
return {
|
|
126
|
+
...prevState,
|
|
127
|
+
[data.sender]: prevCount + 1,
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}, []);
|
|
133
|
+
|
|
134
|
+
const addMessageToStore = (uid: string, body: messageInterface) => {
|
|
135
|
+
setMessageStore((m: messageStoreInterface[]) => {
|
|
136
|
+
return [...m, {ts: body.ts, uid, msg: body.msg}];
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const addMessageToPrivateStore = (
|
|
141
|
+
uid: string,
|
|
142
|
+
body: messageInterface,
|
|
143
|
+
local: boolean,
|
|
144
|
+
) => {
|
|
145
|
+
setPrivateMessageStore((state: any) => {
|
|
146
|
+
let newState = {...state};
|
|
147
|
+
newState[uid] !== undefined
|
|
148
|
+
? (newState[uid] = [
|
|
149
|
+
...newState[uid],
|
|
150
|
+
{ts: body.ts, uid: local ? localUid : uid, msg: body.msg},
|
|
151
|
+
])
|
|
152
|
+
: (newState = {
|
|
153
|
+
...newState,
|
|
154
|
+
[uid]: [{ts: body.ts, uid: local ? localUid : uid, msg: body.msg}],
|
|
155
|
+
});
|
|
156
|
+
return {...newState};
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
const sendChatMessage = (msg: string, toUid?: UidType) => {
|
|
161
|
+
if (toUid) {
|
|
162
|
+
CustomEvents.send(
|
|
163
|
+
EventNames.PRIVATE_CHAT_MESSAGE,
|
|
164
|
+
{
|
|
165
|
+
value: msg,
|
|
166
|
+
},
|
|
167
|
+
toUid,
|
|
168
|
+
);
|
|
169
|
+
addMessageToPrivateStore(
|
|
170
|
+
toUid.toString(),
|
|
171
|
+
{
|
|
172
|
+
msg: msg,
|
|
173
|
+
ts: timeNow(),
|
|
174
|
+
},
|
|
175
|
+
true,
|
|
176
|
+
);
|
|
177
|
+
} else {
|
|
178
|
+
CustomEvents.send(EventNames.PUBLIC_CHAT_MESSAGE, {
|
|
179
|
+
value: msg,
|
|
180
|
+
});
|
|
181
|
+
addMessageToStore(localUid.toString(), {
|
|
182
|
+
msg: msg,
|
|
183
|
+
ts: timeNow(),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
return (
|
|
189
|
+
<ChatMessagesContext.Provider
|
|
190
|
+
value={{
|
|
191
|
+
messageStore,
|
|
192
|
+
privateMessageStore,
|
|
193
|
+
sendChatMessage,
|
|
194
|
+
}}>
|
|
195
|
+
{props.children}
|
|
196
|
+
</ChatMessagesContext.Provider>
|
|
197
|
+
);
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
const useChatMessages = createHook(ChatMessagesContext);
|
|
201
|
+
|
|
202
|
+
export {ChatMessagesProvider, useChatMessages};
|
|
@@ -0,0 +1,78 @@
|
|
|
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 {createHook} from 'fpe-implementation';
|
|
13
|
+
import React, {SetStateAction, useState, useEffect} from 'react';
|
|
14
|
+
|
|
15
|
+
interface individualUnreadMessageCount {
|
|
16
|
+
[key: number]: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface ChatNotificationInterface {
|
|
20
|
+
totalUnreadCount: number;
|
|
21
|
+
unreadGroupMessageCount: number;
|
|
22
|
+
setUnreadGroupMessageCount: React.Dispatch<SetStateAction<number>>;
|
|
23
|
+
unreadPrivateMessageCount: number;
|
|
24
|
+
setUnreadPrivateMessageCount: React.Dispatch<SetStateAction<number>>;
|
|
25
|
+
unreadIndividualMessageCount: individualUnreadMessageCount;
|
|
26
|
+
setUnreadIndividualMessageCount: React.Dispatch<
|
|
27
|
+
SetStateAction<individualUnreadMessageCount>
|
|
28
|
+
>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const ChatNotificationContext = React.createContext<ChatNotificationInterface>({
|
|
32
|
+
totalUnreadCount: 0,
|
|
33
|
+
unreadGroupMessageCount: 0,
|
|
34
|
+
unreadPrivateMessageCount: 0,
|
|
35
|
+
unreadIndividualMessageCount: {},
|
|
36
|
+
setUnreadGroupMessageCount: () => {},
|
|
37
|
+
setUnreadIndividualMessageCount: () => {},
|
|
38
|
+
setUnreadPrivateMessageCount: () => {},
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
interface ChatNotificationProviderProps {
|
|
42
|
+
children: React.ReactNode;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const ChatNotificationProvider = (props: ChatNotificationProviderProps) => {
|
|
46
|
+
const [unreadGroupMessageCount, setUnreadGroupMessageCount] = useState(0);
|
|
47
|
+
const [unreadPrivateMessageCount, setUnreadPrivateMessageCount] = useState(0);
|
|
48
|
+
const [unreadIndividualMessageCount, setUnreadIndividualMessageCount] =
|
|
49
|
+
useState<individualUnreadMessageCount>({});
|
|
50
|
+
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
let privateUnreadCount = 0;
|
|
53
|
+
for (const key in unreadIndividualMessageCount) {
|
|
54
|
+
privateUnreadCount =
|
|
55
|
+
privateUnreadCount + unreadIndividualMessageCount[key];
|
|
56
|
+
}
|
|
57
|
+
setUnreadPrivateMessageCount(privateUnreadCount);
|
|
58
|
+
}, [unreadIndividualMessageCount]);
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<ChatNotificationContext.Provider
|
|
62
|
+
value={{
|
|
63
|
+
totalUnreadCount: unreadGroupMessageCount + unreadPrivateMessageCount,
|
|
64
|
+
unreadGroupMessageCount,
|
|
65
|
+
setUnreadGroupMessageCount,
|
|
66
|
+
unreadPrivateMessageCount,
|
|
67
|
+
setUnreadPrivateMessageCount,
|
|
68
|
+
unreadIndividualMessageCount,
|
|
69
|
+
setUnreadIndividualMessageCount,
|
|
70
|
+
}}>
|
|
71
|
+
{props.children}
|
|
72
|
+
</ChatNotificationContext.Provider>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const useChatNotification = createHook(ChatNotificationContext);
|
|
77
|
+
|
|
78
|
+
export {ChatNotificationProvider, useChatNotification};
|
|
@@ -0,0 +1,66 @@
|
|
|
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 {createHook} from 'fpe-implementation';
|
|
13
|
+
import React, {SetStateAction, useState} from 'react';
|
|
14
|
+
import {UidType} from '../../../agora-rn-uikit';
|
|
15
|
+
|
|
16
|
+
export interface ChatUIControlInterface {
|
|
17
|
+
groupActive: boolean;
|
|
18
|
+
privateActive: boolean;
|
|
19
|
+
selectedChatUserId: UidType;
|
|
20
|
+
setGroupActive: React.Dispatch<SetStateAction<boolean>>;
|
|
21
|
+
setPrivateActive: React.Dispatch<SetStateAction<boolean>>;
|
|
22
|
+
setSelectedChatUserId: React.Dispatch<SetStateAction<UidType>>;
|
|
23
|
+
message: string;
|
|
24
|
+
setMessage: React.Dispatch<SetStateAction<string>>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const ChatUIControlContext = React.createContext<ChatUIControlInterface>({
|
|
28
|
+
groupActive: false,
|
|
29
|
+
privateActive: false,
|
|
30
|
+
selectedChatUserId: 0,
|
|
31
|
+
message: '',
|
|
32
|
+
setGroupActive: () => {},
|
|
33
|
+
setPrivateActive: () => {},
|
|
34
|
+
setSelectedChatUserId: () => {},
|
|
35
|
+
setMessage: () => {},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
interface ChatUIControlProviderProps {
|
|
39
|
+
children: React.ReactNode;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const ChatUIControlProvider = (props: ChatUIControlProviderProps) => {
|
|
43
|
+
const [groupActive, setGroupActive] = useState(false);
|
|
44
|
+
const [privateActive, setPrivateActive] = useState(false);
|
|
45
|
+
const [selectedChatUserId, setSelectedChatUserId] = useState<UidType>(0);
|
|
46
|
+
const [message, setMessage] = useState('');
|
|
47
|
+
return (
|
|
48
|
+
<ChatUIControlContext.Provider
|
|
49
|
+
value={{
|
|
50
|
+
groupActive,
|
|
51
|
+
privateActive,
|
|
52
|
+
selectedChatUserId,
|
|
53
|
+
setGroupActive,
|
|
54
|
+
setPrivateActive,
|
|
55
|
+
setSelectedChatUserId,
|
|
56
|
+
message,
|
|
57
|
+
setMessage,
|
|
58
|
+
}}>
|
|
59
|
+
{props.children}
|
|
60
|
+
</ChatUIControlContext.Provider>
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const useChatUIControl = createHook(ChatUIControlContext);
|
|
65
|
+
|
|
66
|
+
export {ChatUIControlProvider, useChatUIControl};
|
|
@@ -0,0 +1,54 @@
|
|
|
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, {useContext, useState} from 'react';
|
|
14
|
+
import Error from '../../subComponents/Error';
|
|
15
|
+
type ErrorType = {
|
|
16
|
+
name: string;
|
|
17
|
+
message: string;
|
|
18
|
+
};
|
|
19
|
+
type ErrorContextType = {
|
|
20
|
+
error: ErrorType | undefined;
|
|
21
|
+
setGlobalErrorMessage: (error: any) => void;
|
|
22
|
+
resetError: () => void;
|
|
23
|
+
};
|
|
24
|
+
const ErrorContext = React.createContext<ErrorContextType>({
|
|
25
|
+
error: {name: '', message: ''},
|
|
26
|
+
setGlobalErrorMessage: () => {},
|
|
27
|
+
resetError: () => {},
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const ErrorProvider = (props: {children: React.ReactNode}) => {
|
|
31
|
+
const [error, setError] = useState<ErrorType>();
|
|
32
|
+
const setGlobalErrorMessage = (error: ErrorType) => {
|
|
33
|
+
setError(error);
|
|
34
|
+
};
|
|
35
|
+
const resetError = () => {
|
|
36
|
+
setError(undefined);
|
|
37
|
+
};
|
|
38
|
+
return (
|
|
39
|
+
<ErrorContext.Provider value={{error, setGlobalErrorMessage, resetError}}>
|
|
40
|
+
{props.children}
|
|
41
|
+
</ErrorContext.Provider>
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const CommonError: React.FC = () => {
|
|
46
|
+
const {error} = useContext(ErrorContext);
|
|
47
|
+
return error && (error.name || error.message) ? (
|
|
48
|
+
<Error error={error} showBack={true} />
|
|
49
|
+
) : (
|
|
50
|
+
<></>
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
export {ErrorContext, ErrorProvider};
|
|
54
|
+
export default CommonError;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import {View, StyleSheet} from 'react-native';
|
|
15
|
+
import Logo from '../../subComponents/Logo';
|
|
16
|
+
import {hasBrandLogo} from '../../utils/common';
|
|
17
|
+
|
|
18
|
+
const CommonLogo: React.FC = () => {
|
|
19
|
+
return (
|
|
20
|
+
<View style={style.nav}>
|
|
21
|
+
{hasBrandLogo && <Logo />}
|
|
22
|
+
{/* <OpenInNativeButton /> */}
|
|
23
|
+
</View>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
26
|
+
export default CommonLogo;
|
|
27
|
+
const style = StyleSheet.create({
|
|
28
|
+
nav: {
|
|
29
|
+
flex: 1,
|
|
30
|
+
width: '100%',
|
|
31
|
+
flexDirection: 'row',
|
|
32
|
+
alignItems: 'center',
|
|
33
|
+
justifyContent: 'center',
|
|
34
|
+
},
|
|
35
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {UidType} from '../../../agora-rn-uikit';
|
|
2
|
+
import React, {createContext, useState, useContext} from 'react';
|
|
3
|
+
import {createHook} from 'fpe-implementation';
|
|
4
|
+
import LiveStreamContext, {
|
|
5
|
+
raiseHandListInterface,
|
|
6
|
+
} from '../../components/livestream';
|
|
7
|
+
import {ClientRole, useLocalUid} from '../../../agora-rn-uikit';
|
|
8
|
+
import {filterObject} from '../../utils';
|
|
9
|
+
import useUserList from '../../utils/useUserList';
|
|
10
|
+
|
|
11
|
+
export interface LiveStreamDataObjectInterface {
|
|
12
|
+
[key: number]: {
|
|
13
|
+
role: number;
|
|
14
|
+
raised: boolean;
|
|
15
|
+
ts: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface LiveStreamDataContextInterface {
|
|
19
|
+
hostUids: UidType[];
|
|
20
|
+
audienceUids: UidType[];
|
|
21
|
+
liveStreamData: raiseHandListInterface;
|
|
22
|
+
}
|
|
23
|
+
const LiveStreamDataContext = createContext<LiveStreamDataContextInterface>({
|
|
24
|
+
hostUids: [],
|
|
25
|
+
audienceUids: [],
|
|
26
|
+
liveStreamData: {},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
interface ScreenShareProviderProps {
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
}
|
|
32
|
+
const LiveStreamDataProvider = (props: ScreenShareProviderProps) => {
|
|
33
|
+
const localUid = useLocalUid();
|
|
34
|
+
const {renderList} = useUserList();
|
|
35
|
+
const {raiseHandList} = useContext(LiveStreamContext);
|
|
36
|
+
const [hostUids, setHostUids] = useState<UidType[]>([]);
|
|
37
|
+
const [audienceUids, setAudienceUids] = useState<UidType[]>([]);
|
|
38
|
+
|
|
39
|
+
React.useEffect(() => {
|
|
40
|
+
if (Object.keys(renderList).length !== 0) {
|
|
41
|
+
const hostList = filterObject(
|
|
42
|
+
renderList,
|
|
43
|
+
([k, v]) =>
|
|
44
|
+
(v?.type === 'rtc' || v?.type === 'live') &&
|
|
45
|
+
(raiseHandList[k]
|
|
46
|
+
? raiseHandList[k]?.role == ClientRole.Broadcaster
|
|
47
|
+
: true) &&
|
|
48
|
+
!v?.offline,
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const audienceList = filterObject(
|
|
52
|
+
renderList,
|
|
53
|
+
([k, v]) =>
|
|
54
|
+
(v?.type === 'rtc' || v?.type === 'live') &&
|
|
55
|
+
raiseHandList[k]?.role == ClientRole.Audience &&
|
|
56
|
+
!v.offline,
|
|
57
|
+
);
|
|
58
|
+
const hUids = Object.keys(hostList).map((uid) => parseInt(uid));
|
|
59
|
+
const aUids = Object.keys(audienceList).map((uid) => parseInt(uid));
|
|
60
|
+
|
|
61
|
+
setHostUids(hUids);
|
|
62
|
+
setAudienceUids(aUids);
|
|
63
|
+
}
|
|
64
|
+
}, [renderList, raiseHandList]);
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<LiveStreamDataContext.Provider
|
|
68
|
+
value={{
|
|
69
|
+
liveStreamData: raiseHandList,
|
|
70
|
+
hostUids,
|
|
71
|
+
audienceUids,
|
|
72
|
+
}}>
|
|
73
|
+
{props.children}
|
|
74
|
+
</LiveStreamDataContext.Provider>
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
const useLiveStreamDataContext = createHook(LiveStreamDataContext);
|
|
78
|
+
|
|
79
|
+
export {useLiveStreamDataContext, LiveStreamDataProvider};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {UidType, PropsContext} from '../../../agora-rn-uikit';
|
|
2
|
+
import React, {
|
|
3
|
+
createContext,
|
|
4
|
+
Dispatch,
|
|
5
|
+
SetStateAction,
|
|
6
|
+
useContext,
|
|
7
|
+
useState,
|
|
8
|
+
} from 'react';
|
|
9
|
+
import {createHook} from 'fpe-implementation';
|
|
10
|
+
|
|
11
|
+
export interface ScreenShareObjectInterface {
|
|
12
|
+
[key: string | number]: {
|
|
13
|
+
name: string;
|
|
14
|
+
isActive: boolean;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface ScreenShareContextInterface {
|
|
18
|
+
screenShareData: ScreenShareObjectInterface;
|
|
19
|
+
setScreenShareData: Dispatch<SetStateAction<ScreenShareObjectInterface>>;
|
|
20
|
+
}
|
|
21
|
+
const ScreenShareContext = createContext<ScreenShareContextInterface>({
|
|
22
|
+
screenShareData: {},
|
|
23
|
+
setScreenShareData: () => {},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
interface ScreenShareProviderProps {
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
}
|
|
29
|
+
const ScreenShareProvider = (props: ScreenShareProviderProps) => {
|
|
30
|
+
const {rtcProps} = useContext(PropsContext);
|
|
31
|
+
const [screenShareData, setScreenShareData] =
|
|
32
|
+
useState<ScreenShareObjectInterface>({
|
|
33
|
+
[rtcProps?.screenShareUid]: {
|
|
34
|
+
name: '',
|
|
35
|
+
isActive: false,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<ScreenShareContext.Provider value={{screenShareData, setScreenShareData}}>
|
|
41
|
+
{props.children}
|
|
42
|
+
</ScreenShareContext.Provider>
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
const useScreenContext = createHook(ScreenShareContext);
|
|
46
|
+
|
|
47
|
+
export {useScreenContext, ScreenShareProvider};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {UidType} from '../../../agora-rn-uikit';
|
|
2
|
+
import React, {
|
|
3
|
+
createContext,
|
|
4
|
+
Dispatch,
|
|
5
|
+
SetStateAction,
|
|
6
|
+
useEffect,
|
|
7
|
+
useState,
|
|
8
|
+
} from 'react';
|
|
9
|
+
import {createHook} from 'fpe-implementation';
|
|
10
|
+
import {filterObject} from '../../utils/index';
|
|
11
|
+
import {useRtcContext} from 'fpe-api';
|
|
12
|
+
|
|
13
|
+
export interface WhiteboardObjectInterface {
|
|
14
|
+
[key: number]: {
|
|
15
|
+
active: boolean;
|
|
16
|
+
parentId: UidType;
|
|
17
|
+
type: 'whiteboard';
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface WhiteboardContextInterface {
|
|
21
|
+
whiteboardData: WhiteboardObjectInterface;
|
|
22
|
+
setWhiteboardData: Dispatch<SetStateAction<WhiteboardObjectInterface>>;
|
|
23
|
+
}
|
|
24
|
+
const WhiteboardContext = createContext<WhiteboardContextInterface>({
|
|
25
|
+
whiteboardData: {},
|
|
26
|
+
setWhiteboardData: () => {},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
interface WhiteboardProviderProps {
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
}
|
|
32
|
+
const WhiteboardProvider = (props: WhiteboardProviderProps) => {
|
|
33
|
+
const [whiteboardData, setWhiteboardData] =
|
|
34
|
+
useState<WhiteboardObjectInterface>({});
|
|
35
|
+
const {dispatch} = useRtcContext();
|
|
36
|
+
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const activeData = filterObject(
|
|
39
|
+
whiteboardData,
|
|
40
|
+
([k, v]) => v.active === true,
|
|
41
|
+
);
|
|
42
|
+
Object.keys(activeData).map((uid) => {
|
|
43
|
+
const uidAsNumber = parseInt(uid);
|
|
44
|
+
dispatch({
|
|
45
|
+
type: 'AddCustomContent',
|
|
46
|
+
value: [uidAsNumber, activeData[uidAsNumber]],
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}, [whiteboardData]);
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<WhiteboardContext.Provider value={{whiteboardData, setWhiteboardData}}>
|
|
53
|
+
{props.children}
|
|
54
|
+
</WhiteboardContext.Provider>
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
const useScreenContext = createHook(WhiteboardContext);
|
|
58
|
+
|
|
59
|
+
export {useScreenContext, WhiteboardProvider};
|
|
@@ -0,0 +1,27 @@
|
|
|
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 {createContext} from 'react';
|
|
13
|
+
|
|
14
|
+
interface DimensionContextInterface {
|
|
15
|
+
getDimensionData: (
|
|
16
|
+
width?: number,
|
|
17
|
+
height?: number,
|
|
18
|
+
) => {dim: [number, number, boolean]; isDesktop: boolean};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const DimensionContext = createContext<DimensionContextInterface>({
|
|
22
|
+
getDimensionData: () => {
|
|
23
|
+
return {dim: [0, 0, false], isDesktop: false};
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export default DimensionContext;
|