import React, { useEffect, useRef } from 'react'; import { DefaultConferencingScreen_Elements } from '@100mslive/types-prebuilt'; import { v4 as uuid } from 'uuid'; import { HMSRoomState, selectIsConnectedToRoom, selectRoomState, useAwayNotifications, useHMSActions, useHMSStore, } from '@100mslive/react-sdk'; import { Footer } from './Footer/Footer'; import { MoreSettings } from './MoreSettings/MoreSettings'; import { HLSFailureModal } from './Notifications/HLSFailureModal'; // @ts-ignore: No implicit Any import { ActivatedPIP } from './PIP/PIPComponent'; // @ts-ignore: No implicit Any import { PictureInPicture } from './PIP/PIPManager'; import { RoleChangeRequestModal } from './RoleChangeRequest/RoleChangeRequestModal'; import { Box, Flex } from '../../Layout'; import { useHMSPrebuiltContext } from '../AppContext'; import { VideoStreamingSection } from '../layouts/VideoStreamingSection'; // @ts-ignore: No implicit Any import { EmojiReaction } from './EmojiReaction'; import FullPageProgress from './FullPageProgress'; import { Header } from './Header'; import { PreviousRoleInMetadata } from './PreviousRoleInMetadata'; import { RaiseHand } from './RaiseHand'; import { useRoomLayoutConferencingScreen, useRoomLayoutPreviewScreen, } from '../provider/roomLayoutProvider/hooks/useRoomLayoutScreen'; // @ts-ignore: No implicit Any import { useAuthToken, useSetAppDataByKey } from './AppData/useUISettings'; import { useLandscapeHLSStream, useMobileHLSStream } from '../common/hooks'; import { APP_DATA } from '../common/constants'; export const ConferenceScreen = () => { const { userName, endpoints, onJoin: onJoinFunc } = useHMSPrebuiltContext(); const screenProps = useRoomLayoutConferencingScreen(); const { isPreviewScreenEnabled } = useRoomLayoutPreviewScreen(); const roomState = useHMSStore(selectRoomState); const isConnectedToRoom = useHMSStore(selectIsConnectedToRoom); const hmsActions = useHMSActions(); const authTokenInAppData = useAuthToken(); const headerRef = useRef(null); const footerRef = useRef(null); const [isHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted); const { requestPermission } = useAwayNotifications(); // using it in hls stream to show action button when chat is disabled const showChat = !!screenProps.elements?.chat; const autoRoomJoined = useRef(isPreviewScreenEnabled); const isMobileHLSStream = useMobileHLSStream(); const isLandscapeHLSStream = useLandscapeHLSStream(); const isMwebHLSStream = isMobileHLSStream || isLandscapeHLSStream; useEffect(() => { if ( authTokenInAppData && !isConnectedToRoom && !isPreviewScreenEnabled && roomState !== HMSRoomState.Connecting && !autoRoomJoined.current ) { hmsActions .join({ userName: userName || uuid(), authToken: authTokenInAppData, initEndpoint: endpoints?.init, rememberDeviceSelection: true, settings: { isAudioMuted: !isPreviewScreenEnabled, isVideoMuted: !isPreviewScreenEnabled, speakerAutoSelectionBlacklist: ['Yeti Stereo Microphone'], }, }) .then(() => requestPermission()) .catch(console.error); autoRoomJoined.current = true; } }, [ authTokenInAppData, endpoints?.init, hmsActions, isConnectedToRoom, isPreviewScreenEnabled, roomState, userName, requestPermission, ]); useEffect(() => { onJoinFunc?.(); return () => { PictureInPicture.stop().catch((error: unknown) => console.error('stopping pip', (error as Error).message)); }; }, [onJoinFunc]); if (!isConnectedToRoom && ![HMSRoomState.Reconnecting, HMSRoomState.Disconnected].includes(roomState)) { return ; } return ( <> {isHLSStarted ? ( ) : null} {!(screenProps.hideSections.includes('header') || isMwebHLSStream) && (
)} {screenProps.elements ? ( ) : null} {!screenProps.hideSections.includes('footer') && screenProps.elements && !isMwebHLSStream && (