agora-appbuilder-core 3.0.9 → 4.0.0-api.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 +6 -0
- package/package.json +2 -2
- package/template/_package-lock.json +5871 -4728
- package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
- package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
- package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +10 -6
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +28 -8
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +7 -15
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
- package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
- package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
- package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +4 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +4 -2
- package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -6
- package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +4 -4
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +4 -4
- package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +23 -0
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +7 -7
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -7
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +10 -10
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -5
- package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
- package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +74 -7
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +5 -4
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +76 -49
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +17 -7
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +17 -11
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -2
- package/template/agora-rn-uikit/src/index.ts +17 -9
- package/template/android/app/build.gradle +1 -0
- package/template/android/app/src/main/AndroidManifest.xml +22 -15
- package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
- package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
- package/template/android/app/src/main/res/values/colors.xml +7 -0
- package/template/android/build.gradle +3 -3
- package/template/babel.config.js +1 -0
- package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
- package/template/customization-api/action-library.ts +10 -14
- package/template/customization-api/app-state.ts +4 -6
- package/template/customization-api/customEvents.ts +2 -2
- package/template/customization-api/customize.ts +1 -1
- package/template/customization-api/sub-components.ts +4 -12
- package/template/customization-api/typeDefinition.ts +15 -38
- package/template/customization-implementation/createHook.ts +24 -6
- package/template/customization-implementation/index.ts +1 -1
- package/template/customization-implementation/useCustomization.tsx +5 -7
- package/template/electron/index.html +27 -27
- package/template/electron/renderer/index.js +1 -0
- package/template/global.d.ts +26 -4
- package/template/index.rsdk.tsx +1 -0
- package/template/index.web.js +2 -1
- package/template/index.wsdk.tsx +9 -2
- package/template/ios/HelloWorld/Info.plist +14 -1
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
- package/template/metro.config.js +1 -1
- package/template/package.json +18 -7
- package/template/react-native-toast-message/index.d.ts +43 -43
- package/template/react-native-toast-message/src/colors/index.js +3 -2
- package/template/react-native-toast-message/src/components/base/index.js +46 -59
- package/template/react-native-toast-message/src/components/base/styles.js +16 -32
- package/template/react-native-toast-message/src/components/checkbox.js +178 -0
- package/template/react-native-toast-message/src/components/error.js +3 -2
- package/template/react-native-toast-message/src/components/info.js +3 -2
- package/template/react-native-toast-message/src/components/success.js +3 -2
- package/template/react-native-toast-message/src/index.js +122 -31
- package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
- package/template/react-native-toast-message/src/styles.js +3 -4
- package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
- package/template/react-native.config.js +7 -0
- package/template/src/App.tsx +19 -14
- package/template/src/AppWrapper.tsx +74 -29
- package/template/src/SDKAppWrapper.tsx +60 -64
- package/template/src/app-state/useLocalUserInfo.ts +3 -3
- package/template/src/assets/font-styles.css +329 -0
- package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
- package/template/src/assets/fonts/icomoon.ttf +0 -0
- package/template/src/assets/permission.png +0 -0
- package/template/src/assets/selection.json +1 -0
- package/template/src/atoms/ActionMenu.tsx +236 -0
- package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
- package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
- package/template/src/atoms/AnimatedRings.native.tsx +68 -0
- package/template/src/atoms/AnimatedRings.tsx +70 -0
- package/template/src/atoms/Card.tsx +61 -0
- package/template/src/atoms/CircularProgress.native.tsx +121 -0
- package/template/src/atoms/CircularProgress.tsx +102 -0
- package/template/src/atoms/CustomIcon.tsx +88 -0
- package/template/src/atoms/CustomSwitch.tsx +287 -0
- package/template/src/atoms/Dropdown.tsx +306 -0
- package/template/src/atoms/HorizontalRule.tsx +3 -1
- package/template/src/atoms/IconButton.tsx +162 -0
- package/template/src/atoms/ImageIcon.tsx +98 -0
- package/template/src/atoms/InfoBubble.tsx +291 -0
- package/template/src/atoms/Input.tsx +87 -0
- package/template/src/atoms/InviteInfo.tsx +166 -0
- package/template/src/atoms/LinkButton.tsx +28 -0
- package/template/src/atoms/OutlineButton.tsx +61 -0
- package/template/src/atoms/ParticipantsCount.tsx +74 -0
- package/template/src/atoms/Popup.tsx +147 -0
- package/template/src/atoms/PrimaryButton.tsx +51 -26
- package/template/src/atoms/RecordingInfo.tsx +52 -0
- package/template/src/atoms/SecondaryButton.tsx +8 -5
- package/template/src/atoms/Spacer.tsx +22 -0
- package/template/src/atoms/TertiaryButton.tsx +78 -0
- package/template/src/atoms/TextInput.tsx +12 -14
- package/template/src/atoms/Toggle.tsx +47 -0
- package/template/src/atoms/Toolbar.tsx +68 -0
- package/template/src/atoms/ToolbarItem.tsx +63 -0
- package/template/src/atoms/Tooltip.native.tsx +65 -0
- package/template/src/atoms/Tooltip.tsx +94 -0
- package/template/src/atoms/UserAvatar.tsx +60 -0
- package/template/src/components/Chat.tsx +164 -278
- package/template/src/components/ChatContext.ts +8 -1
- package/template/src/components/ColorConfigure.tsx +1 -1
- package/template/src/components/ColorContext.ts +1 -1
- package/template/src/components/CommonStyles.ts +44 -0
- package/template/src/components/Controls.tsx +331 -73
- package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +8 -6
- package/template/src/components/DeviceConfigure.tsx +511 -106
- package/template/src/components/DeviceContext.tsx +8 -4
- package/template/src/components/EventsConfigure.tsx +192 -10
- package/template/src/components/GraphQLProvider.tsx +1 -1
- package/template/src/components/GridVideo.tsx +60 -45
- package/template/src/components/HostControlView.tsx +114 -35
- package/template/src/components/Navbar.tsx +219 -437
- package/template/src/components/Navigation.tsx +15 -1
- package/template/src/components/NetworkQualityContext.tsx +22 -22
- package/template/src/components/ParticipantsView.tsx +178 -156
- package/template/src/components/PinnedVideo.tsx +206 -121
- package/template/src/components/Precall.native.tsx +358 -119
- package/template/src/components/Precall.tsx +272 -138
- package/template/src/components/RTMConfigure.tsx +66 -19
- package/template/src/components/Router.electron.ts +1 -0
- package/template/src/components/Router.native.ts +1 -0
- package/template/src/components/Router.sdk.ts +1 -0
- package/template/src/components/Router.ts +1 -0
- package/template/src/components/SdkApiContext.tsx +161 -0
- package/template/src/components/Settings.tsx +26 -95
- package/template/src/components/SettingsView.tsx +251 -56
- package/template/src/components/Share.tsx +305 -276
- package/template/src/components/StorageContext.tsx +30 -3
- package/template/src/components/ToastComponent.tsx +8 -0
- package/template/src/components/chat-messages/useChatMessages.tsx +97 -50
- package/template/src/components/chat-ui/useChatUIControls.tsx +76 -0
- package/template/src/components/common/Error.tsx +20 -6
- package/template/src/components/common/Logo.tsx +16 -15
- package/template/src/components/contexts/LiveStreamDataContext.tsx +16 -11
- package/template/src/components/contexts/VideoMeetingDataContext.tsx +41 -11
- package/template/src/components/contexts/WhiteboardContext.tsx +3 -3
- package/template/src/components/livestream/LiveStreamContext.tsx +284 -50
- package/template/src/components/livestream/Types.ts +39 -14
- package/template/src/components/livestream/index.ts +1 -0
- package/template/src/components/livestream/views/LiveStreamControls.tsx +9 -4
- package/template/src/components/participants/AllAudienceParticipants.tsx +102 -31
- package/template/src/components/participants/AllHostParticipants.tsx +106 -35
- package/template/src/components/participants/Participant.tsx +300 -0
- package/template/src/components/participants/ParticipantName.tsx +13 -7
- package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
- package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
- package/template/src/components/participants/UserActionMenuOptions.tsx +396 -0
- package/template/src/components/popups/InvitePopup.tsx +115 -0
- package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
- package/template/src/components/precall/LocalMute.tsx +84 -14
- package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
- package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
- package/template/src/components/precall/PermissionHelper.tsx +126 -0
- package/template/src/components/precall/PreCallSettings.tsx +52 -0
- package/template/src/components/precall/VideoPreview.native.tsx +51 -6
- package/template/src/components/precall/VideoPreview.tsx +164 -8
- package/template/src/components/precall/joinCallBtn.native.tsx +2 -2
- package/template/src/components/precall/joinCallBtn.tsx +17 -4
- package/template/src/components/precall/meetingTitle.tsx +17 -14
- package/template/src/components/precall/selectDevice.tsx +1 -21
- package/template/src/components/precall/textInput.tsx +34 -6
- package/template/src/components/precall/usePreCall.tsx +39 -1
- package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +34 -10
- package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
- package/template/src/components/styles.ts +42 -21
- package/template/src/components/useShareLink.tsx +19 -21
- package/template/src/components/useToast.tsx +41 -0
- package/template/src/components/useUserPreference.tsx +9 -6
- package/template/src/components/useVideoCall.tsx +84 -0
- package/template/src/language/default-labels/createScreenLabels.ts +3 -3
- package/template/src/language/default-labels/joinScreenLabels.ts +2 -2
- package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +5 -5
- package/template/src/language/default-labels/videoCallScreenLabels.ts +5 -5
- package/template/src/pages/Authenticate.tsx +5 -15
- package/template/src/pages/Create.tsx +304 -191
- package/template/src/pages/Endcall.tsx +148 -0
- package/template/src/pages/Join.tsx +96 -70
- package/template/src/pages/VideoCall.tsx +179 -69
- package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
- package/template/src/pages/video-call/ActionSheet.tsx +226 -0
- package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
- package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
- package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
- package/template/src/pages/video-call/DefaultLayouts.ts +6 -6
- package/template/src/pages/video-call/NameWithMicIcon.tsx +93 -49
- package/template/src/pages/video-call/RenderComponent.tsx +6 -30
- package/template/src/pages/video-call/SidePanelHeader.tsx +186 -0
- package/template/src/pages/video-call/VideoCallMobileView.tsx +138 -0
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
- package/template/src/pages/video-call/VideoCallScreen.tsx +109 -66
- package/template/src/pages/video-call/VideoComponent.tsx +20 -4
- package/template/src/pages/video-call/VideoRenderer.tsx +227 -61
- package/template/src/pages/video-call/index.ts +35 -7
- package/template/src/rtm/RTMEngine.ts +8 -0
- package/template/src/rtm-events/constants.ts +3 -1
- package/template/src/rtm-events-api/Events.ts +5 -4
- package/template/src/rtm-events-api/LocalEvents.ts +6 -0
- package/template/src/rtm-events-api/types.ts +5 -5
- package/template/src/subComponents/ChatBubble.tsx +125 -84
- package/template/src/subComponents/ChatContainer.tsx +280 -93
- package/template/src/subComponents/ChatInput.ios.tsx +175 -0
- package/template/src/subComponents/ChatInput.tsx +72 -115
- package/template/src/subComponents/Checkbox.native.tsx +16 -5
- package/template/src/subComponents/Checkbox.tsx +2 -2
- package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
- package/template/src/subComponents/EndcallPopup.tsx +107 -0
- package/template/src/subComponents/FallbackLogo.tsx +122 -40
- package/template/src/subComponents/LanguageSelector.tsx +1 -1
- package/template/src/subComponents/LayoutIconButton.tsx +201 -0
- package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
- package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
- package/template/src/subComponents/LocalAudioMute.tsx +119 -27
- package/template/src/subComponents/LocalEndCall.tsx +73 -35
- package/template/src/subComponents/LocalSwitchCamera.tsx +19 -32
- package/template/src/subComponents/LocalVideoMute.tsx +117 -27
- package/template/src/subComponents/Logo.tsx +3 -4
- package/template/src/subComponents/LogoutButton.tsx +1 -1
- package/template/src/subComponents/NetworkQualityPill.tsx +66 -68
- package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
- package/template/src/subComponents/Recording.tsx +28 -29
- package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
- package/template/src/subComponents/RemoteEndCall.tsx +8 -5
- package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
- package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
- package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
- package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
- package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
- package/template/src/subComponents/SelectDevice.tsx +404 -61
- package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
- package/template/src/subComponents/SelectOAuth.tsx +9 -8
- package/template/src/subComponents/SidePanelButtons.ts +0 -3
- package/template/src/subComponents/SidePanelHeader.tsx +112 -0
- package/template/src/subComponents/ToastConfig.tsx +150 -10
- package/template/src/subComponents/chat/ChatParticipants.tsx +188 -79
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +97 -34
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +8 -8
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
- package/template/src/subComponents/recording/useRecording.tsx +81 -29
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +23 -12
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +44 -19
- package/template/src/theme/index.ts +46 -0
- package/template/src/utils/PlatformWrapper.tsx +21 -0
- package/template/src/utils/SdkEvents.ts +23 -14
- package/template/src/utils/SdkMethodEvents.ts +81 -0
- package/template/src/utils/common.tsx +155 -1
- package/template/src/utils/hexadecimalTransparency.ts +108 -0
- package/template/src/utils/index.tsx +19 -0
- package/template/src/utils/isMobileOrTablet.ts +7 -2
- package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
- package/template/src/utils/useActiveSpeaker.ts +42 -0
- package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
- package/template/src/utils/{useButtonTemplate.tsx → useFocus.tsx} +19 -16
- package/template/src/utils/useGetMeetingPhrase.ts +10 -10
- package/template/src/utils/useIsAudioEnabled.ts +3 -3
- package/template/src/utils/useIsHandRaised.ts +13 -0
- package/template/src/utils/useIsPSTN.ts +3 -3
- package/template/src/utils/useIsVideoEnabled.ts +3 -3
- package/template/src/utils/{useJoinMeeting.ts → useJoinRoom.ts} +27 -21
- package/template/src/utils/useMutePSTN.ts +2 -2
- package/template/src/utils/useMuteToggleLocal.ts +58 -5
- package/template/src/utils/useRemoteEndCall.ts +4 -4
- package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
- package/template/src/utils/useRemoteMute.ts +7 -7
- package/template/src/utils/useRemoteRequest.ts +84 -0
- package/template/src/utils/useSwitchCamera.native.tsx +25 -0
- package/template/src/utils/useSwitchCamera.tsx +19 -0
- package/template/src/utils/useToolbar.tsx +59 -0
- package/template/web/index.html +5 -0
- package/template/webpack.commons.js +13 -8
- package/template/webpack.rsdk.config.js +1 -2
- package/template/webpack.web.config.js +1 -0
- package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
- package/template/src/assets/icons.ts +0 -102
- package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
- package/template/src/components/participants/MeParticipant.tsx +0 -38
- package/template/src/components/participants/RemoteParticipants.tsx +0 -71
- package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
|
@@ -4,15 +4,15 @@ buildscript {
|
|
|
4
4
|
ext {
|
|
5
5
|
buildToolsVersion = "29.0.2"
|
|
6
6
|
minSdkVersion = 21
|
|
7
|
-
compileSdkVersion =
|
|
8
|
-
targetSdkVersion =
|
|
7
|
+
compileSdkVersion = 33
|
|
8
|
+
targetSdkVersion = 33
|
|
9
9
|
}
|
|
10
10
|
repositories {
|
|
11
11
|
google()
|
|
12
12
|
jcenter()
|
|
13
13
|
}
|
|
14
14
|
dependencies {
|
|
15
|
-
classpath("com.android.tools.build:gradle:
|
|
15
|
+
classpath("com.android.tools.build:gradle:4.1.2")
|
|
16
16
|
// NOTE: Do not place your application dependencies here; they belong
|
|
17
17
|
// in the individual module build.gradle files
|
|
18
18
|
}
|
package/template/babel.config.js
CHANGED
|
@@ -23,6 +23,8 @@ import AgoraRTC, {
|
|
|
23
23
|
EncryptionMode,
|
|
24
24
|
ILocalTrack,
|
|
25
25
|
ClientRoleOptions,
|
|
26
|
+
CameraVideoTrackInitConfig,
|
|
27
|
+
MicrophoneAudioTrackInitConfig,
|
|
26
28
|
} from 'agora-rtc-sdk-ng';
|
|
27
29
|
import type {
|
|
28
30
|
RtcEngineEvents,
|
|
@@ -46,9 +48,12 @@ type callbackType = (uid?: UID) => void;
|
|
|
46
48
|
declare global {
|
|
47
49
|
interface Window {
|
|
48
50
|
engine: RtcEngine;
|
|
51
|
+
AgoraRTC: typeof AgoraRTC;
|
|
49
52
|
}
|
|
50
53
|
}
|
|
51
54
|
|
|
55
|
+
window.AgoraRTC = AgoraRTC;
|
|
56
|
+
|
|
52
57
|
export enum AREAS {
|
|
53
58
|
/**
|
|
54
59
|
* China.
|
|
@@ -166,6 +171,7 @@ if ($config.LOG_ENABLED) {
|
|
|
166
171
|
}
|
|
167
172
|
|
|
168
173
|
export default class RtcEngine {
|
|
174
|
+
private activeSpeakerUid: number;
|
|
169
175
|
public appId: string;
|
|
170
176
|
// public AgoraRTC: any;
|
|
171
177
|
public client: any | IAgoraRTCClient;
|
|
@@ -178,6 +184,7 @@ export default class RtcEngine {
|
|
|
178
184
|
['RemoteAudioStateChanged', () => null],
|
|
179
185
|
['RemoteVideoStateChanged', () => null],
|
|
180
186
|
['NetworkQuality', () => null],
|
|
187
|
+
['ActiveSpeaker', () => null],
|
|
181
188
|
]);
|
|
182
189
|
public localStream: LocalStream = {};
|
|
183
190
|
public screenStream: ScreenStream = {};
|
|
@@ -185,15 +192,16 @@ export default class RtcEngine {
|
|
|
185
192
|
private inScreenshare: Boolean = false;
|
|
186
193
|
private videoProfile: VideoProfile = '480p_9';
|
|
187
194
|
private isPublished = false;
|
|
188
|
-
private isAudioEnabled =
|
|
189
|
-
private isVideoEnabled =
|
|
195
|
+
private isAudioEnabled = false;
|
|
196
|
+
private isVideoEnabled = false;
|
|
190
197
|
private isAudioPublished = false;
|
|
191
198
|
private isVideoPublished = false;
|
|
192
199
|
private isJoined = false;
|
|
193
|
-
private
|
|
200
|
+
private videoDeviceId = undefined;
|
|
201
|
+
private audioDeviceId = undefined;
|
|
194
202
|
private muteLocalVideoMutex = false;
|
|
195
203
|
private muteLocalAudioMutex = false;
|
|
196
|
-
|
|
204
|
+
private speakerDeviceId = '';
|
|
197
205
|
// Create channel profile and set it here
|
|
198
206
|
|
|
199
207
|
// Create channel profile and set it here
|
|
@@ -214,9 +222,17 @@ export default class RtcEngine {
|
|
|
214
222
|
}
|
|
215
223
|
|
|
216
224
|
async enableAudio(): Promise<void> {
|
|
225
|
+
const audioConfig: MicrophoneAudioTrackInitConfig = {
|
|
226
|
+
bypassWebAudio: Platform.OS == 'web' && isMobileOrTablet(),
|
|
227
|
+
// microphoneId: this.audioDeviceId,
|
|
228
|
+
};
|
|
217
229
|
try {
|
|
218
|
-
let localAudio = await AgoraRTC.createMicrophoneAudioTrack(
|
|
230
|
+
let localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
|
|
219
231
|
this.localStream.audio = localAudio;
|
|
232
|
+
this.audioDeviceId = localAudio
|
|
233
|
+
?.getMediaStreamTrack()
|
|
234
|
+
.getSettings().deviceId;
|
|
235
|
+
this.isAudioEnabled = true;
|
|
220
236
|
} catch (e) {
|
|
221
237
|
let audioError = e;
|
|
222
238
|
e.status = {audioError};
|
|
@@ -234,15 +250,30 @@ export default class RtcEngine {
|
|
|
234
250
|
* The Web SDK directly publishes the local audio stream without processing it through WebAudio.
|
|
235
251
|
*/
|
|
236
252
|
|
|
237
|
-
const audioConfig =
|
|
238
|
-
Platform.OS == 'web' && isMobileOrTablet()
|
|
253
|
+
const audioConfig: MicrophoneAudioTrackInitConfig = {
|
|
254
|
+
bypassWebAudio: Platform.OS == 'web' && isMobileOrTablet(),
|
|
255
|
+
// microphoneId: this.audioDeviceId,
|
|
256
|
+
};
|
|
257
|
+
const videoConfig: CameraVideoTrackInitConfig = {
|
|
258
|
+
encoderConfig: this.videoProfile,
|
|
259
|
+
// cameraId: this.videoDeviceId,
|
|
260
|
+
};
|
|
239
261
|
try {
|
|
240
262
|
let [localAudio, localVideo] =
|
|
241
|
-
await AgoraRTC.createMicrophoneAndCameraTracks(
|
|
242
|
-
|
|
243
|
-
|
|
263
|
+
await AgoraRTC.createMicrophoneAndCameraTracks(
|
|
264
|
+
audioConfig,
|
|
265
|
+
videoConfig,
|
|
266
|
+
);
|
|
244
267
|
this.localStream.audio = localAudio;
|
|
245
268
|
this.localStream.video = localVideo;
|
|
269
|
+
this.audioDeviceId = localAudio
|
|
270
|
+
?.getMediaStreamTrack()
|
|
271
|
+
.getSettings().deviceId;
|
|
272
|
+
this.videoDeviceId = localVideo
|
|
273
|
+
?.getMediaStreamTrack()
|
|
274
|
+
.getSettings().deviceId;
|
|
275
|
+
this.isVideoEnabled = true;
|
|
276
|
+
this.isAudioEnabled = true;
|
|
246
277
|
} catch (e) {
|
|
247
278
|
let audioError = false;
|
|
248
279
|
let videoError = false;
|
|
@@ -250,14 +281,20 @@ export default class RtcEngine {
|
|
|
250
281
|
let localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
|
|
251
282
|
|
|
252
283
|
this.localStream.audio = localAudio;
|
|
284
|
+
this.audioDeviceId = localAudio
|
|
285
|
+
?.getMediaStreamTrack()
|
|
286
|
+
.getSettings().deviceId;
|
|
287
|
+
this.isAudioEnabled = true;
|
|
253
288
|
} catch (error) {
|
|
254
289
|
audioError = error;
|
|
255
290
|
}
|
|
256
291
|
try {
|
|
257
|
-
let localVideo = await AgoraRTC.createCameraVideoTrack(
|
|
258
|
-
encoderConfig: this.videoProfile,
|
|
259
|
-
});
|
|
292
|
+
let localVideo = await AgoraRTC.createCameraVideoTrack(videoConfig);
|
|
260
293
|
this.localStream.video = localVideo;
|
|
294
|
+
this.videoDeviceId = localVideo
|
|
295
|
+
?.getMediaStreamTrack()
|
|
296
|
+
.getSettings().deviceId;
|
|
297
|
+
this.isVideoEnabled = true;
|
|
261
298
|
} catch (error) {
|
|
262
299
|
videoError = error;
|
|
263
300
|
}
|
|
@@ -271,6 +308,11 @@ export default class RtcEngine {
|
|
|
271
308
|
}
|
|
272
309
|
}
|
|
273
310
|
|
|
311
|
+
async enableAudioVolumeIndication(interval, smooth, isLocal) {
|
|
312
|
+
AgoraRTC.setParameter('AUDIO_VOLUME_INDICATION_INTERVAL', interval);
|
|
313
|
+
this.client.enableAudioVolumeIndicator();
|
|
314
|
+
}
|
|
315
|
+
|
|
274
316
|
async publish() {
|
|
275
317
|
if (this.localStream.audio || this.localStream.video) {
|
|
276
318
|
try {
|
|
@@ -360,6 +402,12 @@ export default class RtcEngine {
|
|
|
360
402
|
...this.remoteStreams.get(user.uid),
|
|
361
403
|
audio: audioTrack,
|
|
362
404
|
});
|
|
405
|
+
if (this.speakerDeviceId) {
|
|
406
|
+
// setting sepeaker for all remote stream (newly joining user)
|
|
407
|
+
this.remoteStreams
|
|
408
|
+
.get(user.uid)
|
|
409
|
+
?.audio?.setPlaybackDevice(this.speakerDeviceId);
|
|
410
|
+
}
|
|
363
411
|
(this.eventsMap.get('RemoteAudioStateChanged') as callbackType)(
|
|
364
412
|
user.uid,
|
|
365
413
|
2,
|
|
@@ -404,6 +452,36 @@ export default class RtcEngine {
|
|
|
404
452
|
}
|
|
405
453
|
});
|
|
406
454
|
|
|
455
|
+
this.client.on('volume-indicator', (volumes) => {
|
|
456
|
+
const highestvolumeObj = volumes.reduce(
|
|
457
|
+
(highestVolume, volume, index) => {
|
|
458
|
+
if (highestVolume === null) {
|
|
459
|
+
return volume;
|
|
460
|
+
} else {
|
|
461
|
+
if (volume.level > highestVolume.level) {
|
|
462
|
+
return volume;
|
|
463
|
+
}
|
|
464
|
+
return highestVolume;
|
|
465
|
+
}
|
|
466
|
+
// console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
|
|
467
|
+
},
|
|
468
|
+
null,
|
|
469
|
+
);
|
|
470
|
+
const activeSpeakerUid =
|
|
471
|
+
highestvolumeObj && highestvolumeObj?.level > 0 && highestvolumeObj?.uid
|
|
472
|
+
? highestvolumeObj.uid
|
|
473
|
+
: undefined;
|
|
474
|
+
|
|
475
|
+
//To avoid infinite calling dispatch checking if condition.
|
|
476
|
+
if (this.activeSpeakerUid !== activeSpeakerUid) {
|
|
477
|
+
const activeSpeakerCallBack = this.eventsMap.get(
|
|
478
|
+
'ActiveSpeaker',
|
|
479
|
+
) as callbackType;
|
|
480
|
+
activeSpeakerCallBack(activeSpeakerUid);
|
|
481
|
+
this.activeSpeakerUid = activeSpeakerUid;
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
|
|
407
485
|
// this.client.on('stream-fallback', (evt))
|
|
408
486
|
this.client.on('stream-type-changed', function (uid, streamType) {
|
|
409
487
|
console.log('[fallback]: ', uid, streamType);
|
|
@@ -468,7 +546,8 @@ export default class RtcEngine {
|
|
|
468
546
|
event === 'ScreenshareStopped' ||
|
|
469
547
|
event === 'RemoteAudioStateChanged' ||
|
|
470
548
|
event === 'RemoteVideoStateChanged' ||
|
|
471
|
-
event === 'NetworkQuality'
|
|
549
|
+
event === 'NetworkQuality' ||
|
|
550
|
+
event === 'ActiveSpeaker'
|
|
472
551
|
) {
|
|
473
552
|
this.eventsMap.set(event, listener as callbackType);
|
|
474
553
|
}
|
|
@@ -616,7 +695,7 @@ export default class RtcEngine {
|
|
|
616
695
|
async changeCamera(cameraId, callback, error): Promise<void> {
|
|
617
696
|
try {
|
|
618
697
|
await this.localStream.video?.setDevice(cameraId);
|
|
619
|
-
this.
|
|
698
|
+
this.videoDeviceId = cameraId;
|
|
620
699
|
callback(cameraId);
|
|
621
700
|
} catch (e) {
|
|
622
701
|
error(e);
|
|
@@ -628,9 +707,9 @@ export default class RtcEngine {
|
|
|
628
707
|
const devices = await AgoraRTC.getDevices(true);
|
|
629
708
|
for (let i = 0; i < devices.length; i++) {
|
|
630
709
|
let d = devices[i];
|
|
631
|
-
if (d.kind === 'videoinput' && d.deviceId !== this.
|
|
710
|
+
if (d.kind === 'videoinput' && d.deviceId !== this.videoDeviceId) {
|
|
632
711
|
await this.localStream.video?.setDevice(d.deviceId);
|
|
633
|
-
this.
|
|
712
|
+
this.videoDeviceId = d.deviceId;
|
|
634
713
|
break;
|
|
635
714
|
}
|
|
636
715
|
}
|
|
@@ -642,12 +721,26 @@ export default class RtcEngine {
|
|
|
642
721
|
async changeMic(micId, callback, error) {
|
|
643
722
|
try {
|
|
644
723
|
await this.localStream.audio?.setDevice(micId);
|
|
724
|
+
this.audioDeviceId = micId;
|
|
645
725
|
callback(micId);
|
|
646
726
|
} catch (e) {
|
|
647
727
|
error(e);
|
|
648
728
|
}
|
|
649
729
|
}
|
|
650
730
|
|
|
731
|
+
async changeSpeaker(speakerId, callback, error) {
|
|
732
|
+
try {
|
|
733
|
+
this.speakerDeviceId = speakerId;
|
|
734
|
+
// setting sepeaker for all remote stream (previously joined users)
|
|
735
|
+
this.remoteStreams?.forEach((stream, uid, map) => {
|
|
736
|
+
stream?.audio?.setPlaybackDevice(speakerId);
|
|
737
|
+
});
|
|
738
|
+
callback(speakerId);
|
|
739
|
+
} catch (e) {
|
|
740
|
+
error(e);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
|
|
651
744
|
async enableDualStreamMode(enable: boolean) {
|
|
652
745
|
return this.client[enable ? 'enableDualStream' : 'disableDualStream']();
|
|
653
746
|
// enable
|
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
//hooks used for create/join meeting
|
|
2
|
-
export {default as
|
|
3
|
-
export {default as
|
|
4
|
-
|
|
5
|
-
//mute local audio state
|
|
6
|
-
export {
|
|
7
|
-
MUTE_LOCAL_TYPE,
|
|
8
|
-
default as useMuteToggleLocal,
|
|
9
|
-
} from '../src/utils/useMuteToggleLocal';
|
|
2
|
+
export {default as useCreateRoom} from '../src/utils/useCreateRoom';
|
|
3
|
+
export {default as useJoinRoom} from '../src/utils/useJoinRoom';
|
|
10
4
|
|
|
11
5
|
//remove remote user from the call
|
|
12
6
|
export {default as useRemoteEndcall} from '../src/utils/useRemoteEndCall';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export {
|
|
16
|
-
default as useRemoteMute,
|
|
17
|
-
MUTE_REMOTE_TYPE,
|
|
18
|
-
} from '../src/utils/useRemoteMute';
|
|
7
|
+
//switch camera
|
|
8
|
+
export {default as useSwitchCamera} from '../src/utils/useSwitchCamera';
|
|
19
9
|
|
|
20
10
|
export {controlMessageEnum} from '../src/components/ChatContext';
|
|
21
11
|
//audio/video toggle state
|
|
22
12
|
export {ToggleState} from '../agora-rn-uikit/src/Contexts/PropsContext';
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
useChatUIControls,
|
|
16
|
+
ChatType,
|
|
17
|
+
} from '../src/components/chat-ui/useChatUIControls';
|
|
18
|
+
export type {ChatUIControlsInterface} from '../src/components/chat-ui/useChatUIControls';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Core contexts
|
|
3
3
|
*/
|
|
4
4
|
import {createHook} from 'customization-implementation';
|
|
5
|
-
import {RtcContext,
|
|
5
|
+
import {RtcContext, ContentContext} from '../agora-rn-uikit';
|
|
6
6
|
|
|
7
7
|
// commented for v1 release
|
|
8
8
|
//import {default as DeviceContext} from '../src/components/DeviceContext';
|
|
@@ -14,7 +14,7 @@ export const useRtc = createHook(RtcContext);
|
|
|
14
14
|
/**
|
|
15
15
|
* The Render app state governs the information necessary to render each user content view displayed in the videocall screen.
|
|
16
16
|
*/
|
|
17
|
-
export const
|
|
17
|
+
export const useContent = createHook(ContentContext);
|
|
18
18
|
|
|
19
19
|
export {useLocalUserInfo} from '../src/app-state/useLocalUserInfo';
|
|
20
20
|
|
|
@@ -40,10 +40,8 @@ export type {LayoutContextInterface} from '../src/utils/useLayout';
|
|
|
40
40
|
// export type {ScreenshareContextInterface} from '../src/subComponents/screenshare/useScreenshare';
|
|
41
41
|
export {useRecording} from '../src/subComponents/recording/useRecording';
|
|
42
42
|
export type {RecordingContextInterface} from '../src/subComponents/recording/useRecording';
|
|
43
|
-
export {
|
|
44
|
-
export type {
|
|
45
|
-
export {useChatUIControl} from '../src/components/chat-ui/useChatUIControl';
|
|
46
|
-
export type {ChatUIControlInterface} from '../src/components/chat-ui/useChatUIControl';
|
|
43
|
+
export {useRoomInfo} from '../src/components/room-info/useRoomInfo';
|
|
44
|
+
export type {RoomInfoContextInterface} from '../src/components/room-info/useRoomInfo';
|
|
47
45
|
export {useMessages} from '../src/app-state/useMessages';
|
|
48
46
|
export type {messageInterface} from '../src/app-state/useMessages';
|
|
49
47
|
export {SidePanelType} from '../src/subComponents/SidePanelEnum';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// 1. Import Events
|
|
2
2
|
import Events from '../src/rtm-events-api/Events';
|
|
3
|
-
import {EventSource} from '../src/rtm-events-api';
|
|
3
|
+
import {EventSource, PersistanceLevel} from '../src/rtm-events-api';
|
|
4
4
|
|
|
5
5
|
// 2. Initialize with source "fpe"
|
|
6
6
|
const customEvents = new Events(EventSource.fpe);
|
|
7
7
|
|
|
8
8
|
// 3. export
|
|
9
|
-
export {customEvents};
|
|
9
|
+
export {customEvents, PersistanceLevel};
|
|
@@ -46,7 +46,7 @@ function isComponent(data: any) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
//These keys value are not react component. so doing indexOf and checking whether its function or not
|
|
49
|
-
const ignoreTheseKeys = ['customLayout'
|
|
49
|
+
const ignoreTheseKeys = ['customLayout'];
|
|
50
50
|
|
|
51
51
|
function validateComponents(components: any) {
|
|
52
52
|
for (const key in components) {
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
//Common components
|
|
2
|
-
export {default as HorizontalRule} from '../src/atoms/HorizontalRule';
|
|
3
|
-
export {default as PrimaryButton} from '../src/atoms/PrimaryButton';
|
|
4
|
-
export {default as SecondaryButton} from '../src/atoms/SecondaryButton';
|
|
5
2
|
export {default as TextInput} from '../src/atoms/TextInput';
|
|
6
3
|
//Icons
|
|
7
|
-
export {
|
|
4
|
+
export {Icons} from '../agora-rn-uikit';
|
|
8
5
|
|
|
9
6
|
// commented for v1 release
|
|
10
7
|
//create screen
|
|
@@ -22,24 +19,22 @@ export {default as icons} from '../src/assets/icons';
|
|
|
22
19
|
export {
|
|
23
20
|
ParticipantsView,
|
|
24
21
|
Controls,
|
|
25
|
-
ControlsComponentsArray,
|
|
26
22
|
Navbar,
|
|
27
|
-
NavBarComponentsArray,
|
|
28
23
|
ChatBubble,
|
|
29
|
-
|
|
30
|
-
ChatTextInput,
|
|
24
|
+
ChatInput,
|
|
31
25
|
Chat,
|
|
32
26
|
SettingsView,
|
|
27
|
+
ToolbarComponents,
|
|
33
28
|
} from '../src/pages/video-call/index';
|
|
34
29
|
export {default as GridLayout} from '../src/components/GridVideo';
|
|
35
30
|
export {default as PinnedLayout} from '../src/components/PinnedVideo';
|
|
36
31
|
export {default as VideoComponent} from '../src/pages/video-call/VideoComponent';
|
|
37
32
|
export {default as MaxVideoView} from '../src/pages/video-call/VideoRenderer';
|
|
38
|
-
export {default as RenderComponent} from '../src/pages/video-call/RenderComponent';
|
|
39
33
|
export {default as NameWithMicIcon} from '../src/pages/video-call/NameWithMicIcon';
|
|
40
34
|
export {default as NetworkQualityPill} from '../src/subComponents/NetworkQualityPill';
|
|
41
35
|
//videocall screen
|
|
42
36
|
export {default as VideocallScreen} from '../src/pages/video-call/VideoCallScreen';
|
|
37
|
+
export {default as PrecallScreen} from '../src/components/Precall';
|
|
43
38
|
|
|
44
39
|
// commented for v1 release
|
|
45
40
|
//Settings screen
|
|
@@ -53,10 +48,7 @@ export {default as VideocallScreen} from '../src/pages/video-call/VideoCallScree
|
|
|
53
48
|
//Sidepanel buttons
|
|
54
49
|
export {SidePanelButtonsArray} from '../src/subComponents/SidePanelButtons';
|
|
55
50
|
export {
|
|
56
|
-
ImageIcon as UiKitImageIcon,
|
|
57
51
|
MaxVideoView as UiKitMaxVideoView,
|
|
58
|
-
BtnTemplate as UiKitBtnTemplate,
|
|
59
52
|
ClientRole as UikitClientRole,
|
|
60
53
|
ChannelProfile as UikitChannelProfile,
|
|
61
54
|
} from '../agora-rn-uikit';
|
|
62
|
-
export type {BtnTemplateInterface as UikitBtnTemplateInterface} from '../agora-rn-uikit';
|
|
@@ -13,21 +13,15 @@ import React from 'react';
|
|
|
13
13
|
export type {ChatBubbleProps} from '../src/components/ChatContext';
|
|
14
14
|
import {ChatBubbleProps} from '../src/components/ChatContext';
|
|
15
15
|
import {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
ContentInterface,
|
|
17
|
+
ContentStateInterface,
|
|
18
18
|
UidType,
|
|
19
19
|
} from '../agora-rn-uikit';
|
|
20
20
|
import {I18nInterface} from '../src/language/i18nTypes';
|
|
21
|
-
import {IconsInterface} from '../
|
|
22
|
-
export type {
|
|
23
|
-
export type {
|
|
24
|
-
|
|
25
|
-
ChatSendButtonProps,
|
|
26
|
-
} from '../src/subComponents/ChatInput';
|
|
27
|
-
import {
|
|
28
|
-
ChatTextInputProps,
|
|
29
|
-
ChatSendButtonProps,
|
|
30
|
-
} from '../src/subComponents/ChatInput';
|
|
21
|
+
import {IconsInterface} from '../src/atoms/CustomIcon';
|
|
22
|
+
export type {ContentInterface, ContentStateInterface, UidType};
|
|
23
|
+
export type {ChatTextInputProps} from '../src/subComponents/ChatInput';
|
|
24
|
+
import {ChatTextInputProps} from '../src/subComponents/ChatInput';
|
|
31
25
|
|
|
32
26
|
export const CUSTOM_ROUTES_PREFIX = '/r/';
|
|
33
27
|
|
|
@@ -51,47 +45,30 @@ export interface ChatCmpInterface {
|
|
|
51
45
|
//extends BeforeAndAfterInterface
|
|
52
46
|
chatBubble?: React.ComponentType<ChatBubbleProps>;
|
|
53
47
|
chatInput?: React.ComponentType<ChatTextInputProps>;
|
|
54
|
-
chatSendButton?: React.ComponentType<ChatSendButtonProps>;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface renderComponentInterface {
|
|
58
|
-
user: RenderInterface;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export interface renderComponentObjectInterface {
|
|
62
|
-
[key: string]: React.ComponentType<renderComponentInterface>;
|
|
63
48
|
}
|
|
64
49
|
|
|
65
50
|
export type layoutComponent = React.ComponentType<{
|
|
66
|
-
renderData:
|
|
51
|
+
renderData: ContentStateInterface['activeUids'];
|
|
67
52
|
}>;
|
|
68
53
|
|
|
69
|
-
export interface
|
|
54
|
+
export interface layoutItem {
|
|
70
55
|
name: string;
|
|
71
56
|
label: string;
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export interface layoutObjectWithIcon extends layoutObjectBase {
|
|
76
|
-
icon: string;
|
|
77
|
-
iconName?: never;
|
|
78
|
-
}
|
|
79
|
-
export interface layoutObjectWithIconName extends layoutObjectBase {
|
|
80
|
-
icon?: never;
|
|
57
|
+
//todo: hari change iconName into icon and refactor icon lib
|
|
81
58
|
iconName: keyof IconsInterface;
|
|
59
|
+
component: layoutComponent;
|
|
82
60
|
}
|
|
83
|
-
export type layoutObjectType = layoutObjectWithIcon | layoutObjectWithIconName;
|
|
84
61
|
|
|
85
62
|
export interface VideoCallInterface extends BeforeAndAfterInterface {
|
|
86
63
|
// commented for v1 release
|
|
87
|
-
|
|
64
|
+
topToolBar?: React.ComponentType;
|
|
65
|
+
bottomToolBar?: React.ComponentType;
|
|
66
|
+
leftToolBar?: React.ComponentType;
|
|
67
|
+
rightToolBar?: React.ComponentType;
|
|
88
68
|
//settingsPanel?: React.ComponentType;
|
|
89
69
|
participantsPanel?: React.ComponentType;
|
|
90
|
-
bottomBar?: React.ComponentType;
|
|
91
70
|
chat?: ChatCmpInterface;
|
|
92
|
-
|
|
93
|
-
customLayout?: (layouts: layoutObjectType[]) => layoutObjectType[];
|
|
94
|
-
useUserContext?: () => void;
|
|
71
|
+
customLayout?: (layouts: layoutItem[]) => layoutItem[];
|
|
95
72
|
}
|
|
96
73
|
|
|
97
74
|
export type ComponentsInterface = {
|
|
@@ -9,25 +9,43 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import React, {
|
|
12
|
+
import React, {useContext} from 'react';
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
*
|
|
15
15
|
* @param context - any context data which we want to extract the data.
|
|
16
16
|
* @returns useContextWithSelector in which we can pass selector function to extract data from the context that we passed.
|
|
17
17
|
*/
|
|
18
18
|
function createHook<T>(context: React.Context<T>) {
|
|
19
|
-
|
|
20
19
|
function useContextWithSelector<U>(contextSelector: (data: T) => U): U;
|
|
21
20
|
function useContextWithSelector(): T;
|
|
22
21
|
/**
|
|
23
|
-
*
|
|
22
|
+
*
|
|
24
23
|
* @param contextSelector is used to pass callback function used to select data from the context data
|
|
25
24
|
* @returns the data selected from the context
|
|
26
25
|
*/
|
|
27
26
|
function useContextWithSelector<U>(contextSelector?: (data: T) => U): U | T {
|
|
28
27
|
const data = useContext(context);
|
|
29
|
-
return contextSelector ? contextSelector(data) : data
|
|
28
|
+
return contextSelector ? contextSelector(data) : data;
|
|
30
29
|
}
|
|
31
30
|
return useContextWithSelector;
|
|
32
31
|
}
|
|
33
|
-
|
|
32
|
+
|
|
33
|
+
export function createConcealedHook<T, V>(
|
|
34
|
+
context: React.Context<T>,
|
|
35
|
+
preselect: (data: T) => V,
|
|
36
|
+
) {
|
|
37
|
+
function useContextWithSelector<U>(contextSelector: (data: V) => U): U;
|
|
38
|
+
function useContextWithSelector(): V;
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* @param contextSelector is used to pass callback function used to select data from the context data
|
|
42
|
+
* @returns the data selected from the context
|
|
43
|
+
*/
|
|
44
|
+
function useContextWithSelector<U>(contextSelector?: (data: V) => U): U | V {
|
|
45
|
+
const data = useContext(context);
|
|
46
|
+
return contextSelector ? contextSelector(preselect(data)) : preselect(data);
|
|
47
|
+
}
|
|
48
|
+
return useContextWithSelector;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export default createHook;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {default as createHook} from './createHook';
|
|
1
|
+
export {default as createHook, createConcealedHook} from './createHook';
|
|
2
2
|
export {CustomizationProvider, useCustomization} from './useCustomization';
|
|
3
3
|
export type {CustomizationProviderProps} from './useCustomization';
|
|
4
4
|
export {default as customizationConfig} from 'customization';
|
|
@@ -9,22 +9,20 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
import React from 'react';
|
|
12
|
+
import React, {useContext} from 'react';
|
|
13
13
|
import {CustomizationApiInterface} from 'customization-api';
|
|
14
14
|
import customizationConfig from 'customization';
|
|
15
15
|
import createHook from './createHook';
|
|
16
|
+
import {SdkApiContext} from '../src/components/SdkApiContext';
|
|
16
17
|
|
|
17
18
|
const CustomizationContext: React.Context<CustomizationApiInterface> =
|
|
18
19
|
React.createContext(customizationConfig);
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
value: CustomizationApiInterface;
|
|
23
|
-
}
|
|
21
|
+
const CustomizationProvider: React.FC = (props) => {
|
|
22
|
+
const {customize: userCustomization} = useContext(SdkApiContext);
|
|
24
23
|
|
|
25
|
-
const CustomizationProvider = (props: CustomizationProviderProps) => {
|
|
26
24
|
return (
|
|
27
|
-
<CustomizationContext.Provider value={
|
|
25
|
+
<CustomizationContext.Provider value={userCustomization.customization}>
|
|
28
26
|
{props.children}
|
|
29
27
|
</CustomizationContext.Provider>
|
|
30
28
|
);
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang="en">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
</html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
7
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
8
|
+
<link
|
|
9
|
+
href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap"
|
|
10
|
+
rel="stylesheet"
|
|
11
|
+
/>
|
|
12
|
+
<base href="./" />
|
|
13
|
+
<title><%= htmlWebpackPlugin.options.title %></title>
|
|
14
|
+
</head>
|
|
15
|
+
<body>
|
|
16
|
+
<style>
|
|
17
|
+
.video-container > * {
|
|
18
|
+
background-color: #000 !important;
|
|
19
|
+
}
|
|
20
|
+
.video-container video {
|
|
21
|
+
background-color: #000;
|
|
22
|
+
}
|
|
23
|
+
.video-container {
|
|
24
|
+
background-color: #000;
|
|
25
|
+
}
|
|
26
|
+
</style>
|
|
27
|
+
<div id="react-app" style="height: 100vh; display: flex"></div>
|
|
28
|
+
</body>
|
|
29
|
+
</html>
|