agora-appbuilder-core 4.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- 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 +28491 -23647
- package/template/_prettierrc.js +2 -2
- package/template/agora-rn-uikit/.eslintrc.js +5 -0
- package/template/agora-rn-uikit/package.json +14 -14
- package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
- package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
- package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +6 -6
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +79 -38
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +26 -17
- 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 +5 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
- package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
- package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
- package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
- package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -7
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -7
- package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +6 -7
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -8
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -9
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -8
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +14 -13
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -7
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -7
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -6
- package/template/agora-rn-uikit/src/Reducer/UserPin.ts +20 -3
- package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
- package/template/agora-rn-uikit/src/Reducer/index.ts +2 -1
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +138 -100
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +55 -28
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +177 -77
- package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
- package/template/agora-rn-uikit/src/Utils/quality.tsx +8 -0
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +56 -12
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +47 -17
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
- package/template/agora-rn-uikit/src/index.ts +15 -9
- 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 +22 -36
- package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
- package/template/android/app/src/main/res/values/strings.xml +3 -0
- 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 +200 -70
- package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -26
- package/template/bridge/rtc/webNg/Types.ts +20 -5
- package/template/bridge/rtc/webNg/index.ts +81 -14
- package/template/bridge/rtm/web/index.ts +5 -3
- package/template/configTransform.js +16 -1
- package/template/customization-api/action-library.ts +4 -16
- package/template/customization-api/app-state.ts +15 -8
- package/template/customization-api/customEvents.ts +7 -2
- package/template/customization-api/customize.ts +1 -1
- package/template/customization-api/index.ts +4 -0
- package/template/customization-api/sub-components.ts +17 -16
- package/template/customization-api/temp.ts +52 -0
- package/template/customization-api/typeDefinition.ts +34 -46
- package/template/customization-api/types.ts +26 -0
- package/template/customization-api/utils.ts +4 -0
- package/template/customization-implementation/createHook.ts +24 -6
- package/template/customization-implementation/index.ts +1 -2
- package/template/customization-implementation/useCustomization.tsx +5 -7
- package/template/defaultConfig.js +72 -0
- package/template/global.d.ts +14 -1
- package/template/index.js +1 -4
- package/template/index.web.js +0 -5
- package/template/index.wsdk.tsx +1 -12
- package/template/ios/.xcode.env +11 -0
- package/template/ios/HelloWorld/AppDelegate.h +2 -4
- package/template/ios/HelloWorld/AppDelegate.mm +64 -0
- package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
- package/template/ios/HelloWorld/Info.plist +8 -2
- package/template/ios/HelloWorld/main.m +2 -1
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +533 -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 +54 -20
- package/template/ios/Podfile.lock +809 -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 +53 -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 +53 -69
- package/template/src/AppRoutes.tsx +90 -0
- package/template/src/AppWrapper.tsx +42 -25
- package/template/src/SDKAppWrapper.tsx +90 -57
- package/template/src/app-state/useLocalUserInfo.ts +3 -3
- 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 +175 -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 +46 -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 +18 -5
- package/template/src/atoms/InlineNotification.tsx +81 -0
- package/template/src/atoms/InviteInfo.tsx +4 -4
- package/template/src/atoms/MeetingLink.tsx +160 -0
- package/template/src/atoms/ParticipantsCount.tsx +20 -8
- package/template/src/atoms/Popup.tsx +49 -27
- package/template/src/atoms/PrimaryButton.tsx +19 -5
- package/template/src/atoms/RecordingInfo.tsx +8 -5
- 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 +102 -0
- package/template/src/atoms/ToolbarItem.tsx +85 -0
- package/template/src/atoms/ToolbarMenu.tsx +40 -0
- package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
- package/template/src/atoms/ToolbarPreset.tsx +71 -0
- package/template/src/atoms/Tooltip.tsx +30 -13
- package/template/src/atoms/pagination/Pagination.tsx +127 -0
- package/template/src/atoms/pagination/usePagination.tsx +88 -0
- 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 +92 -72
- package/template/src/components/ChatContext.ts +2 -0
- package/template/src/components/ColorConfigure.tsx +0 -1
- package/template/src/components/CommonStyles.ts +9 -2
- package/template/src/components/Controls.tsx +914 -182
- package/template/src/components/Controls1.native.tsx +9 -5
- package/template/src/components/DeviceConfigure.native.tsx +2 -2
- package/template/src/components/DeviceConfigure.tsx +400 -149
- package/template/src/components/DeviceContext.tsx +2 -0
- package/template/src/components/EventsConfigure.tsx +722 -82
- package/template/src/components/GraphQLProvider.tsx +82 -39
- package/template/src/components/GridVideo.tsx +30 -16
- package/template/src/components/HostControlView.tsx +11 -14
- package/template/src/components/JoinPhrase.tsx +0 -1
- package/template/src/components/Leftbar.tsx +110 -0
- package/template/src/components/Navbar.tsx +305 -147
- package/template/src/components/NavbarMobile.tsx +119 -0
- package/template/src/components/Navigation.native.tsx +1 -15
- package/template/src/components/{Settings.native.tsx → Navigation.sdk.tsx} +17 -6
- package/template/src/components/NetworkQualityContext.tsx +12 -6
- package/template/src/components/ParticipantsView.tsx +63 -56
- package/template/src/components/PinnedVideo.tsx +191 -119
- package/template/src/components/Precall.native.tsx +177 -72
- package/template/src/components/Precall.tsx +247 -78
- package/template/src/components/RTMConfigure.tsx +205 -67
- package/template/src/components/Rightbar.tsx +112 -0
- 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 +313 -0
- package/template/src/components/SdkMuteToggleListener.tsx +88 -0
- package/template/src/components/SessionContext.tsx +0 -1
- package/template/src/components/Settings.tsx +33 -4
- package/template/src/components/SettingsView.tsx +44 -9
- package/template/src/components/Share.tsx +152 -74
- package/template/src/components/StorageContext.tsx +23 -6
- package/template/src/components/ToastComponent.tsx +10 -1
- package/template/src/components/WhiteboardLayout.tsx +291 -0
- package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
- package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
- 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 +13 -12
- package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
- package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
- 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 +314 -220
- package/template/src/components/livestream/Types.ts +36 -20
- package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
- package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
- 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 +19 -20
- package/template/src/components/participants/AllHostParticipants.tsx +20 -19
- package/template/src/components/participants/Participant.tsx +45 -16
- package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
- package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
- package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
- 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 +56 -28
- 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 +19 -53
- package/template/src/components/precall/VideoPreview.tsx +29 -164
- package/template/src/components/precall/index.tsx +2 -0
- package/template/src/components/precall/joinCallBtn.native.tsx +12 -5
- package/template/src/components/precall/joinCallBtn.tsx +13 -4
- 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 +37 -11
- package/template/src/components/precall/selectDevice.tsx +5 -5
- package/template/src/components/precall/textInput.tsx +17 -19
- package/template/src/components/precall/usePreCall.tsx +33 -1
- package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
- package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
- package/template/src/components/recordings/RecordingsModal.tsx +135 -0
- package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
- package/template/src/components/recordings/recording-table.tsx +154 -0
- package/template/src/components/recordings/style.ts +183 -0
- package/template/src/components/recordings/utils.ts +80 -0
- package/template/src/components/room-info/useRoomInfo.tsx +128 -0
- package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
- package/template/src/components/useShareLink.tsx +28 -63
- package/template/src/components/useUserPreference.tsx +82 -16
- package/template/src/components/useVideoCall.tsx +93 -1
- 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 +185 -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 +148 -0
- package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -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 +188 -0
- package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
- package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -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 +149 -25
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
- package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
- package/template/src/pages/Create.tsx +136 -106
- package/template/src/pages/Endcall.tsx +2 -2
- package/template/src/pages/Join.tsx +82 -40
- package/template/src/pages/Login.tsx +26 -0
- package/template/src/pages/VideoCall.tsx +329 -127
- 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 +498 -308
- package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
- package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
- package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
- package/template/src/pages/video-call/PinchableView.tsx +119 -0
- package/template/src/pages/video-call/RenderComponent.tsx +14 -30
- package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
- package/template/src/pages/video-call/VideoCallMobileView.tsx +231 -89
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
- package/template/src/pages/video-call/VideoCallScreen.tsx +233 -84
- package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
- package/template/src/pages/video-call/VideoComponent.tsx +60 -8
- package/template/src/pages/video-call/VideoRenderer.tsx +343 -57
- 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 +42 -8
- package/template/src/rtm/RTMEngine.ts +17 -4
- package/template/src/rtm-events/constants.ts +21 -3
- package/template/src/rtm-events-api/Events.ts +7 -4
- package/template/src/rtm-events-api/LocalEvents.ts +14 -0
- package/template/src/rtm-events-api/types.ts +5 -5
- package/template/src/selection.json +1 -0
- package/template/src/subComponents/ChatBubble.tsx +87 -67
- package/template/src/subComponents/ChatContainer.tsx +70 -49
- package/template/src/subComponents/ChatInput.ios.tsx +32 -85
- package/template/src/subComponents/ChatInput.tsx +31 -80
- package/template/src/subComponents/Checkbox.native.tsx +46 -46
- package/template/src/subComponents/Checkbox.tsx +7 -6
- package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
- package/template/src/subComponents/EndcallPopup.tsx +83 -12
- package/template/src/subComponents/FallbackLogo.tsx +2 -2
- package/template/src/subComponents/LanguageSelector.tsx +34 -30
- package/template/src/subComponents/LayoutIconButton.tsx +34 -17
- package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
- package/template/src/subComponents/Loading.tsx +60 -0
- package/template/src/subComponents/LocalAudioMute.tsx +87 -34
- package/template/src/subComponents/LocalEndCall.tsx +61 -24
- package/template/src/subComponents/LocalSwitchCamera.tsx +57 -13
- package/template/src/subComponents/LocalVideoMute.tsx +105 -36
- package/template/src/subComponents/LogoutButton.tsx +1 -1
- package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
- package/template/src/subComponents/Recording.tsx +29 -9
- package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
- package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
- package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
- 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 +103 -34
- package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
- package/template/src/subComponents/SidePanelButtons.ts +0 -3
- 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 +132 -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 +452 -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 +63 -0
- package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
- package/template/src/subComponents/caption/utils.ts +126 -0
- package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
- package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
- 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/useIsRecordingBot.tsx +38 -0
- package/template/src/subComponents/recording/useRecording.tsx +251 -138
- package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +39 -15
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +275 -69
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +193 -124
- 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 +13 -0
- package/template/src/utils/SdkEvents.ts +37 -14
- package/template/src/utils/SdkMethodEvents.ts +101 -0
- 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/constants.ts +4 -0
- package/template/src/utils/getCustomRoute.ts +7 -0
- package/template/src/utils/index.tsx +34 -0
- package/template/src/utils/useActionSheet.tsx +50 -0
- package/template/src/utils/useActiveSpeaker.ts +38 -0
- package/template/src/utils/useAppState.ts +17 -0
- package/template/src/utils/useAsyncEffect.ts +138 -0
- package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +27 -26
- package/template/src/utils/useEndCall.ts +65 -0
- package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
- package/template/src/utils/useFindActiveSpeaker.ts +335 -0
- package/template/src/utils/useGetMeetingPhrase.ts +10 -10
- package/template/src/utils/useIsAudioEnabled.ts +3 -3
- package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
- package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
- package/template/src/utils/useIsPSTN.ts +3 -3
- package/template/src/utils/useIsVideoEnabled.ts +3 -3
- package/template/src/utils/useJoinRoom.ts +199 -0
- package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
- package/template/src/{components/OAuth.tsx → utils/useMenu.tsx} +16 -15
- package/template/src/utils/useModal.tsx +8 -0
- package/template/src/utils/useMutePSTN.ts +2 -2
- package/template/src/utils/useMuteToggleLocal.ts +121 -96
- package/template/src/utils/useRemoteEndCall.ts +4 -4
- package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
- package/template/src/utils/useRemoteMute.ts +7 -7
- package/template/src/utils/useRemoteRequest.ts +7 -7
- package/template/src/utils/useSearchParams.tsx +28 -0
- package/template/src/utils/useString.ts +13 -3
- package/template/src/utils/useSwitchCamera.native.tsx +25 -0
- package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → utils/useSwitchCamera.tsx} +12 -11
- package/template/src/utils/useToolbar.tsx +59 -0
- package/template/src/wasms/agora-virtual-background.wasm +0 -0
- 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.rsdk.config.js +1 -2
- package/template/webpack.web.config.js +7 -3
- package/template/_buckconfig +0 -6
- package/template/_gitattributes +0 -1
- package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
- package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
- package/template/android/app/_BUCK +0 -55
- package/template/android/app/build_defs.bzl +0 -19
- package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
- 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/OAuthConfig.ts +0 -77
- package/template/src/components/StoreToken.tsx +0 -39
- package/template/src/components/meeting-info/useMeetingInfo.tsx +0 -70
- package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
- package/template/src/utils/useButtonTemplate.tsx +0 -44
- package/template/src/utils/useJoinMeeting.ts +0 -132
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, {
|
|
2
|
+
createContext,
|
|
3
|
+
useContext,
|
|
4
|
+
useState,
|
|
5
|
+
useRef,
|
|
6
|
+
useCallback,
|
|
7
|
+
useEffect,
|
|
8
|
+
} from 'react';
|
|
2
9
|
import {StyleSheet} from 'react-native';
|
|
3
10
|
import ChatContext, {controlMessageEnum} from '../ChatContext';
|
|
4
11
|
import Toast from '../../../react-native-toast-message';
|
|
@@ -11,31 +18,82 @@ import {
|
|
|
11
18
|
RaiseHandValue,
|
|
12
19
|
raiseHandListInterface,
|
|
13
20
|
} from './Types';
|
|
14
|
-
import {
|
|
21
|
+
import {ClientRoleType, useLocalUid, UidType} from '../../../agora-rn-uikit';
|
|
15
22
|
import {filterObject, isEmptyObject} from '../../utils';
|
|
16
|
-
import {
|
|
23
|
+
import {useRoomInfo} from '../room-info/useRoomInfo';
|
|
17
24
|
import {useScreenshare} from '../../subComponents/screenshare/useScreenshare';
|
|
18
|
-
import events, {
|
|
25
|
+
import events, {PersistanceLevel} from '../../rtm-events-api';
|
|
19
26
|
import {EventNames} from '../../rtm-events';
|
|
20
|
-
import {SidePanelType,
|
|
27
|
+
import {SidePanelType, useContent, useSidePanel} from 'customization-api';
|
|
21
28
|
import TertiaryButton from '../../atoms/TertiaryButton';
|
|
22
29
|
import PrimaryButton from '../../atoms/PrimaryButton';
|
|
23
30
|
import {trimText} from '../../utils/common';
|
|
31
|
+
import {useStringRef} from '../../utils/useString';
|
|
32
|
+
import {
|
|
33
|
+
livestreamRequestAlreadyProcessed,
|
|
34
|
+
livestreamToastApprovalBtnText,
|
|
35
|
+
livestreamToastDenyBtnText,
|
|
36
|
+
} from '../../language/default-labels/videoCallScreenLabels';
|
|
24
37
|
|
|
25
38
|
const LiveStreamContext = createContext(null as unknown as liveStreamContext);
|
|
26
39
|
|
|
27
40
|
export const LiveStreamContextConsumer = LiveStreamContext.Consumer;
|
|
28
41
|
|
|
29
|
-
export const LiveStreamContextProvider: React.FC<
|
|
30
|
-
|
|
31
|
-
|
|
42
|
+
export const LiveStreamContextProvider: React.FC<
|
|
43
|
+
liveStreamPropsInterface
|
|
44
|
+
> = props => {
|
|
45
|
+
const requestAlreadyProcessed = useStringRef(
|
|
46
|
+
livestreamRequestAlreadyProcessed,
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const raiseHandRequestReceivedToastHeading = useStringRef(
|
|
50
|
+
LSNotificationObject.RAISE_HAND_RECEIVED.text1TranslationKey,
|
|
51
|
+
);
|
|
52
|
+
const raiseHandRequestReceivedToastSubHeading = useStringRef(
|
|
53
|
+
LSNotificationObject.RAISE_HAND_RECEIVED.text2TranslationKey,
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const raiseHandRequestRecallToastHeading = useStringRef(
|
|
57
|
+
LSNotificationObject.RAISE_HAND_REQUEST_RECALL.text1TranslationKey,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const raiseHandRequestAcceptedToastHeading = useStringRef(
|
|
61
|
+
LSNotificationObject.RAISE_HAND_ACCEPTED.text1TranslationKey,
|
|
62
|
+
);
|
|
63
|
+
const raiseHandRequestAcceptedToastSubHeading = useStringRef(
|
|
64
|
+
LSNotificationObject.RAISE_HAND_ACCEPTED.text2TranslationKey,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const raiseHandRequestRejectedToastHeading = useStringRef(
|
|
68
|
+
LSNotificationObject.RAISE_HAND_REJECTED.text1TranslationKey,
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const raiseHandApprovedRequestRecallToastHeading = useStringRef(
|
|
72
|
+
LSNotificationObject.RAISE_HAND_APPROVED_REQUEST_RECALL.text1TranslationKey,
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const promoteAsCoHostToastHeading = useStringRef(
|
|
76
|
+
LSNotificationObject.PROMOTE_AS_CO_HOST.text1TranslationKey,
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const raiseHandRequestToastHeading = useStringRef(
|
|
80
|
+
LSNotificationObject.RAISE_HAND_REQUEST.text1TranslationKey,
|
|
81
|
+
);
|
|
82
|
+
const raiseHandRequestToastSubHeading = useStringRef(
|
|
83
|
+
LSNotificationObject.RAISE_HAND_REQUEST.text2TranslationKey,
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const raiseHandRequestRecallLocalToastHeading = useStringRef(
|
|
87
|
+
LSNotificationObject.RAISE_HAND_REQUEST_RECALL_LOCAL.text1TranslationKey,
|
|
88
|
+
);
|
|
89
|
+
|
|
32
90
|
const screenshareContextInstance = useScreenshare();
|
|
33
91
|
const screenshareContextInstanceRef = useRef<any>();
|
|
34
92
|
screenshareContextInstanceRef.current = screenshareContextInstance;
|
|
35
93
|
|
|
36
|
-
const {
|
|
37
|
-
const
|
|
38
|
-
|
|
94
|
+
const {defaultContent} = useContent();
|
|
95
|
+
const defaultContentRef = useRef<any>();
|
|
96
|
+
defaultContentRef.current = defaultContent;
|
|
39
97
|
|
|
40
98
|
const [raiseHandList, setRaiseHandList] = useState<raiseHandListInterface>(
|
|
41
99
|
{},
|
|
@@ -56,8 +114,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
56
114
|
}, [sidePanel]);
|
|
57
115
|
|
|
58
116
|
React.useEffect(() => {
|
|
59
|
-
|
|
60
|
-
}, [
|
|
117
|
+
defaultContentRef.current = defaultContent;
|
|
118
|
+
}, [defaultContent]);
|
|
61
119
|
|
|
62
120
|
React.useEffect(() => {
|
|
63
121
|
raiseHandListRef.current = raiseHandList;
|
|
@@ -75,7 +133,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
75
133
|
let newRaiseHandList = raiseHandList;
|
|
76
134
|
const data = Object.keys(
|
|
77
135
|
filterObject(
|
|
78
|
-
|
|
136
|
+
defaultContent,
|
|
137
|
+
//@ts-ignore
|
|
79
138
|
([k, v]) => v?.type === 'rtc' && v.offline === true,
|
|
80
139
|
),
|
|
81
140
|
);
|
|
@@ -91,7 +150,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
91
150
|
setRaiseHandList(newRaiseHandList);
|
|
92
151
|
}
|
|
93
152
|
});
|
|
94
|
-
}, [
|
|
153
|
+
}, [defaultContent]);
|
|
95
154
|
|
|
96
155
|
const localUid = useLocalUid();
|
|
97
156
|
const localUidRef = useRef<any>();
|
|
@@ -102,7 +161,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
102
161
|
const {setRtcProps, rtcProps, callActive} = props?.value;
|
|
103
162
|
const {
|
|
104
163
|
data: {isHost},
|
|
105
|
-
} =
|
|
164
|
+
} = useRoomInfo();
|
|
106
165
|
|
|
107
166
|
const [lastCheckedRequestTimestamp, setLastCheckedRequestTimestamp] =
|
|
108
167
|
useState(0);
|
|
@@ -112,6 +171,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
112
171
|
|
|
113
172
|
const [isPendingRequestToReview, setPendingRequestToReview] = useState(false);
|
|
114
173
|
|
|
174
|
+
const allowToBePresenter = useStringRef(livestreamToastApprovalBtnText);
|
|
175
|
+
const deny = useStringRef(livestreamToastDenyBtnText);
|
|
115
176
|
const showToast = (
|
|
116
177
|
text: string,
|
|
117
178
|
text2: string,
|
|
@@ -126,7 +187,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
126
187
|
<PrimaryButton
|
|
127
188
|
containerStyle={style.primaryBtn}
|
|
128
189
|
textStyle={style.primaryBtnText}
|
|
129
|
-
text=
|
|
190
|
+
text={allowToBePresenter?.current()}
|
|
130
191
|
onPress={() => {
|
|
131
192
|
hostApprovesRequestOfUID(uid);
|
|
132
193
|
Toast.hide();
|
|
@@ -136,7 +197,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
136
197
|
btns.secondaryBtn = (
|
|
137
198
|
<TertiaryButton
|
|
138
199
|
containerStyle={style.secondaryBtn}
|
|
139
|
-
text=
|
|
200
|
+
text={deny?.current()}
|
|
140
201
|
onPress={() => {
|
|
141
202
|
hostRejectsRequestOfUID(uid);
|
|
142
203
|
Toast.hide();
|
|
@@ -149,6 +210,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
149
210
|
}
|
|
150
211
|
|
|
151
212
|
Toast.show({
|
|
213
|
+
leadingIconName: 'info',
|
|
152
214
|
type: 'info',
|
|
153
215
|
text1: text,
|
|
154
216
|
text2: text2 ? text2 : null,
|
|
@@ -157,19 +219,19 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
157
219
|
});
|
|
158
220
|
};
|
|
159
221
|
|
|
160
|
-
const updateRtcProps = (newClientRole:
|
|
222
|
+
const updateRtcProps = (newClientRole: ClientRoleType) => {
|
|
161
223
|
setRtcProps((prevState: any) => ({
|
|
162
224
|
...prevState,
|
|
163
225
|
role:
|
|
164
|
-
newClientRole ===
|
|
165
|
-
?
|
|
166
|
-
:
|
|
226
|
+
newClientRole === ClientRoleType.ClientRoleAudience
|
|
227
|
+
? ClientRoleType.ClientRoleAudience
|
|
228
|
+
: ClientRoleType.ClientRoleBroadcaster,
|
|
167
229
|
}));
|
|
168
230
|
};
|
|
169
231
|
|
|
170
232
|
const getAttendeeName = (uid: number | string) => {
|
|
171
|
-
return
|
|
172
|
-
?
|
|
233
|
+
return defaultContentRef.current?.[uid]?.name
|
|
234
|
+
? defaultContentRef.current[uid].name
|
|
173
235
|
: 'user';
|
|
174
236
|
};
|
|
175
237
|
|
|
@@ -179,7 +241,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
179
241
|
) => {
|
|
180
242
|
if (userUID && !isEmptyObject(payload)) {
|
|
181
243
|
const userId = `${userUID}`;
|
|
182
|
-
setRaiseHandList(
|
|
244
|
+
setRaiseHandList(oldRaisedHandList => ({
|
|
183
245
|
...oldRaisedHandList,
|
|
184
246
|
[userId]: {
|
|
185
247
|
raised: payload?.raised || RaiseHandValue.FALSE,
|
|
@@ -188,23 +250,23 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
188
250
|
role:
|
|
189
251
|
payload?.role ||
|
|
190
252
|
oldRaisedHandList[userId]?.role ||
|
|
191
|
-
|
|
253
|
+
ClientRoleType.ClientRoleAudience,
|
|
192
254
|
},
|
|
193
255
|
}));
|
|
194
256
|
}
|
|
195
257
|
};
|
|
196
258
|
|
|
197
|
-
const changeClientRoleTo = (newRole:
|
|
259
|
+
const changeClientRoleTo = (newRole: ClientRoleType) => {
|
|
198
260
|
updateRtcProps(newRole);
|
|
199
261
|
};
|
|
200
262
|
|
|
201
|
-
const UpdtLocStateAndBCastAttr = (newRole:
|
|
263
|
+
const UpdtLocStateAndBCastAttr = (newRole: ClientRoleType, ts: number) => {
|
|
202
264
|
switch (newRole) {
|
|
203
|
-
case
|
|
265
|
+
case ClientRoleType.ClientRoleAudience:
|
|
204
266
|
addOrUpdateLiveStreamRequest(localUidRef.current, {
|
|
205
267
|
raised: RaiseHandValue.FALSE,
|
|
206
268
|
ts: ts,
|
|
207
|
-
role:
|
|
269
|
+
role: ClientRoleType.ClientRoleAudience,
|
|
208
270
|
});
|
|
209
271
|
// Audience notfies all host when request is rejected
|
|
210
272
|
events.send(
|
|
@@ -215,27 +277,27 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
215
277
|
ts: new Date().getTime(),
|
|
216
278
|
isProcessed: true,
|
|
217
279
|
}),
|
|
218
|
-
|
|
280
|
+
PersistanceLevel.Sender,
|
|
219
281
|
);
|
|
220
282
|
//update local cohost state
|
|
221
|
-
setCoHostUids(
|
|
283
|
+
setCoHostUids(prevState => {
|
|
222
284
|
return [
|
|
223
|
-
...prevState.filter(
|
|
285
|
+
...prevState.filter(i => i !== parseInt(localUidRef.current)),
|
|
224
286
|
];
|
|
225
287
|
});
|
|
226
288
|
// Audience notfies all users that co-host permission removed
|
|
227
289
|
events.send(
|
|
228
290
|
LiveStreamControlMessageEnum.coHostRemoved,
|
|
229
291
|
JSON.stringify({uid: localUidRef.current}),
|
|
230
|
-
|
|
292
|
+
PersistanceLevel.Sender,
|
|
231
293
|
);
|
|
232
294
|
break;
|
|
233
|
-
case
|
|
295
|
+
case ClientRoleType.ClientRoleBroadcaster:
|
|
234
296
|
// Update local state
|
|
235
297
|
addOrUpdateLiveStreamRequest(localUidRef.current, {
|
|
236
298
|
raised: RaiseHandValue.TRUE,
|
|
237
299
|
ts: ts,
|
|
238
|
-
role:
|
|
300
|
+
role: ClientRoleType.ClientRoleBroadcaster,
|
|
239
301
|
});
|
|
240
302
|
// Audience notfies all host when request is approved
|
|
241
303
|
events.send(
|
|
@@ -246,17 +308,17 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
246
308
|
ts: new Date().getTime(),
|
|
247
309
|
isProcessed: true,
|
|
248
310
|
}),
|
|
249
|
-
|
|
311
|
+
PersistanceLevel.Sender,
|
|
250
312
|
);
|
|
251
313
|
//update local cohost state
|
|
252
|
-
setCoHostUids(
|
|
314
|
+
setCoHostUids(prevState => {
|
|
253
315
|
return [...prevState, localUidRef.current];
|
|
254
316
|
});
|
|
255
317
|
// Audience notfies all users that co-host has joined
|
|
256
318
|
events.send(
|
|
257
319
|
LiveStreamControlMessageEnum.coHostJoined,
|
|
258
320
|
JSON.stringify({uid: localUidRef.current}),
|
|
259
|
-
|
|
321
|
+
PersistanceLevel.Sender,
|
|
260
322
|
);
|
|
261
323
|
default:
|
|
262
324
|
break;
|
|
@@ -267,7 +329,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
267
329
|
const pendingRequests = filterObject(
|
|
268
330
|
raiseHandList,
|
|
269
331
|
([k, v]) =>
|
|
270
|
-
v?.raised === RaiseHandValue.TRUE &&
|
|
332
|
+
v?.raised === RaiseHandValue.TRUE &&
|
|
333
|
+
v?.role == ClientRoleType.ClientRoleAudience,
|
|
271
334
|
);
|
|
272
335
|
|
|
273
336
|
React.useEffect(() => {
|
|
@@ -299,20 +362,24 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
299
362
|
|
|
300
363
|
/** ******* SETTING UP ROLES BEGINS ******* */
|
|
301
364
|
React.useEffect(() => {
|
|
302
|
-
events.on(EventNames.ROLE_ATTRIBUTE,
|
|
303
|
-
setRaiseHandList(
|
|
365
|
+
const unsubRoleAttribute = events.on(EventNames.ROLE_ATTRIBUTE, data => {
|
|
366
|
+
setRaiseHandList(prevState => {
|
|
304
367
|
return {
|
|
305
368
|
...prevState,
|
|
306
369
|
[data.sender]: {
|
|
307
370
|
...prevState[data.sender],
|
|
308
371
|
role:
|
|
309
|
-
data.payload in
|
|
372
|
+
data.payload in ClientRoleType
|
|
310
373
|
? parseInt(data.payload)
|
|
311
|
-
:
|
|
374
|
+
: ClientRoleType.ClientRoleAudience,
|
|
312
375
|
},
|
|
313
376
|
};
|
|
314
377
|
});
|
|
315
378
|
});
|
|
379
|
+
|
|
380
|
+
return () => {
|
|
381
|
+
unsubRoleAttribute();
|
|
382
|
+
};
|
|
316
383
|
}, []);
|
|
317
384
|
|
|
318
385
|
React.useEffect(() => {
|
|
@@ -320,17 +387,21 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
320
387
|
events.send(
|
|
321
388
|
EventNames.ROLE_ATTRIBUTE,
|
|
322
389
|
JSON.stringify(
|
|
323
|
-
rtcProps.role in
|
|
390
|
+
rtcProps.role in ClientRoleType
|
|
391
|
+
? rtcProps.role
|
|
392
|
+
: ClientRoleType.ClientRoleAudience,
|
|
324
393
|
),
|
|
325
|
-
|
|
394
|
+
PersistanceLevel.Sender,
|
|
326
395
|
);
|
|
327
|
-
setRaiseHandList(
|
|
396
|
+
setRaiseHandList(prevState => {
|
|
328
397
|
return {
|
|
329
398
|
...prevState,
|
|
330
399
|
[localUid]: {
|
|
331
400
|
...prevState[localUid],
|
|
332
401
|
role:
|
|
333
|
-
rtcProps.role in
|
|
402
|
+
rtcProps.role in ClientRoleType
|
|
403
|
+
? rtcProps.role
|
|
404
|
+
: ClientRoleType.ClientRoleAudience,
|
|
334
405
|
},
|
|
335
406
|
};
|
|
336
407
|
});
|
|
@@ -342,178 +413,200 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
342
413
|
|
|
343
414
|
React.useEffect(() => {
|
|
344
415
|
/** ********************** HOST EVENTS SECTION BEGINS ********************** */
|
|
345
|
-
events.on(
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
416
|
+
const unsubRaisedAttribute = events.on(
|
|
417
|
+
EventNames.RAISED_ATTRIBUTE,
|
|
418
|
+
data => {
|
|
419
|
+
if (!isHost) return;
|
|
420
|
+
const payload = JSON.parse(data.payload);
|
|
421
|
+
const action = payload.action;
|
|
422
|
+
const value = payload.value;
|
|
423
|
+
const isProcessed = payload?.isProcessed || false;
|
|
424
|
+
|
|
425
|
+
switch (action) {
|
|
426
|
+
// 1. Host can receive raise hand request with true or false value
|
|
427
|
+
case LiveStreamControlMessageEnum.raiseHandRequest:
|
|
428
|
+
switch (value) {
|
|
429
|
+
case RaiseHandValue.TRUE:
|
|
430
|
+
// Step 1: Show notifications
|
|
431
|
+
if (
|
|
432
|
+
payload.ts > rtmInitTimstamp &&
|
|
433
|
+
sidePanelRef.current !== SidePanelType.Participants
|
|
434
|
+
) {
|
|
435
|
+
showToast(
|
|
436
|
+
raiseHandRequestReceivedToastHeading?.current(
|
|
437
|
+
trimText(getAttendeeName(data.sender)),
|
|
438
|
+
),
|
|
439
|
+
raiseHandRequestReceivedToastSubHeading?.current(),
|
|
440
|
+
data.sender,
|
|
441
|
+
data.ts,
|
|
442
|
+
);
|
|
443
|
+
}
|
|
444
|
+
// 2. All Hosts in channel update their raised state to "true" when attendee raise their hand
|
|
445
|
+
addOrUpdateLiveStreamRequest(data.sender, {
|
|
446
|
+
ts: data.ts,
|
|
447
|
+
raised: RaiseHandValue.TRUE,
|
|
448
|
+
role: ClientRoleType.ClientRoleAudience,
|
|
449
|
+
isProcessed: isProcessed,
|
|
450
|
+
});
|
|
451
|
+
break;
|
|
452
|
+
case RaiseHandValue.FALSE:
|
|
453
|
+
// Step 1: Show notifications
|
|
454
|
+
if (
|
|
455
|
+
payload.ts > rtmInitTimstamp &&
|
|
456
|
+
sidePanelRef.current !== SidePanelType.Participants
|
|
457
|
+
) {
|
|
458
|
+
showToast(
|
|
459
|
+
raiseHandRequestRecallToastHeading?.current(
|
|
460
|
+
trimText(getAttendeeName(data.sender)),
|
|
461
|
+
),
|
|
462
|
+
null,
|
|
463
|
+
);
|
|
464
|
+
}
|
|
465
|
+
// 2. All Hosts in channel update raised state to "false" when attendee recalls their request
|
|
466
|
+
addOrUpdateLiveStreamRequest(data.sender, {
|
|
467
|
+
ts: data.ts,
|
|
468
|
+
raised: RaiseHandValue.FALSE,
|
|
469
|
+
role: ClientRoleType.ClientRoleAudience,
|
|
470
|
+
isProcessed: isProcessed,
|
|
471
|
+
});
|
|
472
|
+
default:
|
|
473
|
+
break;
|
|
474
|
+
}
|
|
475
|
+
break;
|
|
476
|
+
// 2. All Hosts in channel gets notified when an attendee's request gets approved or rejected
|
|
477
|
+
case LiveStreamControlMessageEnum.notifyHostsInChannel:
|
|
478
|
+
if (!isHost) return;
|
|
479
|
+
switch (value) {
|
|
480
|
+
case RaiseHandValue.TRUE:
|
|
481
|
+
addOrUpdateLiveStreamRequest(data.sender, {
|
|
482
|
+
ts: data.ts,
|
|
483
|
+
raised: RaiseHandValue.TRUE,
|
|
484
|
+
role: ClientRoleType.ClientRoleBroadcaster,
|
|
485
|
+
isProcessed: isProcessed,
|
|
486
|
+
});
|
|
487
|
+
break;
|
|
488
|
+
case RaiseHandValue.FALSE:
|
|
489
|
+
addOrUpdateLiveStreamRequest(data.sender, {
|
|
490
|
+
ts: data.ts,
|
|
491
|
+
raised: RaiseHandValue.FALSE,
|
|
492
|
+
role: ClientRoleType.ClientRoleAudience,
|
|
493
|
+
isProcessed: isProcessed,
|
|
494
|
+
});
|
|
495
|
+
break;
|
|
496
|
+
default:
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
break;
|
|
500
|
+
default:
|
|
501
|
+
break;
|
|
502
|
+
}
|
|
503
|
+
},
|
|
504
|
+
);
|
|
431
505
|
/** ********************** HOST EVENTS SECTION ENDS ********************** */
|
|
432
506
|
|
|
433
507
|
/** ********************** AUDIENCE EVENTS SECTION BEGINS ********************** */
|
|
434
508
|
// 1. Audience receives this when the request is accepted by host
|
|
435
|
-
events.on(
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
509
|
+
const unsubRaiseHandReqAcpt = events.on(
|
|
510
|
+
LiveStreamControlMessageEnum.raiseHandRequestAccepted,
|
|
511
|
+
data => {
|
|
512
|
+
if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.FALSE)
|
|
513
|
+
return;
|
|
514
|
+
showToast(
|
|
515
|
+
raiseHandRequestAcceptedToastHeading?.current(),
|
|
516
|
+
raiseHandRequestAcceptedToastSubHeading?.current(),
|
|
517
|
+
);
|
|
518
|
+
// Promote user's privileges to host
|
|
519
|
+
changeClientRoleTo(ClientRoleType.ClientRoleBroadcaster);
|
|
520
|
+
// Audience updates its local attributes and notfies all host when request is approved
|
|
521
|
+
UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleBroadcaster, data.ts);
|
|
522
|
+
},
|
|
523
|
+
);
|
|
447
524
|
/** 2. Audience receives this when the request is rejected by host
|
|
448
525
|
* 2.a Audience receives this when the request is rejected by host which is not yet approved
|
|
449
526
|
* 2.b Audience receives this when the request when is demoted by the host
|
|
450
527
|
*/
|
|
451
|
-
events.on(
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
528
|
+
const unsubRaiseHandReqRej = events.on(
|
|
529
|
+
LiveStreamControlMessageEnum.raiseHandRequestRejected,
|
|
530
|
+
data => {
|
|
531
|
+
/** 2.a */
|
|
532
|
+
if (
|
|
533
|
+
raiseHandListRef.current[localUidRef.current].role ==
|
|
534
|
+
ClientRoleType.ClientRoleAudience
|
|
535
|
+
) {
|
|
536
|
+
showToast(raiseHandRequestRejectedToastHeading?.current(), null);
|
|
537
|
+
} else if (
|
|
538
|
+
raiseHandListRef.current[localUidRef.current].role ==
|
|
539
|
+
ClientRoleType.ClientRoleBroadcaster
|
|
540
|
+
) {
|
|
541
|
+
/** 2.b */
|
|
542
|
+
showToast(
|
|
543
|
+
raiseHandApprovedRequestRecallToastHeading?.current(),
|
|
544
|
+
null,
|
|
545
|
+
);
|
|
546
|
+
screenshareContextInstanceRef?.current?.stopUserScreenShare(); // This will not exist on ios
|
|
547
|
+
|
|
548
|
+
// Demote user's privileges to audience
|
|
549
|
+
changeClientRoleTo(ClientRoleType.ClientRoleAudience);
|
|
550
|
+
}
|
|
551
|
+
// Audience updates its local attributes and notfies all host when demoted/request rejected
|
|
552
|
+
UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleAudience, data.ts);
|
|
553
|
+
},
|
|
554
|
+
);
|
|
478
555
|
// 3. Audience when receives kickUser notifies all host when is kicked out
|
|
479
|
-
events.on(controlMessageEnum.kickUser,
|
|
556
|
+
const unsubKickUser = events.on(controlMessageEnum.kickUser, data => {
|
|
480
557
|
// Audience updates its local attributes and notfies all host when they(audience) are kicked out
|
|
481
|
-
UpdtLocStateAndBCastAttr(
|
|
558
|
+
UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleAudience, data.ts);
|
|
482
559
|
});
|
|
483
560
|
// 4. Host promote audience as co-host
|
|
484
|
-
events.on(
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
561
|
+
const unsubPromoteAsCoHost = events.on(
|
|
562
|
+
LiveStreamControlMessageEnum.promoteAsCoHost,
|
|
563
|
+
data => {
|
|
564
|
+
showToast(promoteAsCoHostToastHeading.current(), null);
|
|
565
|
+
// Promote user's privileges to host
|
|
566
|
+
changeClientRoleTo(ClientRoleType.ClientRoleBroadcaster);
|
|
567
|
+
// Audience updates its local attributes and notfies all host when request is approved
|
|
568
|
+
UpdtLocStateAndBCastAttr(ClientRoleType.ClientRoleBroadcaster, data.ts);
|
|
569
|
+
},
|
|
570
|
+
);
|
|
494
571
|
// 4. New co-host has joined
|
|
495
|
-
events.on(
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
572
|
+
const unsubCoHostJoined = events.on(
|
|
573
|
+
LiveStreamControlMessageEnum.coHostJoined,
|
|
574
|
+
({payload}) => {
|
|
575
|
+
try {
|
|
576
|
+
const data = JSON.parse(payload);
|
|
577
|
+
if (data?.uid) {
|
|
578
|
+
setCoHostUids(prevState => {
|
|
579
|
+
return [...prevState, parseInt(data.uid)];
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
} catch (error) {}
|
|
583
|
+
},
|
|
584
|
+
);
|
|
505
585
|
// 5. Co-host removed
|
|
506
|
-
events.on(
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
586
|
+
const unsubCoHostRemoved = events.on(
|
|
587
|
+
LiveStreamControlMessageEnum.coHostRemoved,
|
|
588
|
+
({payload}) => {
|
|
589
|
+
try {
|
|
590
|
+
const data = JSON.parse(payload);
|
|
591
|
+
if (data?.uid) {
|
|
592
|
+
setCoHostUids(prevState => {
|
|
593
|
+
return [...prevState.filter(i => i !== parseInt(data.uid))];
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
} catch (error) {}
|
|
597
|
+
},
|
|
598
|
+
);
|
|
516
599
|
/** ********************** AUDIENCE EVENTS SECTION ENDS ********************** */
|
|
600
|
+
|
|
601
|
+
return () => {
|
|
602
|
+
unsubRaisedAttribute();
|
|
603
|
+
unsubRaiseHandReqAcpt();
|
|
604
|
+
unsubRaiseHandReqRej();
|
|
605
|
+
unsubKickUser();
|
|
606
|
+
unsubPromoteAsCoHost();
|
|
607
|
+
unsubCoHostJoined();
|
|
608
|
+
unsubCoHostRemoved();
|
|
609
|
+
};
|
|
517
610
|
}, []);
|
|
518
611
|
|
|
519
612
|
/** ******* EVENT LISTENERS SECTION ENDS ******* */
|
|
@@ -534,13 +627,13 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
534
627
|
events.send(
|
|
535
628
|
LiveStreamControlMessageEnum.raiseHandRequestAccepted,
|
|
536
629
|
'',
|
|
537
|
-
|
|
630
|
+
PersistanceLevel.None,
|
|
538
631
|
uid,
|
|
539
632
|
);
|
|
540
633
|
} else {
|
|
541
634
|
Toast.hide();
|
|
542
635
|
setTimeout(() => {
|
|
543
|
-
showToast(
|
|
636
|
+
showToast(requestAlreadyProcessed?.current(), null);
|
|
544
637
|
});
|
|
545
638
|
}
|
|
546
639
|
};
|
|
@@ -555,13 +648,13 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
555
648
|
events.send(
|
|
556
649
|
LiveStreamControlMessageEnum.raiseHandRequestRejected,
|
|
557
650
|
'',
|
|
558
|
-
|
|
651
|
+
PersistanceLevel.None,
|
|
559
652
|
uid,
|
|
560
653
|
);
|
|
561
654
|
} else {
|
|
562
655
|
Toast.hide();
|
|
563
656
|
setTimeout(() => {
|
|
564
|
-
showToast(
|
|
657
|
+
showToast(requestAlreadyProcessed?.current(), null);
|
|
565
658
|
});
|
|
566
659
|
}
|
|
567
660
|
};
|
|
@@ -571,7 +664,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
571
664
|
events.send(
|
|
572
665
|
LiveStreamControlMessageEnum.promoteAsCoHost,
|
|
573
666
|
'',
|
|
574
|
-
|
|
667
|
+
PersistanceLevel.None,
|
|
575
668
|
uid,
|
|
576
669
|
);
|
|
577
670
|
};
|
|
@@ -590,8 +683,8 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
590
683
|
if (raiseHandList[localUidRef.current]?.raised === RaiseHandValue.TRUE)
|
|
591
684
|
return;
|
|
592
685
|
showToast(
|
|
593
|
-
|
|
594
|
-
|
|
686
|
+
raiseHandRequestToastHeading?.current(),
|
|
687
|
+
raiseHandRequestToastSubHeading?.current(),
|
|
595
688
|
);
|
|
596
689
|
events.send(
|
|
597
690
|
EventNames.RAISED_ATTRIBUTE,
|
|
@@ -601,7 +694,7 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
601
694
|
ts: new Date().getTime(),
|
|
602
695
|
isProcessed: false,
|
|
603
696
|
}),
|
|
604
|
-
|
|
697
|
+
PersistanceLevel.Sender,
|
|
605
698
|
);
|
|
606
699
|
// Update local state
|
|
607
700
|
addOrUpdateLiveStreamRequest(localUidRef.current, {
|
|
@@ -619,12 +712,13 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
619
712
|
* else: Audience Request was not approved by host, and was pending
|
|
620
713
|
*/
|
|
621
714
|
if (
|
|
622
|
-
raiseHandList[localUidRef.current]?.role ==
|
|
715
|
+
raiseHandList[localUidRef.current]?.role ==
|
|
716
|
+
ClientRoleType.ClientRoleBroadcaster &&
|
|
623
717
|
raiseHandList[localUidRef.current]?.raised === RaiseHandValue.TRUE
|
|
624
718
|
) {
|
|
625
719
|
screenshareContextInstanceRef?.current?.stopUserScreenShare(); // This will not exist on ios
|
|
626
720
|
// Change role
|
|
627
|
-
changeClientRoleTo(
|
|
721
|
+
changeClientRoleTo(ClientRoleType.ClientRoleAudience);
|
|
628
722
|
}
|
|
629
723
|
//notify host users
|
|
630
724
|
events.send(
|
|
@@ -635,13 +729,13 @@ export const LiveStreamContextProvider: React.FC<liveStreamPropsInterface> = (
|
|
|
635
729
|
ts: new Date().getTime(),
|
|
636
730
|
isProcessed: true,
|
|
637
731
|
}),
|
|
638
|
-
|
|
732
|
+
PersistanceLevel.Sender,
|
|
639
733
|
);
|
|
640
|
-
UpdtLocStateAndBCastAttr(
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
LSNotificationObject.RAISE_HAND_REQUEST_RECALL_LOCAL.text2,
|
|
734
|
+
UpdtLocStateAndBCastAttr(
|
|
735
|
+
ClientRoleType.ClientRoleAudience,
|
|
736
|
+
new Date().getTime(),
|
|
644
737
|
);
|
|
738
|
+
showToast(raiseHandRequestRecallLocalToastHeading?.current(), null);
|
|
645
739
|
};
|
|
646
740
|
|
|
647
741
|
/** ******* AUDIENCE CONTROLS SECTION ENDS ******* */
|