agora-appbuilder-core 4.0.0-api.5 → 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 +2 -2
- 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 +11 -5
- package/template/src/atoms/ToolbarPreset.tsx +13 -2
- 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 +659 -52
- 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 +4 -3
- package/template/src/components/Navbar.tsx +110 -42
- package/template/src/components/NavbarMobile.tsx +47 -36
- 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 +4 -3
- 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 -7
- package/template/src/pages/video-call/ActionSheet.tsx +55 -16
- package/template/src/pages/video-call/ActionSheetContent.tsx +366 -291
- 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 +140 -106
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
- package/template/src/pages/video-call/VideoCallScreen.tsx +113 -66
- 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
|
@@ -36,8 +36,21 @@ import LinkButton from '../atoms/LinkButton';
|
|
|
36
36
|
import ImageIcon from '../atoms/ImageIcon';
|
|
37
37
|
import ThemeConfig from '../theme';
|
|
38
38
|
import Tooltip from '../atoms/Tooltip';
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
import IDPLogoutComponent from '../auth/IDPLogoutComponent';
|
|
40
|
+
import Clipboard from '../subComponents/Clipboard';
|
|
41
|
+
import {
|
|
42
|
+
shareRoomAttendeeLinkLabel,
|
|
43
|
+
shareRoomAttendeeLinkSubText,
|
|
44
|
+
shareRoomCopyBtnText,
|
|
45
|
+
shareRoomCopyBtnTooltipText,
|
|
46
|
+
shareRoomHostLinkLabel,
|
|
47
|
+
shareRoomHostLinkSubText,
|
|
48
|
+
shareRoomPSTNLabel,
|
|
49
|
+
shareRoomPSTNNumberLabel,
|
|
50
|
+
shareRoomPSTNPinLabel,
|
|
51
|
+
shareRoomPSTNSubText,
|
|
52
|
+
shareRoomStartBtnText,
|
|
53
|
+
} from '../language/default-labels/shareLinkScreenLabels';
|
|
41
54
|
|
|
42
55
|
export interface CopyMeetingInfoProps {
|
|
43
56
|
showSubLabel?: boolean;
|
|
@@ -45,62 +58,34 @@ export interface CopyMeetingInfoProps {
|
|
|
45
58
|
export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
|
|
46
59
|
const {copyShareLinkToClipboard, getShareLink} = useShareLink();
|
|
47
60
|
const {
|
|
48
|
-
data: {roomId, isHost, pstn, isSeparateHostLink
|
|
61
|
+
data: {roomId, isHost, pstn, isSeparateHostLink},
|
|
49
62
|
} = useRoomInfo();
|
|
50
63
|
const {showSubLabel = true} = props;
|
|
51
|
-
|
|
52
|
-
// const meetingUrlText = useString('meetingUrlLabel')();
|
|
53
|
-
// const meetingIdText = useString('meetingIdLabel')();
|
|
54
|
-
// const hostIdText = useString('hostIdLabel')();
|
|
55
|
-
// const attendeeUrlLabel = useString('attendeeUrlLabel')();
|
|
56
|
-
// const attendeeIdLabel = useString('attendeeIdLabel')();
|
|
57
|
-
// const hostUrlLabel = useString('hostUrlLabel')();
|
|
58
|
-
// const pstnLabel = useString('pstnLabel')();
|
|
59
|
-
// const pstnNumberLabel = useString('pstnNumberLabel')();
|
|
60
|
-
// const pinLabel = useString('pin')();
|
|
61
|
-
// const enterMeetingAfterCreateButton = useString(
|
|
62
|
-
// 'enterMeetingAfterCreateButton',
|
|
63
|
-
// )();
|
|
64
|
-
// const copyInviteButton = useString('copyInviteButton')();
|
|
65
|
-
const meetingUrlText = 'Room Link';
|
|
66
|
-
const meetingIdText = 'Room ID';
|
|
67
|
-
const hostIdText = 'Host ID';
|
|
68
|
-
const attendeeUrlLabel = 'Attendee Link';
|
|
69
|
-
const attendeeIdLabel = 'Attendee ID';
|
|
70
|
-
const hostUrlLabel = 'Host Link';
|
|
71
|
-
const pstnLabel = 'PSTN';
|
|
72
|
-
const pstnNumberLabel = 'Number';
|
|
73
|
-
const pinLabel = 'Pin';
|
|
74
|
-
const enterMeetingAfterCreateButton = isLiveStream
|
|
75
|
-
? 'Start Stream (as host)'
|
|
76
|
-
: 'Start Room (as host)';
|
|
77
|
-
const copyInviteButton = 'Copy invite to clipboard';
|
|
78
|
-
const history = useHistory();
|
|
79
|
-
const enterMeeting = () => {
|
|
80
|
-
if (roomId?.host) {
|
|
81
|
-
history.push(roomId.host);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
64
|
+
|
|
84
65
|
const isSDK = isSDKCheck();
|
|
85
66
|
const isWebCheck =
|
|
86
67
|
$config.FRONTEND_ENDPOINT || (platform === 'web' && !isSDK);
|
|
87
68
|
|
|
88
|
-
const
|
|
89
|
-
|
|
69
|
+
const shareRoomHostLink = useString<any>(shareRoomHostLinkLabel)(isWebCheck);
|
|
70
|
+
const shareRoomHostLinkSubTextLocal = useString<any>(
|
|
71
|
+
shareRoomHostLinkSubText,
|
|
72
|
+
)();
|
|
73
|
+
const shareRoomAttendeeLink = useString<any>(shareRoomAttendeeLinkLabel)(
|
|
74
|
+
isWebCheck,
|
|
75
|
+
);
|
|
76
|
+
const shareRoomAttendeeLinkSubTextLocal = useString<any>(
|
|
77
|
+
shareRoomAttendeeLinkSubText,
|
|
78
|
+
)();
|
|
79
|
+
const shareRoomPSTN = useString<any>(shareRoomPSTNLabel)();
|
|
80
|
+
const shareRoomPSTNNumber = useString<any>(shareRoomPSTNNumberLabel)();
|
|
81
|
+
const shareRoomPSTNPin = useString<any>(shareRoomPSTNPinLabel)();
|
|
82
|
+
const shareRoomPSTNSubTextLocal = useString<any>(shareRoomPSTNSubText)();
|
|
90
83
|
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return hostIdText;
|
|
97
|
-
} else {
|
|
98
|
-
if (isWebCheck) {
|
|
99
|
-
return meetingUrlText;
|
|
100
|
-
}
|
|
101
|
-
return meetingIdText;
|
|
102
|
-
}
|
|
103
|
-
};
|
|
84
|
+
const copiedToClipboard = useString(shareRoomCopyBtnTooltipText)();
|
|
85
|
+
|
|
86
|
+
const getAttendeeLabel = () => shareRoomAttendeeLink;
|
|
87
|
+
|
|
88
|
+
const getHostLabel = () => shareRoomHostLink;
|
|
104
89
|
|
|
105
90
|
const clipboardIconButton = (type: SHARE_LINK_CONTENT_TYPE) => {
|
|
106
91
|
return (
|
|
@@ -120,7 +105,7 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
|
|
|
120
105
|
<Spacer size={8} horizontal={true} />
|
|
121
106
|
</>
|
|
122
107
|
}
|
|
123
|
-
toolTipMessage=
|
|
108
|
+
toolTipMessage={copiedToClipboard}
|
|
124
109
|
renderContent={(isToolTipVisible, setToolTipVisible) => {
|
|
125
110
|
return (
|
|
126
111
|
<TouchableOpacity
|
|
@@ -169,7 +154,7 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
|
|
|
169
154
|
<>
|
|
170
155
|
<Spacer size={14} />
|
|
171
156
|
<Text style={style.helpText}>
|
|
172
|
-
|
|
157
|
+
{shareRoomAttendeeLinkSubTextLocal}
|
|
173
158
|
</Text>
|
|
174
159
|
</>
|
|
175
160
|
)}
|
|
@@ -203,7 +188,7 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
|
|
|
203
188
|
<>
|
|
204
189
|
<Spacer size={14} />
|
|
205
190
|
<Text style={style.helpText}>
|
|
206
|
-
|
|
191
|
+
{shareRoomHostLinkSubTextLocal}
|
|
207
192
|
</Text>
|
|
208
193
|
</>
|
|
209
194
|
)}
|
|
@@ -212,9 +197,9 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
|
|
|
212
197
|
) : (
|
|
213
198
|
<></>
|
|
214
199
|
)}
|
|
215
|
-
{pstn ? (
|
|
200
|
+
{$config.PSTN && pstn && pstn?.number && pstn?.pin ? (
|
|
216
201
|
<>
|
|
217
|
-
<Text style={style.urlTitle}>{
|
|
202
|
+
<Text style={style.urlTitle}>{shareRoomPSTN}</Text>
|
|
218
203
|
<Spacer size={11} />
|
|
219
204
|
<View style={style.container}>
|
|
220
205
|
<View style={[style.urlContainer, style.urlPadding]}>
|
|
@@ -225,8 +210,8 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
|
|
|
225
210
|
//@ts-ignore
|
|
226
211
|
isWebCheck ? urlWeb : {opacity: 1},
|
|
227
212
|
]}>
|
|
228
|
-
{
|
|
229
|
-
{pstn?.pin}
|
|
213
|
+
{shareRoomPSTNNumber} - {pstn?.number} {' | '}{' '}
|
|
214
|
+
{shareRoomPSTNPin} - {pstn?.pin}
|
|
230
215
|
</Text>
|
|
231
216
|
</View>
|
|
232
217
|
</View>
|
|
@@ -236,9 +221,7 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
|
|
|
236
221
|
{showSubLabel && (
|
|
237
222
|
<>
|
|
238
223
|
<Spacer size={14} />
|
|
239
|
-
<Text style={style.helpText}>
|
|
240
|
-
Share this phone number and pin to dial from phone.
|
|
241
|
-
</Text>
|
|
224
|
+
<Text style={style.helpText}>{shareRoomPSTNSubTextLocal}</Text>
|
|
242
225
|
</>
|
|
243
226
|
)}
|
|
244
227
|
{/* <Spacer size={25} /> */}
|
|
@@ -250,8 +233,86 @@ export const CopyMeetingInfo = (props?: CopyMeetingInfoProps) => {
|
|
|
250
233
|
);
|
|
251
234
|
};
|
|
252
235
|
|
|
236
|
+
const ClipboardIconButtonURL = ({url}) => {
|
|
237
|
+
const copiedToClipboard = useString(shareRoomCopyBtnTooltipText)();
|
|
238
|
+
return (
|
|
239
|
+
<View style={style.iconContainer}>
|
|
240
|
+
<Tooltip
|
|
241
|
+
isClickable
|
|
242
|
+
onPress={() => {
|
|
243
|
+
Clipboard.setString(url);
|
|
244
|
+
}}
|
|
245
|
+
toolTipIcon={
|
|
246
|
+
<>
|
|
247
|
+
<ImageIcon
|
|
248
|
+
iconType="plain"
|
|
249
|
+
name="tick-fill"
|
|
250
|
+
tintColor={$config.SEMANTIC_SUCCESS}
|
|
251
|
+
/>
|
|
252
|
+
<Spacer size={8} horizontal={true} />
|
|
253
|
+
</>
|
|
254
|
+
}
|
|
255
|
+
toolTipMessage={copiedToClipboard}
|
|
256
|
+
renderContent={(isToolTipVisible, setToolTipVisible) => {
|
|
257
|
+
return (
|
|
258
|
+
<TouchableOpacity
|
|
259
|
+
onPress={() => {
|
|
260
|
+
Clipboard.setString(url);
|
|
261
|
+
setToolTipVisible(true);
|
|
262
|
+
}}>
|
|
263
|
+
<ImageIcon
|
|
264
|
+
iconType="plain"
|
|
265
|
+
name="clipboard"
|
|
266
|
+
tintColor={$config.PRIMARY_ACTION_BRAND_COLOR}
|
|
267
|
+
/>
|
|
268
|
+
</TouchableOpacity>
|
|
269
|
+
);
|
|
270
|
+
}}
|
|
271
|
+
/>
|
|
272
|
+
</View>
|
|
273
|
+
);
|
|
274
|
+
};
|
|
275
|
+
export interface ShowInputURLProps {
|
|
276
|
+
label: string;
|
|
277
|
+
url: string;
|
|
278
|
+
}
|
|
279
|
+
export const ShowInputURL = (props: ShowInputURLProps) => {
|
|
280
|
+
const {label, url} = props;
|
|
281
|
+
if (!url) {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
return (
|
|
285
|
+
<>
|
|
286
|
+
{label ? (
|
|
287
|
+
<>
|
|
288
|
+
<Text style={style.urlTitle}>{label}</Text>
|
|
289
|
+
<Spacer size={11} />
|
|
290
|
+
</>
|
|
291
|
+
) : (
|
|
292
|
+
<></>
|
|
293
|
+
)}
|
|
294
|
+
<View style={style.container}>
|
|
295
|
+
<View style={style.urlContainer}>
|
|
296
|
+
<Text
|
|
297
|
+
numberOfLines={1}
|
|
298
|
+
ellipsizeMode="tail"
|
|
299
|
+
style={[
|
|
300
|
+
style.url,
|
|
301
|
+
style.urlPadding,
|
|
302
|
+
//@ts-ignore
|
|
303
|
+
urlWeb,
|
|
304
|
+
]}>
|
|
305
|
+
{url}
|
|
306
|
+
</Text>
|
|
307
|
+
</View>
|
|
308
|
+
<ClipboardIconButtonURL url={url} />
|
|
309
|
+
</View>
|
|
310
|
+
</>
|
|
311
|
+
);
|
|
312
|
+
};
|
|
313
|
+
|
|
253
314
|
const Share = () => {
|
|
254
|
-
const {FpeShareComponent} = useCustomization(
|
|
315
|
+
const {FpeShareComponent} = useCustomization(data => {
|
|
255
316
|
let components: {
|
|
256
317
|
FpeShareComponent?: React.ElementType;
|
|
257
318
|
} = {};
|
|
@@ -274,28 +335,45 @@ const Share = () => {
|
|
|
274
335
|
data: {roomId, meetingTitle},
|
|
275
336
|
} = useRoomInfo();
|
|
276
337
|
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
338
|
+
const shareRoomStartBtnTextLocal = useString<any>(shareRoomStartBtnText)({
|
|
339
|
+
eventMode: $config.EVENT_MODE,
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
const copyInviteButton = useString(shareRoomCopyBtnText)();
|
|
281
343
|
const history = useHistory();
|
|
282
344
|
const enterMeeting = () => {
|
|
283
345
|
if (roomId?.host) {
|
|
284
346
|
history.push(roomId.host);
|
|
285
347
|
}
|
|
286
348
|
};
|
|
287
|
-
const isSDK = isSDKCheck();
|
|
288
|
-
const isWebCheck =
|
|
289
|
-
$config.FRONTEND_ENDPOINT || (platform === 'web' && !isSDK);
|
|
290
349
|
|
|
291
350
|
return FpeShareComponent ? (
|
|
292
351
|
<FpeShareComponent />
|
|
293
352
|
) : (
|
|
294
353
|
<View style={style.root}>
|
|
354
|
+
{!isMobileUA() ? (
|
|
355
|
+
<IDPLogoutComponent containerStyle={{marginBottom: -100}} />
|
|
356
|
+
) : (
|
|
357
|
+
<></>
|
|
358
|
+
)}
|
|
295
359
|
<ScrollView contentContainerStyle={style.scrollMain}>
|
|
296
360
|
<Card>
|
|
297
361
|
<View>
|
|
298
|
-
<
|
|
362
|
+
<View
|
|
363
|
+
style={{
|
|
364
|
+
flexDirection: 'row',
|
|
365
|
+
justifyContent: 'space-between',
|
|
366
|
+
alignItems: 'center',
|
|
367
|
+
}}>
|
|
368
|
+
<Logo />
|
|
369
|
+
{isMobileUA() ? (
|
|
370
|
+
<IDPLogoutComponent
|
|
371
|
+
containerStyle={{marginTop: 0, marginRight: 0}}
|
|
372
|
+
/>
|
|
373
|
+
) : (
|
|
374
|
+
<></>
|
|
375
|
+
)}
|
|
376
|
+
</View>
|
|
299
377
|
<Spacer size={20} />
|
|
300
378
|
<Text style={style.heading} numberOfLines={1}>
|
|
301
379
|
{trimText(meetingTitle)}
|
|
@@ -309,7 +387,7 @@ const Share = () => {
|
|
|
309
387
|
iconName="video-on"
|
|
310
388
|
onPress={() => enterMeeting()}
|
|
311
389
|
containerStyle={isMobileUA() && {width: '100%'}}
|
|
312
|
-
text={
|
|
390
|
+
text={shareRoomStartBtnTextLocal}
|
|
313
391
|
/>
|
|
314
392
|
<Spacer size={16} />
|
|
315
393
|
<LinkButton
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
12
|
import React, {createContext, ReactChildren, useEffect, useState} from 'react';
|
|
13
|
-
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
13
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
14
14
|
import useMount from './useMount';
|
|
15
|
+
import {ENABLE_AUTH} from '../auth/config';
|
|
15
16
|
|
|
16
17
|
type rememberedDevicesListEntries = Record<
|
|
17
18
|
string,
|
|
@@ -78,13 +79,17 @@ export const StorageProvider = (props: {children: React.ReactNode}) => {
|
|
|
78
79
|
} else {
|
|
79
80
|
const storeFromStorage = JSON.parse(storeString);
|
|
80
81
|
Object.keys(initStoreValue).forEach((key) => {
|
|
81
|
-
if (!storeFromStorage[key])
|
|
82
|
+
if (!storeFromStorage[key]) {
|
|
82
83
|
storeFromStorage[key] = initStoreValue[key];
|
|
84
|
+
}
|
|
83
85
|
});
|
|
86
|
+
//unauth flow delete token from the localstoage if any
|
|
87
|
+
if (!ENABLE_AUTH) {
|
|
88
|
+
storeFromStorage['token'] = null;
|
|
89
|
+
}
|
|
84
90
|
setStore(storeFromStorage);
|
|
85
91
|
setReady(true);
|
|
86
92
|
}
|
|
87
|
-
console.log('store hydrated', storeString);
|
|
88
93
|
setReady(true);
|
|
89
94
|
} catch (e) {
|
|
90
95
|
console.error('problem hydrating store', e);
|
|
@@ -97,14 +102,23 @@ export const StorageProvider = (props: {children: React.ReactNode}) => {
|
|
|
97
102
|
useEffect(() => {
|
|
98
103
|
const syncStore = async () => {
|
|
99
104
|
try {
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
/**
|
|
106
|
+
* if authentication is not enabled then store react state will have the token
|
|
107
|
+
* but it won't be saved in the localstorage
|
|
108
|
+
* Fix: if we duplicate browser tab and join the same meeting, we will create new session
|
|
109
|
+
*/
|
|
110
|
+
let tempStore = JSON.parse(JSON.stringify(store));
|
|
111
|
+
if (!ENABLE_AUTH) {
|
|
112
|
+
tempStore['token'] = null;
|
|
113
|
+
}
|
|
114
|
+
await AsyncStorage.setItem('store', JSON.stringify(tempStore));
|
|
102
115
|
} catch (e) {
|
|
103
116
|
console.log('problem syncing the store', e);
|
|
104
117
|
}
|
|
105
118
|
};
|
|
106
119
|
ready && syncStore();
|
|
107
120
|
}, [store, ready]);
|
|
121
|
+
|
|
108
122
|
return (
|
|
109
123
|
<StorageContext.Provider value={{store, setStore}}>
|
|
110
124
|
{ready ? props.children : <></>}
|
|
@@ -3,6 +3,9 @@ import Toast from '../../react-native-toast-message';
|
|
|
3
3
|
import ToastConfig from '../subComponents/ToastConfig';
|
|
4
4
|
|
|
5
5
|
const ToastComponent = () => {
|
|
6
|
+
// if ($config.TOAST_NOTIFICATIONS) {
|
|
7
|
+
// return <Toast ref={(ref) => Toast.setRef(ref)} config={ToastConfig} />;
|
|
8
|
+
// } else return <></>;
|
|
6
9
|
return <Toast ref={(ref) => Toast.setRef(ref)} config={ToastConfig} />;
|
|
7
10
|
};
|
|
8
11
|
export default ToastComponent;
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/*
|
|
2
|
+
********************************************
|
|
3
|
+
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
+
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
+
(the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
+
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
+
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
+
any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
|
|
9
|
+
information visit https://appbuilder.agora.io.
|
|
10
|
+
*********************************************
|
|
11
|
+
*/
|
|
12
|
+
import React, {useContext, useEffect, useState} from 'react';
|
|
13
|
+
import {
|
|
14
|
+
ScrollView,
|
|
15
|
+
View,
|
|
16
|
+
StyleSheet,
|
|
17
|
+
Pressable,
|
|
18
|
+
FlatList,
|
|
19
|
+
useWindowDimensions,
|
|
20
|
+
Text,
|
|
21
|
+
} from 'react-native';
|
|
22
|
+
import {layoutProps} from '../../theme.json';
|
|
23
|
+
import {useLocalUid, useContent} from 'customization-api';
|
|
24
|
+
import RenderComponent from '../pages/video-call/RenderComponent';
|
|
25
|
+
import IconButton from '../atoms/IconButton';
|
|
26
|
+
import hexadecimalTransparency from '../utils/hexadecimalTransparency';
|
|
27
|
+
import {BREAKPOINTS, isMobileUA} from '../utils/common';
|
|
28
|
+
import {DispatchContext} from '../../agora-rn-uikit';
|
|
29
|
+
import WhiteboardConfigure, {
|
|
30
|
+
whiteboardContext,
|
|
31
|
+
} from './whiteboard/WhiteboardConfigure';
|
|
32
|
+
import WhiteboardView from './whiteboard/WhiteboardView';
|
|
33
|
+
|
|
34
|
+
const {topPinned} = layoutProps;
|
|
35
|
+
|
|
36
|
+
const WhiteboardLayout = ({renderData}) => {
|
|
37
|
+
const {pinnedUid, defaultContent, activeUids} = useContent();
|
|
38
|
+
const activeSpeaker = undefined;
|
|
39
|
+
const [collapse, setCollapse] = useState(false);
|
|
40
|
+
const localUid = useLocalUid();
|
|
41
|
+
const {width, height} = useWindowDimensions();
|
|
42
|
+
const isDesktop = width > BREAKPOINTS.xl;
|
|
43
|
+
const isSidePinnedlayout = topPinned === true ? false : isDesktop; // if either explicity set to false or auto evaluation
|
|
44
|
+
//const [maxUid, ...minUids] = renderData;
|
|
45
|
+
const {dispatch} = useContext(DispatchContext);
|
|
46
|
+
const [uids, setUids] = useState(renderData);
|
|
47
|
+
|
|
48
|
+
const [screenShareOn, setScreenShareOn] = useState(false);
|
|
49
|
+
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const nonPinnedUids = activeUids.filter(uid => uid !== pinnedUid);
|
|
52
|
+
|
|
53
|
+
const nonActiveSpeakerUids = nonPinnedUids.filter(
|
|
54
|
+
uid => uid !== activeSpeaker,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const remoteScreenShareUids = nonActiveSpeakerUids.filter(uid => {
|
|
58
|
+
return (
|
|
59
|
+
defaultContent[uid]?.type === 'screenshare' &&
|
|
60
|
+
defaultContent[uid]?.parentUid !== localUid
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
const localScreenShareUids = nonActiveSpeakerUids.filter(uid => {
|
|
65
|
+
return (
|
|
66
|
+
defaultContent[uid]?.type === 'screenshare' &&
|
|
67
|
+
defaultContent[uid]?.parentUid === localUid
|
|
68
|
+
);
|
|
69
|
+
});
|
|
70
|
+
if (remoteScreenShareUids?.length || localScreenShareUids?.length) {
|
|
71
|
+
setScreenShareOn(true);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const restOfTheUids = nonActiveSpeakerUids.filter(
|
|
75
|
+
uid => defaultContent[uid]?.type !== 'screenshare',
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Order for pinned layout -
|
|
80
|
+
* - [1] means only one user
|
|
81
|
+
* - [N] means multiple users
|
|
82
|
+
* 1.Pinned User[1]
|
|
83
|
+
* 2.Remote screenshare users[N]
|
|
84
|
+
* 3.Active Speaker[1]
|
|
85
|
+
* 4.Local Screenshare[1]
|
|
86
|
+
* 5 and etc.Other Users[N]
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
const updatedOrder = [
|
|
90
|
+
pinnedUid,
|
|
91
|
+
...remoteScreenShareUids,
|
|
92
|
+
pinnedUid !== activeSpeaker ? activeSpeaker : 0,
|
|
93
|
+
...localScreenShareUids,
|
|
94
|
+
...restOfTheUids,
|
|
95
|
+
].filter(uid => uid !== undefined && uid !== 0);
|
|
96
|
+
|
|
97
|
+
setUids(updatedOrder);
|
|
98
|
+
}, [activeUids, defaultContent, activeSpeaker, pinnedUid]);
|
|
99
|
+
|
|
100
|
+
//whiteboard changes
|
|
101
|
+
const {whiteboardActive} = useContext(whiteboardContext);
|
|
102
|
+
//whiteboard changes
|
|
103
|
+
|
|
104
|
+
if (!whiteboardActive) {
|
|
105
|
+
return (
|
|
106
|
+
<View style={style.infoTextContainer}>
|
|
107
|
+
<Text style={style.infoTextStyle}>No Active Whiteboard.</Text>
|
|
108
|
+
</View>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<View
|
|
114
|
+
style={{
|
|
115
|
+
flexDirection: isSidePinnedlayout ? 'row' : 'column',
|
|
116
|
+
flex: 1,
|
|
117
|
+
}}>
|
|
118
|
+
{!collapse && (
|
|
119
|
+
<ScrollView
|
|
120
|
+
horizontal={!isSidePinnedlayout}
|
|
121
|
+
showsHorizontalScrollIndicator={isMobileUA() ? false : true}
|
|
122
|
+
decelerationRate={0}
|
|
123
|
+
style={
|
|
124
|
+
isSidePinnedlayout
|
|
125
|
+
? {
|
|
126
|
+
width: '20%',
|
|
127
|
+
paddingRight: 8,
|
|
128
|
+
}
|
|
129
|
+
: {
|
|
130
|
+
flex: 1,
|
|
131
|
+
minHeight: 160,
|
|
132
|
+
marginBottom: 8,
|
|
133
|
+
}
|
|
134
|
+
}>
|
|
135
|
+
{/* Pinned Video Top View(Desktop minimized and Mobile native and Mobile web) / Side View(Desktop maximized)*/}
|
|
136
|
+
{uids?.map((minUid, i) => {
|
|
137
|
+
//first item -> maximized view so returning null
|
|
138
|
+
if (i === 0 && !whiteboardActive) return null;
|
|
139
|
+
//remaining items -> minimized view
|
|
140
|
+
{
|
|
141
|
+
/**Rendering minimized views */
|
|
142
|
+
}
|
|
143
|
+
return (
|
|
144
|
+
<Pressable
|
|
145
|
+
//old
|
|
146
|
+
//if user pinned somebody then side panel items should not be clickable - swap video should be called
|
|
147
|
+
//instead we will show replace pin button on hovering the video tile
|
|
148
|
+
//old
|
|
149
|
+
disabled={
|
|
150
|
+
//old fix
|
|
151
|
+
//activeSpeaker || pinnedUid || screenShareOn ? true : false
|
|
152
|
+
//old fix
|
|
153
|
+
|
|
154
|
+
//latest fix : pinned video sidepanel layout should not be clickable
|
|
155
|
+
//if user hover on it we will show pin for me/replace pin(if someone already pinned) button
|
|
156
|
+
true
|
|
157
|
+
}
|
|
158
|
+
style={
|
|
159
|
+
isSidePinnedlayout
|
|
160
|
+
? {
|
|
161
|
+
width: '100%',
|
|
162
|
+
height: width * 0.1125 + 2, // width * 20/100 * 9/16 + 2
|
|
163
|
+
zIndex: 40,
|
|
164
|
+
paddingBottom: 8,
|
|
165
|
+
}
|
|
166
|
+
: {
|
|
167
|
+
// width: ((height / 3) * 16) / 9 / 2 + 12, //dim[1] /4.3
|
|
168
|
+
width: 254,
|
|
169
|
+
height: '100%',
|
|
170
|
+
zIndex: 40,
|
|
171
|
+
marginRight: 8,
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
key={'minVideo' + i}
|
|
175
|
+
onPress={() => {}}>
|
|
176
|
+
<RenderComponent uid={minUid} />
|
|
177
|
+
</Pressable>
|
|
178
|
+
);
|
|
179
|
+
})}
|
|
180
|
+
</ScrollView>
|
|
181
|
+
)}
|
|
182
|
+
{uids && uids?.length && (
|
|
183
|
+
<View
|
|
184
|
+
style={
|
|
185
|
+
isSidePinnedlayout
|
|
186
|
+
? collapse
|
|
187
|
+
? style.width100
|
|
188
|
+
: style.width80
|
|
189
|
+
: style.flex8
|
|
190
|
+
}>
|
|
191
|
+
<View style={style.flex1} key={'maxVideo' + uids[0]}>
|
|
192
|
+
{isSidePinnedlayout && (
|
|
193
|
+
<IconButton
|
|
194
|
+
containerStyle={{
|
|
195
|
+
position: 'absolute',
|
|
196
|
+
top: 8,
|
|
197
|
+
left: 8,
|
|
198
|
+
zIndex: 999,
|
|
199
|
+
elevation: 999,
|
|
200
|
+
}}
|
|
201
|
+
onPress={() => setCollapse(!collapse)}
|
|
202
|
+
iconProps={{
|
|
203
|
+
iconContainerStyle: {
|
|
204
|
+
padding: 8,
|
|
205
|
+
backgroundColor:
|
|
206
|
+
$config.CARD_LAYER_5_COLOR +
|
|
207
|
+
hexadecimalTransparency['10%'],
|
|
208
|
+
},
|
|
209
|
+
name: collapse ? 'collapse' : 'expand',
|
|
210
|
+
tintColor: $config.SECONDARY_ACTION_COLOR,
|
|
211
|
+
iconSize: 24,
|
|
212
|
+
}}
|
|
213
|
+
/>
|
|
214
|
+
)}
|
|
215
|
+
{pinnedUid ? (
|
|
216
|
+
<IconButton
|
|
217
|
+
containerStyle={{
|
|
218
|
+
paddingHorizontal: 8,
|
|
219
|
+
paddingVertical: 10,
|
|
220
|
+
backgroundColor: $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR,
|
|
221
|
+
borderRadius: 8,
|
|
222
|
+
flexDirection: 'row',
|
|
223
|
+
position: 'absolute',
|
|
224
|
+
top: 8,
|
|
225
|
+
left: 8 + (isSidePinnedlayout ? 32 + 12 + 8 : 0),
|
|
226
|
+
zIndex: 999,
|
|
227
|
+
elevation: 999,
|
|
228
|
+
}}
|
|
229
|
+
iconProps={{
|
|
230
|
+
iconType: 'plain',
|
|
231
|
+
iconContainerStyle: {
|
|
232
|
+
padding: 0,
|
|
233
|
+
},
|
|
234
|
+
name: 'unpin-filled',
|
|
235
|
+
iconSize: 20,
|
|
236
|
+
tintColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
|
|
237
|
+
}}
|
|
238
|
+
onPress={() => {
|
|
239
|
+
dispatch({type: 'UserPin', value: [0]});
|
|
240
|
+
}}
|
|
241
|
+
btnTextProps={{
|
|
242
|
+
text: 'Unpin',
|
|
243
|
+
textColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
|
|
244
|
+
textStyle: {
|
|
245
|
+
marginTop: 0,
|
|
246
|
+
marginLeft: 6,
|
|
247
|
+
marginRight: 2,
|
|
248
|
+
fontWeight: '700',
|
|
249
|
+
},
|
|
250
|
+
}}
|
|
251
|
+
/>
|
|
252
|
+
) : (
|
|
253
|
+
<></>
|
|
254
|
+
)}
|
|
255
|
+
{/** Render the maximized view */}
|
|
256
|
+
{whiteboardActive ? (
|
|
257
|
+
<WhiteboardView showToolbox={true} />
|
|
258
|
+
) : (
|
|
259
|
+
<RenderComponent uid={uids[0]} isMax={true} />
|
|
260
|
+
)}
|
|
261
|
+
</View>
|
|
262
|
+
</View>
|
|
263
|
+
)}
|
|
264
|
+
</View>
|
|
265
|
+
);
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
const style = StyleSheet.create({
|
|
269
|
+
width80: {width: '80%'},
|
|
270
|
+
width100: {width: '100%'},
|
|
271
|
+
flex2: {flex: 2},
|
|
272
|
+
flex8: {flex: 8},
|
|
273
|
+
flex1: {flex: 1},
|
|
274
|
+
infoTextContainer: {
|
|
275
|
+
flex: 1,
|
|
276
|
+
backgroundColor: $config.VIDEO_AUDIO_TILE_COLOR,
|
|
277
|
+
justifyContent: 'center',
|
|
278
|
+
marginHorizontal: 'auto',
|
|
279
|
+
marginVertical: 4,
|
|
280
|
+
},
|
|
281
|
+
infoTextStyle: {
|
|
282
|
+
fontFamily: 'Source Sans Pro',
|
|
283
|
+
fontWeight: '600',
|
|
284
|
+
fontSize: 32,
|
|
285
|
+
color: $config.VIDEO_AUDIO_TILE_AVATAR_COLOR,
|
|
286
|
+
textAlign: 'center',
|
|
287
|
+
padding: 12,
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
export default WhiteboardLayout;
|