Add basic skeleton for a Filmstrip view

master
Torjus 2018-07-19 13:47:14 +02:00
parent b25f2eb012
commit ef2d8a4105
3 changed files with 85 additions and 10 deletions

View File

@ -0,0 +1,75 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import * as appPropTypes from '../appPropTypes';
import Peer from '../Peer';
class Filmstrip extends Component
{
state = {
selectedPeerName : null
};
handleSelectPeer = (selectedPeerName) =>
{
this.setState({
selectedPeerName
});
};
render()
{
const { activeSpeakerName, peers, advancedMode } = this.props;
// Find the name of the peer which is currently speaking. This is either
// the latest active speaker, or the manually selected peer.
const activePeerName = this.state.selectedPeerName || activeSpeakerName;
// Find the remainding peer names, which will be shown in the filmstrip.
const remaindingPeerNames = Object.keys(peers).filter((peerName) =>
peerName !== activePeerName);
return (
<div>
{peers[activePeerName] && (
<div>
<Peer
advancedMode={advancedMode}
name={activePeerName}
/>
</div>
)}
<div>
{remaindingPeerNames.map((peerName) => (
<div
key={peerName}
onClick={() => this.handleSelectPeer(peerName)}
>
<Peer
advancedMode={advancedMode}
name={peerName}
/>
</div>
))}
</div>
</div>
);
}
}
Filmstrip.propTypes = {
activeSpeakerName : PropTypes.string,
advancedMode : PropTypes.bool,
peers : appPropTypes.peers
};
const mapStateToProps = (state) =>
({
activeSpeakerName : state.room.activeSpeakerName,
peers : state.peers
});
export default connect(
mapStateToProps
)(Filmstrip);

View File

@ -82,8 +82,7 @@ class Peers extends React.Component
const { const {
advancedMode, advancedMode,
activeSpeakerName, activeSpeakerName,
peers, peers
toolAreaOpen
} = this.props; } = this.props;
const style = const style =
@ -108,7 +107,6 @@ class Peers extends React.Component
advancedMode={advancedMode} advancedMode={advancedMode}
name={peer.name} name={peer.name}
style={style} style={style}
toolAreaOpen={toolAreaOpen}
/> />
</div> </div>
</Appear> </Appear>
@ -125,8 +123,7 @@ Peers.propTypes =
advancedMode : PropTypes.bool, advancedMode : PropTypes.bool,
peers : PropTypes.arrayOf(appPropTypes.Peer).isRequired, peers : PropTypes.arrayOf(appPropTypes.Peer).isRequired,
boxes : PropTypes.number, boxes : PropTypes.number,
activeSpeakerName : PropTypes.string, activeSpeakerName : PropTypes.string
toolAreaOpen : PropTypes.bool
}; };
const mapStateToProps = (state) => const mapStateToProps = (state) =>
@ -139,8 +136,7 @@ const mapStateToProps = (state) =>
return { return {
peers, peers,
boxes, boxes,
activeSpeakerName : state.room.activeSpeakerName, activeSpeakerName : state.room.activeSpeakerName
toolAreaOpen : state.toolarea.toolAreaOpen
}; };
}; };

View File

@ -17,6 +17,7 @@ import FullScreenView from './FullScreenView';
import Draggable from 'react-draggable'; import Draggable from 'react-draggable';
import { idle } from '../utils'; import { idle } from '../utils';
import Sidebar from './Sidebar'; import Sidebar from './Sidebar';
import Filmstrip from './Filmstrip';
// Hide toolbars after 10 seconds of inactivity. // Hide toolbars after 10 seconds of inactivity.
const TIMEOUT = 10 * 1000; const TIMEOUT = 10 * 1000;
@ -121,9 +122,12 @@ class Room extends React.Component
</div> </div>
</div> </div>
<Peers <Filmstrip advancedMode={room.advancedMode} />
advancedMode={room.advancedMode} {false && (
/> <Peers
advancedMode={room.advancedMode}
/>
)}
<Draggable handle='.me-container' bounds='body' cancel='.display-name'> <Draggable handle='.me-container' bounds='body' cancel='.display-name'>
<div <div