import React, { Component } from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import * as appPropTypes from '../appPropTypes'; import { withRoomContext } from '../../RoomContext'; import * as stateActions from '../../redux/stateActions'; import PeerView from '../VideoContainers/PeerView'; import ScreenView from '../VideoContainers/ScreenView'; class Peer extends Component { state = { controlsVisible : false }; handleMouseOver = () => { this.setState({ controlsVisible : true }); }; handleMouseOut = () => { this.setState({ controlsVisible : false }); }; render() { const { roomClient, advancedMode, peer, micConsumer, webcamConsumer, screenConsumer, toggleConsumerFullscreen, toggleConsumerWindow, style, windowConsumer } = this.props; const micEnabled = ( Boolean(micConsumer) && !micConsumer.locallyPaused && !micConsumer.remotelyPaused ); const videoVisible = ( Boolean(webcamConsumer) && !webcamConsumer.locallyPaused && !webcamConsumer.remotelyPaused ); const screenVisible = ( Boolean(screenConsumer) && !screenConsumer.locallyPaused && !screenConsumer.remotelyPaused ); let videoProfile; if (webcamConsumer) videoProfile = webcamConsumer.profile; let screenProfile; if (screenConsumer) screenProfile = screenConsumer.profile; return (

incompatible video

this video is paused

{ e.stopPropagation(); micEnabled ? roomClient.modifyPeerConsumer(peer.name, 'mic', true) : roomClient.modifyPeerConsumer(peer.name, 'mic', false); }} />
{ e.stopPropagation(); toggleConsumerWindow(webcamConsumer); }} />
{ e.stopPropagation(); toggleConsumerFullscreen(webcamConsumer); }} />
{ e.stopPropagation(); toggleConsumerWindow(screenConsumer); }} />
{ e.stopPropagation(); toggleConsumerFullscreen(screenConsumer); }} />
); } } Peer.propTypes = { roomClient : PropTypes.any.isRequired, advancedMode : PropTypes.bool, peer : appPropTypes.Peer.isRequired, micConsumer : appPropTypes.Consumer, webcamConsumer : appPropTypes.Consumer, screenConsumer : appPropTypes.Consumer, windowConsumer : PropTypes.number, streamDimensions : PropTypes.object, style : PropTypes.object, toggleConsumerFullscreen : PropTypes.func.isRequired, toggleConsumerWindow : PropTypes.func.isRequired }; const mapStateToProps = (state, { name }) => { const peer = state.peers[name]; const consumersArray = peer.consumers .map((consumerId) => state.consumers[consumerId]); const micConsumer = consumersArray.find((consumer) => consumer.source === 'mic'); const webcamConsumer = consumersArray.find((consumer) => consumer.source === 'webcam'); const screenConsumer = consumersArray.find((consumer) => consumer.source === 'screen'); return { peer, micConsumer, webcamConsumer, screenConsumer, windowConsumer : state.room.windowConsumer }; }; const mapDispatchToProps = (dispatch) => { return { toggleConsumerFullscreen : (consumer) => { if (consumer) dispatch(stateActions.toggleConsumerFullscreen(consumer.id)); }, toggleConsumerWindow : (consumer) => { if (consumer) dispatch(stateActions.toggleConsumerWindow(consumer.id)); } }; }; const PeerContainer = withRoomContext(connect( mapStateToProps, mapDispatchToProps )(Peer)); export default PeerContainer;