import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import * as appPropTypes from './appPropTypes';
import { withRoomContext } from '../RoomContext';
import * as stateActions from '../redux/stateActions';
import PeerView from './PeerView';
const Peer = (props) =>
{
const {
roomClient,
peer,
audioConsumer,
videoConsumer,
audioMuted,
faceDetection,
onSetStatsPeerId
} = props;
const audioEnabled = (
Boolean(audioConsumer) &&
!audioConsumer.locallyPaused &&
!audioConsumer.remotelyPaused
);
const videoVisible = (
Boolean(videoConsumer) &&
!videoConsumer.locallyPaused &&
!videoConsumer.remotelyPaused
);
return (
{
roomClient.setConsumerPreferredLayers(
videoConsumer.id, spatialLayer, temporalLayer);
}}
onChangeVideoPriority={(priority) =>
{
roomClient.setConsumerPriority(videoConsumer.id, priority);
}}
onRequestKeyFrame={() =>
{
roomClient.requestConsumerKeyFrame(videoConsumer.id);
}}
onStatsClick={onSetStatsPeerId}
/>
);
};
Peer.propTypes =
{
roomClient : PropTypes.any.isRequired,
peer : appPropTypes.Peer.isRequired,
audioConsumer : appPropTypes.Consumer,
videoConsumer : appPropTypes.Consumer,
audioMuted : PropTypes.bool,
faceDetection : PropTypes.bool.isRequired,
onSetStatsPeerId : PropTypes.func.isRequired
};
const mapStateToProps = (state, { id }) =>
{
const me = state.me;
const peer = state.peers[id];
const consumersArray = peer.consumers
.map((consumerId) => state.consumers[consumerId]);
const audioConsumer =
consumersArray.find((consumer) => consumer.track.kind === 'audio');
const videoConsumer =
consumersArray.find((consumer) => consumer.track.kind === 'video');
return {
peer,
audioConsumer,
videoConsumer,
audioMuted : me.audioMuted,
faceDetection : state.room.faceDetection
};
};
const mapDispatchToProps = (dispatch) =>
{
return {
onSetStatsPeerId : (peerId) => dispatch(stateActions.setRoomStatsPeerId(peerId))
};
};
const PeerContainer = withRoomContext(connect(
mapStateToProps,
mapDispatchToProps
)(Peer));
export default PeerContainer;