import { useContext } from 'react' import { useWindowSize } from '@react-hook/window-size' import Collapse from '@mui/material/Collapse' import Zoom from '@mui/material/Zoom' import Box from '@mui/material/Box' import Divider from '@mui/material/Divider' import { v4 as uuid } from 'uuid' import { rtcConfig } from 'config/rtcConfig' import { trackerUrls } from 'config/trackerUrls' import { RoomContext } from 'contexts/RoomContext' import { ShellContext } from 'contexts/ShellContext' import { MessageForm } from 'components/MessageForm' import { ChatTranscript } from 'components/ChatTranscript' import { useRoom } from './useRoom' import { RoomAudioControls } from './RoomAudioControls' import { RoomVideoControls } from './RoomVideoControls' import { RoomScreenShareControls } from './RoomScreenShareControls' import { RoomFileUploadControls } from './RoomFileUploadControls' import { RoomVideoDisplay } from './RoomVideoDisplay' import { RoomShowMessagesControls } from './RoomShowMessagesControls' import { RoomHideRoomControls } from './RoomHideRoomControls' import { TypingStatusBar } from './TypingStatusBar' export interface RoomProps { appId?: string getUuid?: typeof uuid password?: string roomId: string userId: string } export function Room({ appId = `${encodeURI(window.location.origin)}_${process.env.REACT_APP_NAME}`, getUuid = uuid, roomId, password, userId, }: RoomProps) { const { isMessageSending, handleInlineMediaUpload, handleMessageChange, messageLog, peerRoom, roomContextValue, sendMessage, showVideoDisplay, } = useRoom( { appId, trackerUrls, rtcConfig, password, trackerRedundancy: 3, }, { roomId, userId, getUuid, } ) const handleMessageSubmit = async (message: string) => { await sendMessage(message) } const showMessages = roomContextValue.isShowingMessages const { showRoomControls } = useContext(ShellContext) const [windowWidth, windowHeight] = useWindowSize() const landscape = windowWidth > windowHeight return ( {showVideoDisplay && ( )} {showMessages && ( )} ) }