Support selecting Peers from ParticipantList

master
Torjus 2018-08-02 12:44:28 +02:00
parent 9b407d58a0
commit 9e23683f0b
4 changed files with 43 additions and 61 deletions

View File

@ -92,12 +92,6 @@ class Filmstrip extends Component
} }
} }
handleSelectPeer = (selectedPeerName) =>
{
this.props.setSelectedPeer(this.props.selectedPeerName === selectedPeerName ?
null : selectedPeerName);
};
render() render()
{ {
const { peers, advancedMode } = this.props; const { peers, advancedMode } = this.props;
@ -128,7 +122,7 @@ class Filmstrip extends Component
{Object.keys(peers).map((peerName) => ( {Object.keys(peers).map((peerName) => (
<div <div
key={peerName} key={peerName}
onClick={() => this.handleSelectPeer(peerName)} onClick={() => this.props.setSelectedPeer(peerName)}
className={classnames('film', { className={classnames('film', {
selected : this.props.selectedPeerName === peerName, selected : this.props.selectedPeerName === peerName,
active : this.state.lastSpeaker === peerName active : this.state.lastSpeaker === peerName

View File

@ -1,48 +1,35 @@
import React from 'react'; import React from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import classNames from 'classnames';
import * as appPropTypes from '../appPropTypes'; import * as appPropTypes from '../appPropTypes';
import * as requestActions from '../../redux/requestActions';
import * as stateActions from '../../redux/stateActions'; import * as stateActions from '../../redux/stateActions';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import ListPeer from './ListPeer'; import ListPeer from './ListPeer';
class ParticipantList extends React.Component const ParticipantList = ({ advancedMode, peers, setSelectedPeer, selectedPeerName }) => (
{ <div data-component='ParticipantList'>
constructor(props) <ul className='list'>
{ {peers.map((peer) => (
super(props); <li
} key={peer.name}
className={classNames('list-item', {
render() selected : peer.name === selectedPeerName
{ })}
const { onClick={() => setSelectedPeer(peer.name)}
advancedMode, >
peers <ListPeer name={peer.name} advancedMode={advancedMode} />
} = this.props; </li>
))}
return ( </ul>
<div data-component='ParticipantList'> </div>
<ul className='list'> );
{
peers.map((peer) =>
{
return (
<li key={peer.name} className='list-item'>
<ListPeer name={peer.name} advancedMode={advancedMode} />
</li>
);
})
}
</ul>
</div>
);
}
}
ParticipantList.propTypes = ParticipantList.propTypes =
{ {
advancedMode : PropTypes.bool, advancedMode : PropTypes.bool,
peers : PropTypes.arrayOf(appPropTypes.Peer).isRequired peers : PropTypes.arrayOf(appPropTypes.Peer).isRequired,
setSelectedPeer : PropTypes.func.isRequired,
selectedPeerName : PropTypes.string
}; };
const mapStateToProps = (state) => const mapStateToProps = (state) =>
@ -50,26 +37,13 @@ const mapStateToProps = (state) =>
const peersArray = Object.values(state.peers); const peersArray = Object.values(state.peers);
return { return {
peers : peersArray peers : peersArray,
selectedPeerName : state.room.selectedPeerName
}; };
}; };
const mapDispatchToProps = (dispatch) => const mapDispatchToProps = {
{ setSelectedPeer : stateActions.setSelectedPeer
return {
handleChangeWebcam : (device) =>
{
dispatch(requestActions.changeWebcam(device.value));
},
handleChangeAudioDevice : (device) =>
{
dispatch(requestActions.changeAudioDevice(device.value));
},
onToggleAdvancedMode : () =>
{
dispatch(stateActions.toggleAdvancedMode());
}
};
}; };
const ParticipantListContainer = connect( const ParticipantListContainer = connect(

View File

@ -72,7 +72,16 @@ const room = (state = initialState, action) =>
return { ...state, mode: action.payload.mode }; return { ...state, mode: action.payload.mode };
case 'SET_SELECTED_PEER': case 'SET_SELECTED_PEER':
return { ...state, selectedPeerName: action.payload.selectedPeerName }; {
const { selectedPeerName } = action.payload;
return {
...state,
selectedPeerName : state.selectedPeerName === selectedPeerName ?
null : selectedPeerName
};
}
default: default:
return state; return state;

View File

@ -7,9 +7,14 @@
> .list-item { > .list-item {
padding: 0.5vmin; padding: 0.5vmin;
border-bottom: 1px solid #ddd; border-bottom: 1px solid #CBCBCB;
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
cursor: pointer;
&.selected {
border-bottom-color: #377EFF;
}
} }
} }
} }