import React from 'react'; import { connect } from 'react-redux'; import { makePeerConsumerSelector } from '../../Selectors'; import { withStyles } from '@material-ui/core/styles'; import PropTypes from 'prop-types'; import * as appPropTypes from '../../appPropTypes'; import { withRoomContext } from '../../../RoomContext'; import { useIntl } from 'react-intl'; import { green } from '@material-ui/core/colors'; import IconButton from '@material-ui/core/IconButton'; import Tooltip from '@material-ui/core/Tooltip'; import VideocamIcon from '@material-ui/icons/Videocam'; import VideocamOffIcon from '@material-ui/icons/VideocamOff'; import MicIcon from '@material-ui/icons/Mic'; import MicOffIcon from '@material-ui/icons/MicOff'; import VolumeUpIcon from '@material-ui/icons/VolumeUp'; import VolumeOffIcon from '@material-ui/icons/VolumeOff'; import ScreenIcon from '@material-ui/icons/ScreenShare'; import ScreenOffIcon from '@material-ui/icons/StopScreenShare'; import ExitIcon from '@material-ui/icons/ExitToApp'; import EmptyAvatar from '../../../images/avatar-empty.jpeg'; import PanIcon from '@material-ui/icons/PanTool'; import RecordVoiceOverIcon from '@material-ui/icons/RecordVoiceOver'; const styles = (theme) => ({ root : { width : '100%', overflow : 'hidden', cursor : 'auto', display : 'flex' }, avatar : { borderRadius : '50%', height : '2rem', marginTop : theme.spacing(0.5) }, peerInfo : { fontSize : '1rem', display : 'flex', paddingLeft : theme.spacing(1), flexGrow : 1, alignItems : 'center' }, indicators : { display : 'flex', padding : theme.spacing(1) }, buttons : { padding : theme.spacing(1) }, green : { color : 'rgba(0, 153, 0, 1)', marginLeft : theme.spacing(2) } }); const ListPeer = (props) => { const intl = useIntl(); const { roomClient, isModerator, spotlight, peer, micConsumer, webcamConsumer, screenConsumer, children, classes } = props; const webcamEnabled = ( Boolean(webcamConsumer) && !webcamConsumer.locallyPaused && !webcamConsumer.remotelyPaused ); const micEnabled = ( Boolean(micConsumer) && !micConsumer.locallyPaused && !micConsumer.remotelyPaused ); const screenVisible = ( Boolean(screenConsumer) && !screenConsumer.locallyPaused && !screenConsumer.remotelyPaused ); const picture = peer.picture || EmptyAvatar; return (
Peer avatar
{peer.displayName}
{ peer.raisedHand && { e.stopPropagation(); roomClient.lowerPeerHand(peer.id); }} > } { spotlight && } { screenConsumer && spotlight && { e.stopPropagation(); screenVisible ? roomClient.modifyPeerConsumer(peer.id, 'screen', true) : roomClient.modifyPeerConsumer(peer.id, 'screen', false); }} > { screenVisible ? : } } { spotlight && { e.stopPropagation(); webcamEnabled ? roomClient.modifyPeerConsumer(peer.id, 'webcam', true) : roomClient.modifyPeerConsumer(peer.id, 'webcam', false); }} > { webcamEnabled ? : } } { e.stopPropagation(); micEnabled ? roomClient.modifyPeerConsumer(peer.id, 'mic', true) : roomClient.modifyPeerConsumer(peer.id, 'mic', false); }} > { micEnabled ? : } { isModerator && { e.stopPropagation(); roomClient.kickPeer(peer.id); }} > } { isModerator && micConsumer && { e.stopPropagation(); roomClient.mutePeer(peer.id); }} > { !micConsumer.remotelyPaused ? : } } { isModerator && webcamConsumer && { e.stopPropagation(); roomClient.stopPeerVideo(peer.id); }} > { !webcamConsumer.remotelyPaused ? : } } {children}
); }; ListPeer.propTypes = { roomClient : PropTypes.any.isRequired, advancedMode : PropTypes.bool, isModerator : PropTypes.bool, spotlight : PropTypes.bool, peer : appPropTypes.Peer.isRequired, micConsumer : appPropTypes.Consumer, webcamConsumer : appPropTypes.Consumer, screenConsumer : appPropTypes.Consumer, children : PropTypes.object, classes : PropTypes.object.isRequired }; const makeMapStateToProps = (initialState, { id }) => { const getPeerConsumers = makePeerConsumerSelector(); const mapStateToProps = (state) => { return { peer : state.peers[id], ...getPeerConsumers(state, id) }; }; return mapStateToProps; }; export default withRoomContext(connect( makeMapStateToProps, null, null, { areStatesEqual : (next, prev) => { return ( prev.peers === next.peers && prev.consumers === next.consumers ); } } )(withStyles(styles)(ListPeer)));