import { PropsWithChildren } from 'react' import { Route, Routes } from 'react-router-dom' import List from '@mui/material/List' import ListItemIcon from '@mui/material/ListItemIcon' import ListItemText from '@mui/material/ListItemText' import Divider from '@mui/material/Divider' import IconButton from '@mui/material/IconButton' import ChevronRightIcon from '@mui/icons-material/ChevronRight' import VolumeUp from '@mui/icons-material/VolumeUp' import ListItem from '@mui/material/ListItem' import Box from '@mui/material/Box' import CircularProgress from '@mui/material/CircularProgress' import { PeerListHeader } from 'components/Shell/PeerListHeader' import { Username } from 'components/Username/Username' import { AudioState, Peer } from 'models/chat' import { PeerConnectionType } from 'services/PeerRoom/PeerRoom' import { TrackerConnection } from 'services/ConnectionTest/ConnectionTest' import { routes } from 'config/routes' import { PeerListItem } from './PeerListItem' import { ConnectionTestResults as IConnectionTestResults } from './useConnectionTest' import { ConnectionTestResults } from './ConnectionTestResults' export const peerListWidth = 300 export interface PeerListProps extends PropsWithChildren { userId: string roomId: string | undefined onPeerListClose: () => void peerList: Peer[] peerConnectionTypes: Record audioState: AudioState peerAudios: Record connectionTestResults: IConnectionTestResults } export const PeerList = ({ userId, roomId, onPeerListClose, peerList, peerConnectionTypes, audioState, peerAudios, connectionTestResults, }: PeerListProps) => { return ( <> {/* This stub route is needed to silence spurious warnings in the tests. */} }> {[routes.PUBLIC_ROOM, routes.PRIVATE_ROOM].map(route => ( } /> ))} {audioState === AudioState.PLAYING && ( )} {peerList.map((peer: Peer) => ( ))} {peerList.length === 0 && typeof roomId === 'string' && connectionTestResults.trackerConnection === TrackerConnection.CONNECTED && connectionTestResults.hasHost ? ( <> Searching for peers... ) : null} ) }