agora-appbuilder-core 4.0.0-api.4 → 4.0.0-api.6
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/package.json +2 -2
- package/template/.bundle/config +2 -0
- package/template/Gemfile +4 -0
- package/template/Gulpfile.js +29 -29
- package/template/_eslintrc.js +3 -3
- package/template/_gitignore +12 -11
- package/template/_package-lock.json +26471 -22749
- package/template/_prettierrc.js +2 -2
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +30 -10
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +19 -0
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
- package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
- package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
- package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
- package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +1 -0
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +1 -0
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +1 -0
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +1 -0
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +1 -0
- package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +3 -1
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +3 -1
- package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +1 -1
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +3 -3
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +5 -4
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -1
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +8 -5
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -1
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -1
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -1
- package/template/agora-rn-uikit/src/Reducer/UserPin.ts +18 -1
- package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
- package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +47 -21
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +37 -15
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +122 -12
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +32 -4
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +21 -2
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -0
- package/template/android/app/build.gradle +59 -156
- package/template/android/app/src/debug/AndroidManifest.xml +6 -1
- package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
- package/template/android/app/src/main/AndroidManifest.xml +6 -19
- package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
- package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
- package/template/android/app/src/main/java/com/helloworld/MainApplication.java +19 -36
- package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
- package/template/android/build.gradle +19 -33
- package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
- package/template/android/gradle.properties +18 -4
- package/template/android/gradlew +165 -104
- package/template/android/gradlew.bat +12 -23
- package/template/android/settings.gradle +1 -0
- package/template/bridge/rtc/webNg/RtcEngine.ts +131 -16
- package/template/bridge/rtc/webNg/index.ts +72 -1
- package/template/bridge/rtm/web/index.ts +5 -3
- package/template/configTransform.js +16 -1
- package/template/customization-api/action-library.ts +0 -8
- package/template/customization-api/app-state.ts +11 -2
- package/template/customization-api/customEvents.ts +6 -1
- package/template/customization-api/index.ts +4 -0
- package/template/customization-api/sub-components.ts +6 -3
- package/template/customization-api/temp.ts +50 -0
- package/template/customization-api/typeDefinition.ts +26 -14
- package/template/customization-api/types.ts +26 -0
- package/template/customization-api/utils.ts +2 -0
- package/template/customization-implementation/index.ts +0 -1
- package/template/defaultConfig.js +72 -0
- package/template/global.d.ts +13 -1
- package/template/index.js +0 -4
- package/template/index.web.js +0 -5
- package/template/index.wsdk.tsx +1 -19
- package/template/ios/.xcode.env +11 -0
- package/template/ios/HelloWorld/AppDelegate.h +2 -4
- package/template/ios/HelloWorld/AppDelegate.mm +42 -0
- package/template/ios/HelloWorld/Info.plist +1 -1
- package/template/ios/HelloWorld/main.m +2 -1
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +529 -17
- package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
- package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
- package/template/ios/HelloWorldTests/Info.plist +2 -2
- package/template/ios/Podfile +53 -20
- package/template/ios/Podfile.lock +873 -0
- package/template/ios/ScreenSharing/Info.plist +15 -0
- package/template/ios/ScreenSharing/SampleHandler.h +9 -0
- package/template/ios/ScreenSharing/SampleHandler.m +70 -0
- package/template/jest.config.js +4 -0
- package/template/metro.config.js +7 -32
- package/template/package.json +52 -39
- package/template/react-native-toast-message/index.d.ts +3 -1
- package/template/react-native-toast-message/index.js +1 -0
- package/template/react-native-toast-message/src/components/base/index.js +20 -32
- package/template/react-native-toast-message/src/components/base/styles.js +18 -21
- package/template/react-native-toast-message/src/components/checkbox.js +24 -19
- package/template/react-native-toast-message/src/index.js +3 -1
- package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
- package/template/src/App.tsx +13 -85
- package/template/src/AppRoutes.tsx +77 -0
- package/template/src/AppWrapper.tsx +38 -33
- package/template/src/SDKAppWrapper.tsx +79 -43
- package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
- package/template/src/app-state/useNoiseSupression.tsx +107 -0
- package/template/src/app-state/useVideoQuality.tsx +39 -0
- package/template/src/assets/font-styles.css +171 -3
- package/template/src/assets/fonts/icomoon.ttf +0 -0
- package/template/src/assets/selection.json +1 -1
- package/template/src/atoms/ActionMenu.tsx +50 -11
- package/template/src/atoms/Avatar.tsx +51 -0
- package/template/src/atoms/Card.tsx +21 -8
- package/template/src/atoms/Carousel.native.tsx +105 -0
- package/template/src/atoms/Carousel.tsx +103 -0
- package/template/src/atoms/Checkbox.tsx +98 -0
- package/template/src/atoms/CircularProgress.tsx +0 -1
- package/template/src/atoms/ClipboardIconButton.tsx +91 -0
- package/template/src/atoms/CustomIcon.tsx +45 -0
- package/template/src/atoms/DropDownMulti.tsx +349 -0
- package/template/src/atoms/Dropdown.tsx +3 -3
- package/template/src/atoms/IconButton.tsx +52 -9
- package/template/src/atoms/ImageIcon.tsx +6 -3
- package/template/src/atoms/InlineNotification.tsx +81 -0
- package/template/src/atoms/MeetingLink.tsx +160 -0
- package/template/src/atoms/ParticipantsCount.tsx +18 -7
- package/template/src/atoms/Popup.tsx +49 -27
- package/template/src/atoms/PrimaryButton.tsx +19 -5
- package/template/src/atoms/RecordingInfo.tsx +3 -3
- package/template/src/atoms/SecondaryButton.tsx +2 -0
- package/template/src/atoms/Spacer.tsx +1 -0
- package/template/src/atoms/TertiaryButton.tsx +35 -5
- package/template/src/atoms/TextInput.tsx +2 -1
- package/template/src/atoms/Toolbar.tsx +64 -30
- package/template/src/atoms/ToolbarItem.tsx +48 -26
- package/template/src/atoms/ToolbarPreset.tsx +38 -6
- package/template/src/atoms/Tooltip.tsx +26 -4
- package/template/src/auth/AuthProvider.tsx +500 -0
- package/template/src/auth/AuthRoute.tsx +94 -0
- package/template/src/auth/IDPAuth.electron.tsx +31 -0
- package/template/src/auth/IDPAuth.tsx +67 -0
- package/template/src/auth/IDPLogoutComponent.tsx +158 -0
- package/template/src/auth/UserCancelPopup.tsx +115 -0
- package/template/src/auth/config.ts +52 -0
- package/template/src/auth/openIDPURL.electron.tsx +39 -0
- package/template/src/auth/openIDPURL.native.tsx +51 -0
- package/template/src/auth/openIDPURL.tsx +20 -0
- package/template/src/auth/useIDPAuth.electron.tsx +65 -0
- package/template/src/auth/useIDPAuth.native.tsx +70 -0
- package/template/src/auth/useIDPAuth.tsx +63 -0
- package/template/src/auth/useTokenAuth.tsx +194 -0
- package/template/src/components/Chat.tsx +5 -8
- package/template/src/components/ChatContext.ts +4 -0
- package/template/src/components/ColorConfigure.tsx +0 -1
- package/template/src/components/CommonStyles.ts +9 -2
- package/template/src/components/Controls.tsx +664 -56
- package/template/src/components/DeviceConfigure.tsx +362 -156
- package/template/src/components/DeviceContext.tsx +2 -0
- package/template/src/components/EventsConfigure.tsx +713 -109
- package/template/src/components/GraphQLProvider.tsx +62 -36
- package/template/src/components/GridVideo.tsx +23 -13
- package/template/src/components/HostControlView.tsx +11 -14
- package/template/src/components/JoinPhrase.tsx +0 -1
- package/template/src/components/Leftbar.tsx +9 -7
- package/template/src/components/Navbar.tsx +115 -46
- package/template/src/components/NavbarMobile.tsx +119 -0
- package/template/src/components/Navigation.native.tsx +1 -15
- package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → components/Navigation.sdk.tsx} +17 -3
- package/template/src/components/Navigation.tsx +1 -15
- package/template/src/components/ParticipantsView.tsx +56 -48
- package/template/src/components/PinnedVideo.tsx +188 -114
- package/template/src/components/Precall.native.tsx +169 -67
- package/template/src/components/Precall.tsx +237 -71
- package/template/src/components/RTMConfigure.tsx +167 -55
- package/template/src/components/Rightbar.tsx +9 -7
- 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 +179 -27
- package/template/src/components/SdkMuteToggleListener.tsx +88 -0
- package/template/src/components/SessionContext.tsx +0 -1
- package/template/src/components/Settings.tsx +25 -3
- package/template/src/components/SettingsView.tsx +44 -9
- package/template/src/components/Share.tsx +149 -71
- package/template/src/components/StorageContext.tsx +19 -5
- package/template/src/components/ToastComponent.tsx +3 -0
- package/template/src/components/WhiteboardLayout.tsx +291 -0
- package/template/src/components/chat-messages/useChatMessages.tsx +420 -207
- package/template/src/components/common/Error.tsx +2 -0
- package/template/src/components/common/Logo.tsx +2 -2
- package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -4
- package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
- package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
- package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
- package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
- package/template/src/components/livestream/LiveStreamContext.tsx +262 -177
- package/template/src/components/livestream/Types.ts +34 -18
- package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
- package/template/src/components/livestream/views/LiveStreamControls.tsx +2 -4
- package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
- package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
- package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
- package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
- package/template/src/components/participants/AllAudienceParticipants.tsx +4 -5
- package/template/src/components/participants/AllHostParticipants.tsx +5 -6
- package/template/src/components/participants/Participant.tsx +40 -9
- package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
- package/template/src/components/participants/ScreenshareParticipants.tsx +15 -17
- package/template/src/components/participants/UserActionMenuOptions.tsx +157 -49
- package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
- package/template/src/components/popups/InvitePopup.tsx +110 -45
- package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
- package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
- package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
- package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
- package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
- package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
- package/template/src/components/precall/LocalMute.tsx +69 -45
- package/template/src/components/precall/PermissionHelper.tsx +52 -24
- package/template/src/components/precall/PreCallSettings.tsx +1 -0
- package/template/src/components/precall/VideoFallback.tsx +173 -0
- package/template/src/components/precall/VideoPreview.native.tsx +16 -50
- package/template/src/components/precall/VideoPreview.tsx +27 -162
- package/template/src/components/precall/index.tsx +2 -0
- package/template/src/components/precall/joinCallBtn.native.tsx +10 -3
- package/template/src/components/precall/joinCallBtn.tsx +11 -2
- package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
- package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
- package/template/src/components/precall/meetingTitle.tsx +35 -9
- package/template/src/components/precall/selectDevice.tsx +5 -5
- package/template/src/components/precall/textInput.tsx +16 -18
- package/template/src/components/precall/usePreCall.tsx +14 -4
- package/template/src/components/room-info/useRoomInfo.tsx +34 -0
- package/template/src/components/useShareLink.tsx +24 -59
- package/template/src/components/useUserPreference.tsx +73 -10
- package/template/src/components/useVideoCall.tsx +76 -3
- package/template/src/components/virtual-background/VBButton.tsx +64 -0
- package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
- package/template/src/components/virtual-background/VBCard.tsx +272 -0
- package/template/src/components/virtual-background/VBPanel.tsx +279 -0
- package/template/src/components/virtual-background/VButils.native.ts +37 -0
- package/template/src/components/virtual-background/VButils.ts +104 -0
- package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
- package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
- package/template/src/components/virtual-background/imagePaths.ts +87 -0
- package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/index.ts +37 -0
- package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
- package/template/src/components/virtual-background/useVB.native.tsx +188 -0
- package/template/src/components/virtual-background/useVB.tsx +267 -0
- package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
- package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
- package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
- package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +137 -0
- package/template/src/components/whiteboard/WhiteboardConfigure.tsx +441 -0
- package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
- package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
- package/template/src/components/whiteboard/WhiteboardView.native.tsx +109 -0
- package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
- package/template/src/components/whiteboard/WhiteboardWidget.tsx +674 -0
- package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
- package/template/src/language/default-labels/commonLabels.ts +51 -14
- package/template/src/language/default-labels/createScreenLabels.ts +97 -17
- package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
- package/template/src/language/default-labels/precallScreenLabels.ts +145 -23
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
- package/template/src/language/default-labels/videoCallScreenLabels.ts +1137 -158
- package/template/src/pages/Create.tsx +125 -80
- package/template/src/pages/Join.tsx +76 -34
- package/template/src/pages/Login.tsx +26 -0
- package/template/src/pages/VideoCall.tsx +229 -114
- package/template/src/pages/video-call/ActionSheet.native.tsx +54 -6
- package/template/src/pages/video-call/ActionSheet.tsx +55 -15
- package/template/src/pages/video-call/ActionSheetContent.tsx +495 -306
- package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
- package/template/src/pages/video-call/DefaultLayouts.ts +11 -5
- package/template/src/pages/video-call/NameWithMicIcon.tsx +17 -9
- package/template/src/pages/video-call/PinchableView.tsx +119 -0
- package/template/src/pages/video-call/RenderComponent.tsx +12 -3
- package/template/src/pages/video-call/SidePanelHeader.tsx +208 -6
- package/template/src/pages/video-call/VideoCallMobileView.tsx +201 -82
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
- package/template/src/pages/video-call/VideoCallScreen.tsx +116 -41
- package/template/src/pages/video-call/VideoComponent.tsx +53 -5
- package/template/src/pages/video-call/VideoRenderer.tsx +309 -52
- package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
- package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
- package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
- package/template/src/pages/video-call/index.ts +2 -0
- package/template/src/rtm/RTMEngine.ts +9 -4
- package/template/src/rtm-events/constants.ts +20 -0
- package/template/src/rtm-events-api/Events.ts +2 -0
- package/template/src/rtm-events-api/LocalEvents.ts +8 -0
- package/template/src/selection.json +1 -0
- package/template/src/subComponents/ChatBubble.tsx +81 -64
- package/template/src/subComponents/ChatContainer.tsx +20 -13
- package/template/src/subComponents/ChatInput.ios.tsx +11 -2
- package/template/src/subComponents/ChatInput.tsx +12 -3
- package/template/src/subComponents/Checkbox.native.tsx +46 -46
- package/template/src/subComponents/Checkbox.tsx +7 -6
- package/template/src/subComponents/CopyJoinInfo.tsx +26 -11
- package/template/src/subComponents/EndcallPopup.tsx +83 -12
- package/template/src/subComponents/LanguageSelector.tsx +34 -30
- package/template/src/subComponents/LayoutIconButton.tsx +30 -8
- package/template/src/subComponents/LayoutIconDropdown.tsx +19 -3
- package/template/src/subComponents/Loading.tsx +60 -0
- package/template/src/subComponents/LocalAudioMute.tsx +106 -30
- package/template/src/subComponents/LocalEndCall.tsx +91 -15
- package/template/src/subComponents/LocalSwitchCamera.tsx +50 -11
- package/template/src/subComponents/LocalVideoMute.tsx +126 -32
- package/template/src/subComponents/LogoutButton.tsx +1 -1
- package/template/src/subComponents/NetworkQualityPill.tsx +14 -31
- package/template/src/subComponents/Recording.tsx +23 -6
- package/template/src/subComponents/RemoteAudioMute.tsx +3 -3
- package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
- package/template/src/subComponents/RemoteVideoMute.tsx +3 -3
- package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
- package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
- package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
- package/template/src/subComponents/SelectDevice.tsx +98 -32
- package/template/src/subComponents/SidePanelEnum.tsx +2 -0
- package/template/src/subComponents/SidePanelHeader.tsx +97 -63
- package/template/src/subComponents/ToastConfig.tsx +70 -61
- package/template/src/subComponents/caption/Caption.tsx +130 -0
- package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
- package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
- package/template/src/subComponents/caption/CaptionText.tsx +182 -0
- package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
- package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
- package/template/src/subComponents/caption/Transcript.tsx +449 -0
- package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
- package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
- package/template/src/subComponents/caption/index.ts +3 -0
- package/template/src/subComponents/caption/proto/ptoto.js +91 -0
- package/template/src/subComponents/caption/proto/test.proto +23 -0
- package/template/src/subComponents/caption/useCaption.tsx +123 -0
- package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
- package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
- package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
- package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
- package/template/src/subComponents/caption/useTranscriptDownload.native.ts +68 -0
- package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
- package/template/src/subComponents/caption/utils.ts +125 -0
- package/template/src/subComponents/chat/ChatParticipants.tsx +53 -17
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +11 -13
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -9
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +1 -0
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
- package/template/src/subComponents/recording/useRecording.tsx +49 -20
- package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +29 -10
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +270 -66
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +182 -95
- package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
- package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
- package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
- package/template/src/theme/index.ts +9 -0
- package/template/src/utils/SdkEvents.ts +14 -0
- package/template/src/utils/SdkMethodEvents.ts +23 -3
- package/template/src/utils/axiomLogger.ts +117 -0
- package/template/src/utils/book.jpg +0 -0
- package/template/src/utils/common.tsx +118 -6
- package/template/src/utils/endCallEveryOne.ts +7 -0
- package/template/src/utils/getCustomRoute.ts +7 -0
- package/template/src/utils/index.tsx +23 -0
- package/template/src/utils/useActionSheet.tsx +50 -0
- package/template/src/utils/useActiveSpeaker.ts +3 -7
- package/template/src/utils/useAppState.ts +17 -0
- package/template/src/utils/useAsyncEffect.ts +138 -0
- package/template/src/utils/useCreateRoom.ts +8 -12
- package/template/src/utils/useDisableButton.tsx +37 -0
- package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
- package/template/src/utils/useFindActiveSpeaker.ts +335 -0
- package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
- package/template/src/utils/useIsLocalUserSpeaking.ts +98 -0
- package/template/src/utils/useJoinRoom.ts +97 -36
- package/template/src/utils/useMuteToggleLocal.ts +114 -96
- package/template/src/utils/useString.ts +13 -3
- package/template/static.d.ts +42 -0
- package/template/tsconfig_rsdk_index.json +3 -3
- package/template/tsconfig_wsdk_index.json +1 -1
- package/template/web/index.html +20 -0
- package/template/webpack.commons.js +21 -10
- package/template/webpack.web.config.js +7 -3
- package/template/_buckconfig +0 -6
- package/template/_gitattributes +0 -1
- package/template/android/app/_BUCK +0 -55
- package/template/android/app/build_defs.bzl +0 -19
- package/template/ios/HelloWorld/AppDelegate.m +0 -74
- package/template/src/components/OAuth.electron.tsx +0 -41
- package/template/src/components/OAuth.native.tsx +0 -55
- package/template/src/components/OAuth.tsx +0 -30
- package/template/src/components/OAuthConfig.ts +0 -77
- package/template/src/components/Settings.native.tsx +0 -21
- package/template/src/components/StoreToken.tsx +0 -39
package/template/_prettierrc.js
CHANGED
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
12
|
module.exports = {
|
|
13
|
+
arrowParens: 'avoid',
|
|
14
|
+
bracketSameLine: true,
|
|
13
15
|
bracketSpacing: false,
|
|
14
|
-
jsxBracketSameLine: true,
|
|
15
16
|
singleQuote: true,
|
|
16
17
|
trailingComma: 'all',
|
|
17
|
-
endOfLine:"auto"
|
|
18
18
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import {StyleProp, ViewStyle} from 'react-native';
|
|
3
|
-
import {RtcEngineEvents} from 'react-native-agora/lib/typescript/
|
|
3
|
+
import {RtcEngineEvents} from 'react-native-agora/lib/typescript/common/RtcEvents';
|
|
4
4
|
import {EncryptionMode} from 'react-native-agora';
|
|
5
5
|
import {VideoProfile} from '../Utils/quality';
|
|
6
6
|
import {UidType} from './RtcContext';
|
|
@@ -46,14 +46,26 @@ export const toggleHelper = (state: ToggleState) =>
|
|
|
46
46
|
state === ToggleState.enabled ? ToggleState.disabled : ToggleState.enabled;
|
|
47
47
|
|
|
48
48
|
export interface DefaultContentInterface {
|
|
49
|
+
//uikit and core
|
|
49
50
|
uid: UidType;
|
|
50
51
|
audio: ToggleState;
|
|
51
52
|
video: ToggleState;
|
|
52
53
|
streamType: 'high' | 'low';
|
|
53
54
|
type: 'rtc';
|
|
54
55
|
permissionStatus?: PermissionState;
|
|
56
|
+
localAudioForceDisabled?: boolean;
|
|
57
|
+
localVideoForceDisabled?: boolean;
|
|
55
58
|
//applicable only to the screenshare
|
|
56
59
|
parentUid?: UidType;
|
|
60
|
+
//uikit and core
|
|
61
|
+
|
|
62
|
+
//core only
|
|
63
|
+
name: string;
|
|
64
|
+
screenUid: number;
|
|
65
|
+
offline: boolean;
|
|
66
|
+
lastMessageTimeStamp: number;
|
|
67
|
+
isInWaitingRoom?: boolean;
|
|
68
|
+
//core only
|
|
57
69
|
}
|
|
58
70
|
export interface CustomContentInterface<T> {
|
|
59
71
|
type: T extends DefaultContentInterface['type'] ? never : T;
|
|
@@ -110,10 +122,8 @@ export interface RtcPropsInterface {
|
|
|
110
122
|
callActive?: boolean;
|
|
111
123
|
encryption?: {
|
|
112
124
|
key: string;
|
|
113
|
-
mode:
|
|
114
|
-
|
|
115
|
-
| EncryptionMode.AES256XTS
|
|
116
|
-
| EncryptionMode.AES128ECB;
|
|
125
|
+
mode: EncryptionMode.AES128GCM2 | EncryptionMode.AES128GCM2;
|
|
126
|
+
salt: number[];
|
|
117
127
|
};
|
|
118
128
|
// commented for v1 release
|
|
119
129
|
// lifecycle?: {
|
|
@@ -123,10 +133,16 @@ export interface RtcPropsInterface {
|
|
|
123
133
|
geoFencing?: boolean;
|
|
124
134
|
audioRoom?: boolean;
|
|
125
135
|
activeSpeaker?: boolean;
|
|
136
|
+
preventJoin?: boolean;
|
|
137
|
+
|
|
138
|
+
//core only
|
|
139
|
+
screenShareUid?: number;
|
|
140
|
+
screenShareToken?: string;
|
|
141
|
+
//core only
|
|
126
142
|
}
|
|
127
143
|
|
|
128
144
|
export interface CallbacksInterface {
|
|
129
|
-
EndCall(): void; //?
|
|
145
|
+
EndCall(isHost: boolean, isTriggeredByHost: boolean): void; //?
|
|
130
146
|
FullScreen(): void; //?
|
|
131
147
|
SwitchCamera(): void; //Not in reducer
|
|
132
148
|
UpdateDualStreamMode(mode: DualStreamMode): void;
|
|
@@ -136,8 +152,8 @@ export interface CallbacksInterface {
|
|
|
136
152
|
DequeVideo(uid: UidType): void;
|
|
137
153
|
UserMuteRemoteAudio(uid: UidType, muted: ContentInterface['audio']): void;
|
|
138
154
|
UserMuteRemoteVideo(uid: UidType, muted: ContentInterface['video']): void;
|
|
139
|
-
LocalMuteAudio(muted: ToggleState): void;
|
|
140
|
-
LocalMuteVideo(muted: ToggleState): void;
|
|
155
|
+
LocalMuteAudio(muted: ToggleState, forceDisabled?: boolean): void;
|
|
156
|
+
LocalMuteVideo(muted: ToggleState, forceDisabled?: boolean): void;
|
|
141
157
|
LocalPermissionState(
|
|
142
158
|
permissionState: ContentInterface['permissionStatus'],
|
|
143
159
|
): void;
|
|
@@ -146,7 +162,10 @@ export interface CallbacksInterface {
|
|
|
146
162
|
JoinChannelSuccess: RtcEngineEvents['JoinChannelSuccess'];
|
|
147
163
|
UpdateRenderList(uid: UidType, user: Partial<ContentInterface>): void;
|
|
148
164
|
AddCustomContent(uid: UidType, data: any): void;
|
|
165
|
+
RemoveCustomContent(uid: UidType): void;
|
|
149
166
|
UserPin(Uid: UidType): void;
|
|
167
|
+
UserSecondaryPin(Uid: UidType): void;
|
|
168
|
+
ActiveSpeaker(Uid: UidType): void;
|
|
150
169
|
}
|
|
151
170
|
|
|
152
171
|
export type CustomCallbacksInterface = CallbacksInterface;
|
|
@@ -158,16 +177,17 @@ export interface PropsInterface {
|
|
|
158
177
|
mode?: ChannelProfile;
|
|
159
178
|
}
|
|
160
179
|
|
|
161
|
-
const initialValue: PropsInterface = {
|
|
180
|
+
const initialValue: Partial<PropsInterface> = {
|
|
162
181
|
rtcProps: {
|
|
163
182
|
appId: '',
|
|
164
183
|
channel: '',
|
|
165
184
|
geoFencing: true,
|
|
166
185
|
audioRoom: false,
|
|
186
|
+
preventJoin: true,
|
|
167
187
|
},
|
|
168
188
|
};
|
|
169
189
|
|
|
170
|
-
const PropsContext = React.createContext<PropsInterface
|
|
190
|
+
const PropsContext = React.createContext<Partial<PropsInterface>>(initialValue);
|
|
171
191
|
|
|
172
192
|
export const PropsProvider = PropsContext.Provider;
|
|
173
193
|
export const PropsConsumer = PropsContext.Consumer;
|
|
@@ -9,10 +9,29 @@ export interface ContentObjects {
|
|
|
9
9
|
[key: number]: ContentInterface;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
type JSXElement = () => JSX.Element;
|
|
13
|
+
export interface CustomContentInferface {
|
|
14
|
+
uid: UidType;
|
|
15
|
+
component: boolean | React.ComponentType | JSXElement;
|
|
16
|
+
props: any;
|
|
17
|
+
onStage?: boolean; //true by default
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface CustomContentObjects {
|
|
21
|
+
[key: number]: CustomContentInferface;
|
|
22
|
+
}
|
|
12
23
|
export interface ContentStateInterface {
|
|
24
|
+
customContent?: CustomContentObjects;
|
|
25
|
+
setCustomContent: (
|
|
26
|
+
uid: CustomContentInferface['uid'],
|
|
27
|
+
component: CustomContentInferface['component'],
|
|
28
|
+
props?: CustomContentInferface['props'],
|
|
29
|
+
onStage?: CustomContentInferface['onStage'],
|
|
30
|
+
) => void;
|
|
13
31
|
defaultContent: ContentObjects;
|
|
14
32
|
activeUids: Array<UidType>;
|
|
15
33
|
pinnedUid?: UidType;
|
|
34
|
+
secondaryPinnedUid?: UidType;
|
|
16
35
|
lastJoinedUid?: UidType;
|
|
17
36
|
}
|
|
18
37
|
|
|
@@ -26,6 +26,7 @@ interface BtnTemplateBasicInterface {
|
|
|
26
26
|
disabled?: boolean;
|
|
27
27
|
}
|
|
28
28
|
interface BtnTemplateInterfaceWithName extends BtnTemplateBasicInterface {
|
|
29
|
+
//@ts-ignore
|
|
29
30
|
name?: keyof IconsInterface;
|
|
30
31
|
}
|
|
31
32
|
interface BtnTemplateInterfaceWithIcon extends BtnTemplateBasicInterface {
|
|
@@ -9,9 +9,41 @@ export interface IconsInterface {
|
|
|
9
9
|
'demote-outlined': string;
|
|
10
10
|
'lower-hand': string;
|
|
11
11
|
'raise-hand': string;
|
|
12
|
+
'white-board': string;
|
|
13
|
+
ains: string;
|
|
14
|
+
'vb-blur': string;
|
|
15
|
+
'vb-color': string;
|
|
16
|
+
'vb-image': string;
|
|
17
|
+
vb: string;
|
|
18
|
+
'turn-off-stt': string;
|
|
19
|
+
'live-caption-mode': string;
|
|
20
|
+
done: string;
|
|
21
|
+
warning: string;
|
|
22
|
+
'noise-cancellation': string;
|
|
23
|
+
'whiteboard-new': string;
|
|
24
|
+
chat_attachment_pdf: string;
|
|
25
|
+
chat_attachment_image: string;
|
|
26
|
+
chat_attachment_doc: string;
|
|
27
|
+
chat_attachment_unknown: string;
|
|
12
28
|
}
|
|
13
29
|
|
|
14
30
|
const icons: IconsInterface = {
|
|
31
|
+
'whiteboard-new':
|
|
32
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANWSURBVHgB7ZuBcdswDEWhXgdIN1C6QNNO4HSCbBB3gmYDuxPEncC+LuJs4GwgbxBvgAIVXcs2KQKU5MgS3h3PdzIBif8gUIQoAMMwjDQQMad2A8YxJModtQIPLFksMP5HTVUcNKEqkAAzjPMMY8RFj5Q5jA0a9Eoh0BuMCWX0iAX6AMNBm1d+w1igaHhAHQWOaTbD8LQe4hHGAg12ijoKGBNdR08W60AOJ/TDTvk3h+tmm2XZrcbgY+gPLJPYEkphhsIPUOIViMS5o581tSGthFcUPS+g5OwWc5GzgWGJw9ySQFtQ4ntQHFrkMKsUcZgjgVxCzmF4/JJ2dOkl+GdosfdG7Ql7UJ1LmNbnCt8zasu6Dhts4dmhKzDhoRCFSwo8FNqKuk4hepGTsMOHQqzcPXWdvEAPwA6XFHhSKqnr2EuBsL7OHCIpeq5VoGfUsVH4zsXj7aNAqK8UMncK/+vOBaIuN24grb+oQ12dmVkqfHvzWp2BWCA6PKG2QH9u4MeFn9iwaodp0ZMr/Bc+B3UGUYGwjBZNTphBIugJ/wji6JGOV22A+oTJFJgQTaij0J4j5KiRATZDFU2oYw5KQo4aGWC5LmsCR6AokSt8JtWZQ86qfVLei714ju3c8VeI80SNk3gO7TGHSyBRFMskvZ96OZoW1YjAcuaRTM0FRp52UUbyW4qQw/YM6k8+RdnyYImVaMLDLCm5ldk2+bkr5LQ9g/gFaNZQfNutFcLk0JCQ8/YMZBfBEbHA5uxv5xxaInSi9gx0FzPHBkAHqM+lNtBfUErZgllAB6jHqzZIvzBNNB3Nki1fRz8FcufiaOIXAb46eOGEmUCHSMabnRr4HNE7peg7/Ca4CNlHyY5Ot4MLIBlvLwR6LyTjHdIWvE4wgSKYQBFMoAgmUAQTKIIJFMEEijBagaQrKJFAOMzPGkVjOhVoG+g3hYHAkeOi5yHQ5bXOOFRs52re4zVFEl1rFmifXBUhVNo9ejt7ulidQLnLdczcV/dT+/ZJs0ATGCcFifO5esCXpHm7/kXqMT2Dv0D8fnrwTCC34foexiXSP3F8m8290zx15Ez+FcKz2lDg6YxTyjc35jOkn0NNqX2hJt7adkFSauZbKPcS/En5wMUwDMMwDMMw4C9ycj0K0Sb6NAAAAABJRU5ErkJggg==',
|
|
33
|
+
'noise-cancellation':
|
|
34
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANxSURBVHgB7ZvxddowEMaPvv5fRlA2yAjuBMkGYYPSCeJMAJ0AMkGyAWzQdAKzAXSCr6dafjjGtiRbxgLu9949g5Fk+8vJOukUIkEQBEEQBEEQ/JlQBACY8uGRTZlTH9omk8mObhkWRrFt0MxKl/Fsc8G2N6JfLvwA92wZ7Ogy945tqlKbKV0qlQdxIbN5kmlzXaqjveiJxoRvYGZu5sGz3hr+bFrae0YPcQcDRy/YeNRR6M60oc15S539KALxRZPKjSSO9R7RnVlLu1r4t1LZDGN2MZyOPk5exOVSdCe1tD1F7jGaBQXgC3libuKZPyaVn7RHaVdXNBIcNx348IutOJ6PQpjSX6iJDC3xy5AeNAROHoS872dsKZstAFNs/8tj7GE2AD5dzDcyPdAV4CQQ9+01H+7YXtl2luJamBddnuu90oXj7EF64sg244/f2X42FCuESc0LMwqQT2vQpct7j2JGqCV/3FZ+2sYmTIm5Oc7IE2+BSrxYvo9OKSQpPCcxI7Gic4BjsJh51DnLMI88Ym8LSeYu7fTxIE0RjKUUJ4eW8zuKEZwxUEQ+P6tOZJfwWEzr60FRUzOg6O9zn4HkqgUqUQwgKXnylW4A9pgtdUxQ3IoHdUYEsiACWRCBLAQRCMeFtAyOOawhQD4pLaLnZ4oBnC7Ct2Y1cUwVdeHBci9ZpXxCPQnhQdOa76ql/Dt150/TD0YMVTn9jXoSQqCPmnNJU2ETxW7Jn7VlM4OqOfeXxgafUy0FK0udIVLPb9VKFAs4zZFZd1cg4OYF1GdrnbO9g4P61G/qUK+64eDkIeGwuIX6F3+QjEqQDVTGW/SiWdlr9LvmzmXmbES4N6bZsb171NXeoio/3UW1AavBE4Kkfztcd0WxYbpL3RKn09Jmx2v+QD2KYgTNq4XBM6y6zYZrpRQzfIO/G248mCe1eI5z8mA00B7jrPq4P/KYa9EkDmLtWlXwedJY9yBP8Fg4h31nyTi7yPoAe7S8Nx71ZASdlupOzbmZKdOW38ow4gpCL+A/pfBFv+8UXTrolwurQ3tUStcE7NMKV2FWuAavacIIpd8tGw9RdFk9tF/2vxd0AfnLuK4L6nOX+fINDU73XGsSigDJalgQgSyIQBZEIAsikAURyEIsAl3FrvxBQb53sGBJwikmqpboWRAEQRCC8A+7wtIN3wzWKgAAAABJRU5ErkJggg==',
|
|
35
|
+
warning:
|
|
36
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAADNUlEQVR4Ae2c0W0TQRCG/zXxe0pwOoAOLh0kEkQ8kgpIKoioAKggvAEJUkwFuAPoADrABcQssxs7SqSsvXu3Mztx5pMsnew7Rxn/s9/tns+AYRiGYRiGYRiGYRjGtuCvMKHHLhTjoJBYtGtc0WZ38wSmGOPYHWIOZYygkWu8xap4AYcDeu4EClGXwNC2VKzfD7w0xw5eUAr/QBH6ErjA+8Qroa3PoQxVBfQXeEPj3cGaXTp/eae1FaCmhWPrLvCDCjhZu6OjFn4WW1mFUPQkMIhjU/ECPo6RaoSiIoFrxJFCjVB0JPDmnK8ENUJpXsAoDuA5ylEhlKYtnC2OFAqE0jaBueJIoUAozRLYQxxpdrDXSijtElgujnXv1UwoTQo4QBwpOv917QyGDfEWHiyOFI2EIp/AoeJI0UgoogmsKo4UwkKRTWC5OGb0EU+LjhAWilgBe4hj372ix0schu2C40SFItLCxeIgIVDh9u69xwW1vss/XkooMglc4IxFHCkEhcJewJg+H9tXmrP4t5nhT2Bo3VYICIW1gMtrHBO0g10obAWM7TOisa81I5xzfruBL4HS4kgTVq/ZPkiWAjYUR4oTGk5qLl7cwpPAluJI4ZIX7AdRvYAKxJGiW86GqlK1gGrEkYJSWFsodROoRxwpqgulWgEViiNFVaHUS2BNcXjs3p2GxW1XMdkVhVJlNSYOzq7ytCmsqHh8XG7XX8X2OHZH+ISBDC4g2zUOfubL1etBS17DW1i/OFJUEcqgBIpc4+DG08LrEX6hJ8MSyD/jKL8mUspAofQuIPuMIyRjdU2EtsFH57/0X73u1cLs4vD4Tm11bx3PX8a0d+Cht1D6JZBbHCP8hSy9hVKcQCFxzOkD2l8N7nHm4PAT/IRLqbOSA8oL+I2KJ3XaEm7xcnHy30GGWRh3Sw4oKiDLjEMbC5y61/iQu3t2AR/xjKOUIqHkS+TxzjhKKRJKVgIFB3FNZAklL4HbPu49TFYKNyZwefOz9HmZCiiBG+uTm0B1d4qz4/O+pLmxgNFGHu/wtAj/82nOjvmnMZ/JwGOSyT/dPwJRhTGmGn+fwTAMwzAMwzAMwzCMLeA/aQAlpfLwqQYAAAAASUVORK5CYII=',
|
|
37
|
+
vb: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEfSURBVHgB7VNbEcIwELwwCCgOkIADggMcgAQcVAI4KBJAARLAQeugdXBc6KVzpE2a5Ls7szNtsrebywNgQSoQsSWe+XtLrIlvYsFjJ+xhNQXPD5q5gJD5kfgKmZsFxISMzD26cqq7LHNe7YVYmQ6Mzo5Lc9tdKGDK3IZK1CIkzpzFsmVrUOE0Xjx/k+cyF2DNS1HkQ+vU/A4dIroo2UDzfxsKkOazAcL8LMbunoDKNY/ZosGcCwth8Lf/YmuyHpo1vYg5jf0V1W4NJj40e+c1JAAnHpqaKTCrOhL3xB1xSzRjHbEhfohPpdSD9dpo6P8OER2UgdvjojZ6SGi1wjxcXS/lCUDIQ0fbs5EDK58Q8jC6pmuP8AD9oaaigQWp+AKsAoDF7uWeIAAAAABJRU5ErkJggg==',
|
|
38
|
+
'vb-image':
|
|
39
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAB20lEQVRIie2UPWsUURSGn2siwcRsdgU/EkjnT5BgsZVgxCaNCiqIIi4WRrD1F6RQxMKAgTRWahkIikktRtzSD1IpCIIEsfAjCQQei5zRyZDdmVjnheHcc+5733fuzLkXdrFTqJ/UEzE+pLbVp+reqF1Rv6rjkTfUl+ozdV8Vg4mIh9W36kK2UG2qi+qZnHhbfaXWona5iskR9V1evANvqiiurlcRf18UV/vVlno3Yr/aow7kxdULZQYfthEfVpfdxK+Iy+pwzF+qJB7k/DcfjPhE/aE2I29G/jjyO5m42igzyMSvqedjvKJOF3jT6kr2+SLW1Td53p6iQUppVW0BD4CPUV4DagVqDViNNb/VOrAAWLaDlrqWtWvU7qsb6g31aMQN9V7MD6mv46mXGfwVjz4/qA6o827FfNR74qAtqUNdxUM0L95WJ3NzY9ExY4U1FzNx9VwVk/3qLePKqAr1bPGgpQ7ElFIyOuo0cAo4BowAfcA68AVoAy+A59EcJ4GRlNKjMoM+4DZwEzgAfAeWgM8xbgCjwPEYf2Oz66ZSSt2vijCYiR85p06ovR14vTE/F/yHRU6nHfwEFoGrpW/zD7PAeEppsIpB98PSBSmlLZrbbh24/r8Gu9gx/gBohhCCgI16xQAAAABJRU5ErkJggg==',
|
|
40
|
+
'vb-color':
|
|
41
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAvVBMVEUAAAAAAAAAAAAAAABAQEAgICAcHBwaGhogICAeHh4mGiYhISEfHx8eGB4aGh8eGR4cHCAeHiIdHSEbGx8fGx8eGiIeHiEdHSAdGiAdGh8cGh8cGh8cHB4bGyAcHCAdGx8cHB4eGx4dGx0dGx8bGx8cGh8bGh8bGyAdHB8dGx4cGx8cHB8cHB8cHB8cHB4bGx4bGx8cGiAbGx8cGyAcGh8cGh8cGx8cGyAcGyAcGyAcGx8dGx8cGx8cGx////9owITRAAAAPnRSTlMAAQIDBAgJChARFBcZKzIzNzw9QkJERUdhYmNkZWhvcnd5enuCioyer7K0tba3ubq8wcXJy8zOz9DR09bY2WCHnYUAAAABYktHRD5JZADjAAAAuklEQVQoz52R2RKCMAxFiyLu+4KCiiuKAm6oqOT/f0sMbaEwvnAfMpNzm9xpS0heSb3N0XtfduOayDt7oHotSgk+/UAsq8H5DATZFcq7QdhNFI0WgG3Ei/avUUiZFoCgicYI5zVFpyXUGg0TMjqg4fLdwLLuaDz4bp7lo/GMd7MsB41TNmP1J9yro6Gm+bUVXVB2k9S35lX2VIOA0bMkPrrBz7dFo2CwGT39gX2aM8x8rayajn9bSiS/vu5rPfA8hChsAAAAAElFTkSuQmCC',
|
|
42
|
+
'vb-blur':
|
|
43
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAABWUlEQVRIieWUP0oDYRDF36gRxMZOUQRbIZBIPICYxsZKm1SxtMoBvIBN0qRJrpDaY6iQwt5CCGiUFGLjv5+Fm2SyZDdfFATJg4VvmDdvZmeGkWYCwB6w7uxd4CAkdiEwx6KkeWd3JD2Hl/jXAOpA3dlVoOHsBlBN4nvMBea06EuyZwFAFshF7xpQc74SUI5x/QwGfCAHZPs+v6YZDVdxOZa/JddzM7sBzpzf8zOadj6AARWgDVwCpakEAhKcMIpPYD8kdrCmwA5QiN5NoOl4R7E4k3TsYgd8oADk+z4/gzcNZ/ASE3waU9yje3v+u6SPsb+TBGAb6LkW3QGrIbHB0wY29N2qV0ktM+v9OEH/rphZBShKOpW0EqN1JdXM7Nrz41qp5zqq+kLSUgKlCGylaaQCOGQy8mkak67praS0XnckPUxb+AiAzejWtIEucA9cAefA2q/E/wW+AK4bGrj694GPAAAAAElFTkSuQmCC',
|
|
44
|
+
ains: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEUAAAD///////9zeKVjAAAAA3RSTlMAZr+SD6biAAAAAWJLR0QB/wIt3gAAADVJREFUCNdjYEADjA5giqkBk2J0agRJMjU1NaBTjE5NTUBJIAfEhVJQQawaYIZhtQjmCCQAAMpYF99YsyCnAAAAAElFTkSuQmCC',
|
|
45
|
+
'white-board':
|
|
46
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAABeElEQVRIie3Uz4tNcRjH8c/XlRgjkiKzUNyr/EjK1n/g/5C/wI8F+ROklNjMjZKysrDT2GuahcjCxqCIJMKUppfFPeo6fWfuGZrdfDbn9Dzf8/48z3POeZINTVBpB7Avybkkp5IsJ3me5GYp5c1/u+EQPuMXnuEplvAVJ1d4poddXQ0OYojjY7EZvMewcn6AV1jG5X/t6gA+4E4ld8vfurQW8F5cw098xNGxXK+5bsHDMYMvXcC7G/D35l0MsX8sP8BLnK6YPJgEP4x3DXgW/VZ+gLcN7FvL5CqmJhncbcZxpJIbh2ubrKRNlVhJMt2GJ5lLMtM6O53kwqpVt0B9vMYL7Fil8j+amziWisl27FkXeMuoExw71xN+Ap9wD1u7wvtdx4JtuGi0Kq50Nbi+1pkbLcZHtVztM+1VYk+SnCml/GiBp3A+ybEkC107uDGpcpzFvNGPxmhVVLvbXInNJlls7peS3G5X3mgxyeMk90sp852q31BNvwGhl1TXx/9xfQAAAABJRU5ErkJggg==',
|
|
15
47
|
profile:
|
|
16
48
|
'data:image/png;base64,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',
|
|
17
49
|
'no-mic':
|
|
@@ -32,6 +64,19 @@ const icons: IconsInterface = {
|
|
|
32
64
|
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADvSURBVHgB5ZRREcIwDIZbB5MQCZOABBxQCUMBSJgEHCBhczAJlTAJITmyo1dW2vTKC/x3ubVZky9JbzPmr4SInmySdcemCR7I7nFQmAhFAcxrAE7ilyBhJ75pBxCu+VxfC3FbpR8Ai2zzI5OEq4wAxAcZgJctmBJxuzFE/GsTQAqy+ZoAJPAggblxVQMAX/LRuHxrwFsnQWIsBtChkcwlACj30icgkEveR9VecV8pCJR0cMMyMeQYQfIAJYR1khj1z08NUUsJGUyNlJCLqVEhZNqDWAXE0QMSr2dr7cyF0Jrv40z70XxD+Px2nPkZPQCoHCglmaLpAgAAAABJRU5ErkJggg==',
|
|
33
65
|
'raise-hand':
|
|
34
66
|
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADxSURBVHgB5ZTtEYIwDIYD5391gzqBjIAbOIojsIFuoBs4AmyAG+AIblATDSdW+pFSf3g+d+81V0jeNrQA/BVa644EKcGCNapFFfqFQi1IvvxZgEfJ43wwR3HN8cqVnI9N8uoKRx6tXLGc2HbQUjKaLGEiuWVe8ejtcaxBMpIYYCvPqP1XDOjI4rBF7SRJPeUgri2x6oOxWpnNAMKhe/C43RliPpzaosb3QqzBFbVhgyNI0X6o7xdzEgQ7uIGdBp7/p7Ug52MHJ8fqO5ZJeKv0+/EMRYEETKgExSuIIdAk/AZbTOjE0DdpB0U71EHclp/kDilNkhWhg0nUAAAAAElFTkSuQmCC',
|
|
67
|
+
'turn-off-stt':
|
|
68
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAECSURBVHgBzVQLEcIwDE25CZgDhoNJQMJQADiYA4YCcDAsoIA6GChYHQAKSnJLj1LaXvncwbt710/SlyzpCvAP0FrnxBTHFbIPcMs+JfLMLF2NzI6KQ4OskVdPPMVjhTTZkeDRK2g57YUQCt7ECL6MJEFuQhGxF6ZJqRlS3TqeS2vf1K+HoZ5PUbQvE86Qulrzemo6bN2MPFmQ7TXbWxaskBveq3wHooLss0B2+o4DiYecHwSdS906vjt3zyCDMNbW/AKJiAkW9oKbIPHSSxj+ppcF5549ylRGzoQFMZMJhEEPhUYuY4KmTtRJBXGMkSefQdgLFGrA/6kuKPjsk0fkd7gBEy7vamLyRFEAAAAASUVORK5CYII=',
|
|
69
|
+
'live-caption-mode':
|
|
70
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADUSURBVHgB5VPtDYIwEL0S/ssIHYERGEE3qBPoBuIGMgFsAk6iI7hBfadHUpsirZFfvOSlxx333RKtDmoUrLUax4nS8QDPSik+KXMMBqwoHUb4Qu4Z78i0pwRIZ8X4ndGfkVM4q8GhHdWFZwT90amGu+l836kKW0c+gCWCVfS5tJa+AQ412ItsA/YKvAX0PfvOVfgz8ikDso4tbcEdve9b4egNZqhiA/LV0SI38BsQiJfReP/EVRjanryEmmaw6Ay5gtKZUSw0eA0F7MS4oTQM4rtWPAFxAE4MEjNhpQAAAABJRU5ErkJggg==',
|
|
71
|
+
done: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABDSURBVHgB1c3BDQAgCAPAjuIIbKQjuJmjOIKjICS+TBPCkyZ99QhAvahqs64M3lZhoxB8KH7Ax/7hgeC9oxlidoQ6ue+PS8aRUCPDAAAAAElFTkSuQmCC',
|
|
72
|
+
chat_attachment_pdf:
|
|
73
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFfSURBVHgB7ZU9S8NQGIVPShBsHRSKCpKY6qKLf0A7CCri4ioOOvozjH9A7Ci4uDjrqAgOFetSByenRImK3xZBB4fEN7lYzYfJzbVLS8+Qm/vm3PPkfpAAzS4pWDCvb004jpY00DQMSBnok8XiWpwvE6pwhNetNvSjcnkVqQAplQT5NyAJ0hBAHEQYIMtyJCTkg6AUVeXyNWyJ2gBh+T4VztKsSY2GFHqZW8Db+HS9X1AGfJnBU6R5V3UYmJkHnu+B6im7vzgHzirA4grw8Q7sbHrWjjsLcYo+ptkc8EThg0PA4wMLHxljwbku4GAPvPp7D0YpsFphIFfuxLMU3knwfC94FT0DN3R/ly1Jvg+YmAKuDOqf0EOH1YUAEi5pvOYBvt/cbbfWfzzHh74hn/0K4hT+4Vg3r9R0Q0w1OkU9vwtRe1CCoGzY28GaFGU0LWuD2Mvgn0mN4ksFRdHRcvoCpYdrkbRsJT8AAAAASUVORK5CYII=',
|
|
74
|
+
chat_attachment_doc:
|
|
75
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAE4SURBVHgB7ZWxS8NAFMZ/KRHcrE6CJKR7B8eAFHRzdNXFUQc3cRMaoe4WHXT0P3B0cyhCdzeHRoiKi9gOglPihbPFJjG5nHVQ/CB5uceX93v3DhL47TKSCf/+0SeKnKIX/V4Po4K30mgc5PkqqYxC8ZE1xLvqdJqUApRUEeTbgCLIRAB5EG2AaZqZkJQPTVm2reSb2Ij+Adoa+1TMNSNfBIcS2nUHbNRfR+uatTBWM7kDJ76tL8LhKthVeZ2swbYrDXGM1zPTcn37PEWeMke05MBZF45FoS1XPltVCa7Pw84FDN5Q0pdnkCwQdzzsehi1Add30BIj2r+U3e8tw80TnHZlbH2MT0U/fsjpH07w8CKCYn8p9QVg9nMia0RtNBUSnidzRpbRD4Ijwd5EfSd9Ub5dsyyPP6d3/d5cbIF9MEYAAAAASUVORK5CYII=',
|
|
76
|
+
chat_attachment_image:
|
|
77
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFoSURBVHgB3ZSxSsNQFIb/pEFqLCrtIBQSdPUNHDq4+AaOpYtPYJcOQuIDKHZ0rE/gGzh0E5yk0CmhJkoVWksgaDBNTFssaXKT3MSC2B8Scs8953y5/00u8N/FBAOq/qLCdXeTClVFAcNCPqxUzuPy2FCEovk81YF8125LSAVIqSTIrwFJkKUA4iCZARzHESGhPGSUIIpUeUuz6M8AkRa1BjswxjnQaDM3Rq30SpyLXAFt86RcKosc21gY1/NV1NerNKXxANvS0Xs4gHK/j6F26ZthQDjGiIrcA8vsoN89wZelTcc/gKJwiovPmxnGMeGyG8gEeO4ch6zxQ3K2An7UgMsU8LF15kXz6QDB5n4I45oQ+cfpChiY4N8bQPmKmJ/pPxjo13jqd+fjCTBKJMBocivyZcRCjCF6b7P9KayVFmr9IlnU9C5JOrpFWjlwWsEY8VtTNc0zlK15j9ugk/fmTnNPEGSsnL4BS3qBidiHD9wAAAAASUVORK5CYII=',
|
|
78
|
+
chat_attachment_unknown:
|
|
79
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADXSURBVHgB7ZU9DoIwGIZfCBMuuhgSU4SDMHgSjyLeQI7g5mTiCRy4BzVBXWWREawLEWj6J4uGZyF8ffmetDQt8OtY3QK93inqOpB9SLMMlo14FUVbUc7uVRSaN9EK8TlNN9ASaCKTfC2QSQYRiCTGAsdxuJJeDoYQ31fKDbZEo8CY1lFxOJ4oKwXQYEkIPG/evIdk0erZmYFe8zfPshSOjz9ZV1BfoMnEdYXj/Qsnvz3YYwozCraLZp8F3hIlMKRCte/WLF6Q5vmOuddQn0nB2ichITH+jhcl6jxZhl+rzAAAAABJRU5ErkJggg==',
|
|
35
80
|
};
|
|
36
81
|
|
|
37
82
|
export default icons;
|
|
@@ -3,22 +3,24 @@ import PropsContext from '../../Contexts/PropsContext';
|
|
|
3
3
|
import RtcContext from '../../Contexts/RtcContext';
|
|
4
4
|
import BtnTemplate from '../BtnTemplate';
|
|
5
5
|
import styles from '../../Style';
|
|
6
|
+
import DispatchContext from '../../Contexts/DispatchContext';
|
|
6
7
|
|
|
7
|
-
interface EndCallProps{
|
|
8
|
-
btnText?: string
|
|
8
|
+
interface EndCallProps {
|
|
9
|
+
btnText?: string;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
function EndCall(props?: EndCallProps) {
|
|
12
13
|
const {styleProps} = useContext(PropsContext);
|
|
13
14
|
const {localBtnStyles} = styleProps || {};
|
|
14
15
|
const {endCall} = localBtnStyles || {};
|
|
15
|
-
const {dispatch} = useContext(
|
|
16
|
+
const {dispatch} = useContext(DispatchContext);
|
|
16
17
|
|
|
17
18
|
return (
|
|
18
19
|
<BtnTemplate
|
|
20
|
+
//@ts-ignore
|
|
19
21
|
name={'callEnd'}
|
|
20
22
|
btnText={props?.btnText || 'Hang Up'}
|
|
21
|
-
color=
|
|
23
|
+
color="#FD0845"
|
|
22
24
|
style={{...styles.endCall, ...(endCall as object)}}
|
|
23
25
|
onPress={() =>
|
|
24
26
|
dispatch({
|
|
@@ -3,14 +3,16 @@ import PropsContext from '../../Contexts/PropsContext';
|
|
|
3
3
|
import RtcContext from '../../Contexts/RtcContext';
|
|
4
4
|
import BtnTemplate from '../BtnTemplate';
|
|
5
5
|
import styles from '../../Style';
|
|
6
|
+
import DispatchContext from '../../Contexts/DispatchContext';
|
|
6
7
|
|
|
7
8
|
function FullScreen() {
|
|
8
9
|
const {styleProps} = useContext(PropsContext);
|
|
9
10
|
const {localBtnStyles} = styleProps || {};
|
|
10
11
|
const {fullScreen} = localBtnStyles || {};
|
|
11
|
-
const {dispatch} = useContext(
|
|
12
|
+
const {dispatch} = useContext(DispatchContext);
|
|
12
13
|
return (
|
|
13
14
|
<BtnTemplate
|
|
15
|
+
//@ts-ignore
|
|
14
16
|
name={'fullscreen'}
|
|
15
17
|
style={{...styles.localBtn, ...(fullScreen as object)}}
|
|
16
18
|
onPress={() => {
|
|
@@ -20,6 +20,7 @@ const RemoteAudioMute: React.FC<RemoteAudioMuteInterface> = (props) => {
|
|
|
20
20
|
const localUid = useLocalUid();
|
|
21
21
|
return props.user.uid !== localUid ? (
|
|
22
22
|
<BtnTemplate
|
|
23
|
+
//@ts-ignore
|
|
23
24
|
name={props.user.audio === ToggleState.enabled ? 'mic' : 'micOff'}
|
|
24
25
|
style={{...styles.leftRemoteBtn, ...(muteRemoteAudio as object)}}
|
|
25
26
|
onPress={() => {
|
|
@@ -4,19 +4,21 @@ import BtnTemplate from '../BtnTemplate';
|
|
|
4
4
|
import styles from '../../Style';
|
|
5
5
|
import PropsContext from '../../Contexts/PropsContext';
|
|
6
6
|
import useLocalUid from '../../Utils/useLocalUid';
|
|
7
|
+
import DispatchContext from '../../Contexts/DispatchContext';
|
|
7
8
|
|
|
8
9
|
interface RemoteSwapInterface {
|
|
9
10
|
uid: UidType;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
const RemoteSwap: React.FC<RemoteSwapInterface> = (props) => {
|
|
13
|
-
const {dispatch} = useContext(
|
|
14
|
+
const {dispatch} = useContext(DispatchContext);
|
|
14
15
|
const {styleProps} = useContext(PropsContext);
|
|
15
16
|
const {remoteBtnStyles} = styleProps || {};
|
|
16
17
|
const {remoteSwap} = remoteBtnStyles || {};
|
|
17
18
|
const localUid = useLocalUid();
|
|
18
19
|
return (
|
|
19
20
|
<BtnTemplate
|
|
21
|
+
//@ts-ignore
|
|
20
22
|
name={'remoteSwap'}
|
|
21
23
|
style={
|
|
22
24
|
props.uid !== localUid
|
|
@@ -21,6 +21,7 @@ const RemoteVideoMute: React.FC<RemoteVideoMuteInterface> = (props) => {
|
|
|
21
21
|
const localUid = useLocalUid();
|
|
22
22
|
return props.user.uid !== localUid ? (
|
|
23
23
|
<BtnTemplate
|
|
24
|
+
//@ts-ignore
|
|
24
25
|
name={
|
|
25
26
|
props.user.video === ToggleState.enabled ? 'videocam' : 'videocamOff'
|
|
26
27
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {ActionType, ContentStateInterface} from '../Contexts/RtcContext';
|
|
2
|
+
|
|
3
|
+
export default function ActiveSpeaker(
|
|
4
|
+
state: ContentStateInterface,
|
|
5
|
+
action: ActionType<'ActiveSpeaker'>,
|
|
6
|
+
) {
|
|
7
|
+
let localActiveUids = [...state.activeUids];
|
|
8
|
+
let pinnedUid = state.pinnedUid;
|
|
9
|
+
let secondaryPinnedUid = state.secondaryPinnedUid;
|
|
10
|
+
const activeSpeaker =
|
|
11
|
+
action?.value && action.value?.length ? action.value[0] : 0;
|
|
12
|
+
if (activeSpeaker) {
|
|
13
|
+
const filteredData = localActiveUids?.filter((i) => i !== activeSpeaker);
|
|
14
|
+
const [first, second, ...remaining] = filteredData;
|
|
15
|
+
if (pinnedUid && secondaryPinnedUid) {
|
|
16
|
+
localActiveUids = [first, second, activeSpeaker, ...remaining];
|
|
17
|
+
} else if (pinnedUid && !secondaryPinnedUid) {
|
|
18
|
+
localActiveUids = [first, activeSpeaker, second, ...remaining];
|
|
19
|
+
} else if (!pinnedUid && secondaryPinnedUid) {
|
|
20
|
+
localActiveUids = [activeSpeaker, second, first, ...remaining];
|
|
21
|
+
} else {
|
|
22
|
+
localActiveUids = [activeSpeaker, first, second, ...remaining];
|
|
23
|
+
}
|
|
24
|
+
console.log('debugging activeSpeaker ', activeSpeaker, localActiveUids);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
...state,
|
|
28
|
+
activeUids: localActiveUids,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -9,12 +9,14 @@ export default function LocalMuteAudio(
|
|
|
9
9
|
action: ActionType<'LocalMuteAudio'>,
|
|
10
10
|
localUid: UidType,
|
|
11
11
|
) {
|
|
12
|
-
let stateUpdate: ContentStateInterface = {
|
|
12
|
+
let stateUpdate: Partial<ContentStateInterface> = {
|
|
13
13
|
defaultContent: {
|
|
14
14
|
...state.defaultContent,
|
|
15
15
|
[localUid]: {
|
|
16
16
|
...state.defaultContent[localUid],
|
|
17
17
|
audio: action.value[0],
|
|
18
|
+
localAudioForceDisabled:
|
|
19
|
+
action?.value?.length === 2 ? action.value[1] : false,
|
|
18
20
|
},
|
|
19
21
|
},
|
|
20
22
|
activeUids: [...state.activeUids],
|
|
@@ -9,12 +9,14 @@ export default function LocalMuteVideo(
|
|
|
9
9
|
action: ActionType<'LocalMuteVideo'>,
|
|
10
10
|
localUid: UidType,
|
|
11
11
|
) {
|
|
12
|
-
let stateUpdate: ContentStateInterface = {
|
|
12
|
+
let stateUpdate: Partial<ContentStateInterface> = {
|
|
13
13
|
defaultContent: {
|
|
14
14
|
...state.defaultContent,
|
|
15
15
|
[localUid]: {
|
|
16
16
|
...state.defaultContent[localUid],
|
|
17
17
|
video: action.value[0],
|
|
18
|
+
localVideoForceDisabled:
|
|
19
|
+
action?.value?.length === 2 ? action.value[1] : false,
|
|
18
20
|
},
|
|
19
21
|
},
|
|
20
22
|
activeUids: [...state.activeUids],
|
|
@@ -9,7 +9,7 @@ export default function LocalPermissionState(
|
|
|
9
9
|
action: ActionType<'LocalPermissionState'>,
|
|
10
10
|
localUid: UidType,
|
|
11
11
|
) {
|
|
12
|
-
let stateUpdate: ContentStateInterface = {
|
|
12
|
+
let stateUpdate: Partial<ContentStateInterface> = {
|
|
13
13
|
defaultContent: {
|
|
14
14
|
...state.defaultContent,
|
|
15
15
|
[localUid]: {
|
|
@@ -12,11 +12,11 @@ export default function RemoteAudioStateChanged(
|
|
|
12
12
|
audioState = ToggleState.disabled;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
const stateUpdate: ContentStateInterface = {
|
|
15
|
+
const stateUpdate: Partial<ContentStateInterface> = {
|
|
16
16
|
defaultContent: {
|
|
17
17
|
...state.defaultContent,
|
|
18
|
-
[action.value[0]]: {
|
|
19
|
-
...state.defaultContent[action.value[0]],
|
|
18
|
+
[action.value[0] as unknown as number]: {
|
|
19
|
+
...state.defaultContent[action.value[0] as unknown as number],
|
|
20
20
|
audio: audioState,
|
|
21
21
|
},
|
|
22
22
|
},
|
|
@@ -12,15 +12,16 @@ export default function RemoteVideoStateChanged(
|
|
|
12
12
|
videoState = ToggleState.enabled;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
const stateUpdate: ContentStateInterface = {
|
|
15
|
+
const stateUpdate: Partial<ContentStateInterface> = {
|
|
16
16
|
defaultContent: {
|
|
17
17
|
...state.defaultContent,
|
|
18
|
-
[action.value[0]]: {
|
|
19
|
-
...state.defaultContent[action.value[0]],
|
|
18
|
+
[action.value[0] as unknown as number]: {
|
|
19
|
+
...state.defaultContent[action.value[0] as unknown as number],
|
|
20
20
|
video:
|
|
21
|
+
//@ts-ignore
|
|
21
22
|
videoState !== undefined
|
|
22
23
|
? videoState
|
|
23
|
-
: state.defaultContent[action.value[0]].video,
|
|
24
|
+
: state.defaultContent[action.value[0] as unknown as number].video,
|
|
24
25
|
},
|
|
25
26
|
},
|
|
26
27
|
activeUids: [...state.activeUids],
|
|
@@ -11,7 +11,7 @@ export default function UpdateDualStreamMode(
|
|
|
11
11
|
) {
|
|
12
12
|
const newMode = action.value[0];
|
|
13
13
|
let defaultContent = {...state.defaultContent};
|
|
14
|
-
let stateUpdate: ContentStateInterface
|
|
14
|
+
let stateUpdate: Partial<ContentStateInterface>;
|
|
15
15
|
const setHighStreamType = (uid: UidType) => {
|
|
16
16
|
defaultContent[uid].streamType = 'high';
|
|
17
17
|
};
|
|
@@ -17,14 +17,17 @@ export default function UserJoined(
|
|
|
17
17
|
let typeData = {
|
|
18
18
|
type: 'rtc',
|
|
19
19
|
};
|
|
20
|
-
if (
|
|
21
|
-
|
|
20
|
+
if (
|
|
21
|
+
state.defaultContent[newUid as unknown as number] &&
|
|
22
|
+
'type' in state.defaultContent[newUid as unknown as number]
|
|
23
|
+
) {
|
|
24
|
+
typeData.type = state.defaultContent[newUid as unknown as number].type;
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
let defaultContent: ContentStateInterface['defaultContent'] = {
|
|
25
28
|
...state.defaultContent,
|
|
26
|
-
[newUid]: {
|
|
27
|
-
...state.defaultContent[newUid],
|
|
29
|
+
[newUid as unknown as number]: {
|
|
30
|
+
...state.defaultContent[newUid as unknown as number],
|
|
28
31
|
uid: newUid,
|
|
29
32
|
audio: ToggleState.disabled,
|
|
30
33
|
video: ToggleState.disabled,
|
|
@@ -40,7 +43,7 @@ export default function UserJoined(
|
|
|
40
43
|
//Only one remote and local is maximized
|
|
41
44
|
//Change stream type to high if dualStreaMode is DYNAMIC
|
|
42
45
|
if (dualStreamMode === DualStreamMode.DYNAMIC) {
|
|
43
|
-
defaultContent[newUid].streamType = 'high';
|
|
46
|
+
defaultContent[newUid as unknown as number].streamType = 'high';
|
|
44
47
|
}
|
|
45
48
|
//Swap render positions
|
|
46
49
|
stateUpdate = {
|
|
@@ -4,7 +4,7 @@ export default function UserMuteRemoteAudio(
|
|
|
4
4
|
state: ContentStateInterface,
|
|
5
5
|
action: ActionType<'UserMuteRemoteAudio'>,
|
|
6
6
|
) {
|
|
7
|
-
let stateUpdate: ContentStateInterface = {
|
|
7
|
+
let stateUpdate: Partial<ContentStateInterface> = {
|
|
8
8
|
defaultContent: {
|
|
9
9
|
...state.defaultContent,
|
|
10
10
|
[action.value[0]]: {
|
|
@@ -4,7 +4,7 @@ export default function UserMuteRemoteVideo(
|
|
|
4
4
|
state: ContentStateInterface,
|
|
5
5
|
action: ActionType<'UserMuteRemoteVideo'>,
|
|
6
6
|
) {
|
|
7
|
-
let stateUpdate: ContentStateInterface = {
|
|
7
|
+
let stateUpdate: Partial<ContentStateInterface> = {
|
|
8
8
|
defaultContent: {
|
|
9
9
|
...state.defaultContent,
|
|
10
10
|
[action.value[0]]: {
|
|
@@ -15,7 +15,7 @@ export default function UserOffline(
|
|
|
15
15
|
const updatedActiveUids = [...state.activeUids].filter(
|
|
16
16
|
(uid) => uid !== action.value[0],
|
|
17
17
|
);
|
|
18
|
-
const stateUpdate: ContentStateInterface = {
|
|
18
|
+
const stateUpdate: Partial<ContentStateInterface> = {
|
|
19
19
|
defaultContent: state.defaultContent,
|
|
20
20
|
activeUids: updatedActiveUids,
|
|
21
21
|
};
|
|
@@ -4,8 +4,25 @@ export default function UserPin(
|
|
|
4
4
|
state: ContentStateInterface,
|
|
5
5
|
action: ActionType<'UserPin'>,
|
|
6
6
|
) {
|
|
7
|
+
let localActiveUids = [...state.activeUids];
|
|
8
|
+
let secondaryPinnedUid = state.secondaryPinnedUid;
|
|
9
|
+
const pinnedUid =
|
|
10
|
+
action?.value && action.value?.length ? action.value[0] : '';
|
|
11
|
+
if (pinnedUid) {
|
|
12
|
+
const filteredData = localActiveUids?.filter(
|
|
13
|
+
(i) => i !== pinnedUid && i !== secondaryPinnedUid,
|
|
14
|
+
);
|
|
15
|
+
if (secondaryPinnedUid && secondaryPinnedUid !== pinnedUid) {
|
|
16
|
+
filteredData.unshift(secondaryPinnedUid);
|
|
17
|
+
}
|
|
18
|
+
filteredData.unshift(pinnedUid);
|
|
19
|
+
localActiveUids = filteredData;
|
|
20
|
+
}
|
|
7
21
|
return {
|
|
8
22
|
...state,
|
|
9
|
-
pinnedUid
|
|
23
|
+
pinnedUid,
|
|
24
|
+
secondaryPinnedUid:
|
|
25
|
+
pinnedUid === secondaryPinnedUid ? 0 : secondaryPinnedUid,
|
|
26
|
+
activeUids: localActiveUids,
|
|
10
27
|
};
|
|
11
28
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {ActionType, ContentStateInterface} from '../Contexts/RtcContext';
|
|
2
|
+
|
|
3
|
+
export default function UserSecondaryPin(
|
|
4
|
+
state: ContentStateInterface,
|
|
5
|
+
action: ActionType<'UserSecondaryPin'>,
|
|
6
|
+
) {
|
|
7
|
+
let localActiveUids = [...state.activeUids];
|
|
8
|
+
const secondaryPinnedUid =
|
|
9
|
+
action?.value && action.value?.length ? action.value[0] : 0;
|
|
10
|
+
if (secondaryPinnedUid) {
|
|
11
|
+
const filteredData: any = localActiveUids?.filter(
|
|
12
|
+
(i) => i !== secondaryPinnedUid,
|
|
13
|
+
);
|
|
14
|
+
const [maxUid, ...minUids] = filteredData;
|
|
15
|
+
localActiveUids = [maxUid, secondaryPinnedUid, ...minUids];
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
...state,
|
|
19
|
+
secondaryPinnedUid,
|
|
20
|
+
pinnedUid: state?.pinnedUid === secondaryPinnedUid ? 0 : state?.pinnedUid,
|
|
21
|
+
activeUids: localActiveUids,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -9,3 +9,5 @@ export {default as LocalPermissionState} from './LocalPermissionState';
|
|
|
9
9
|
export {default as RemoteAudioStateChanged} from './RemoteAudioStateChanged';
|
|
10
10
|
export {default as RemoteVideoStateChanged} from './RemoteVideoStateChanged';
|
|
11
11
|
export {default as UserPin} from './UserPin';
|
|
12
|
+
export {default as UserSecondaryPin} from './UserSecondaryPin';
|
|
13
|
+
export {default as ActiveSpeaker} from './ActiveSpeaker';
|