Merge branch 'feature-settings' into develop

master
Håvar Aambø Fosstveit 2018-06-18 14:29:32 +02:00
commit 071d50e66c
9 changed files with 111 additions and 73 deletions

View File

@ -29,6 +29,7 @@ class Me extends React.Component
const {
connected,
me,
advancedMode,
micProducer,
webcamProducer,
onChangeDisplayName,
@ -104,6 +105,7 @@ class Me extends React.Component
<PeerView
isMe
advancedMode={advancedMode}
peer={me}
audioTrack={micProducer ? micProducer.track : null}
videoTrack={webcamProducer ? webcamProducer.track : null}
@ -159,6 +161,7 @@ class Me extends React.Component
Me.propTypes =
{
connected : PropTypes.bool.isRequired,
advancedMode : PropTypes.bool,
me : appPropTypes.Me.isRequired,
micProducer : appPropTypes.Producer,
webcamProducer : appPropTypes.Producer,

View File

@ -9,6 +9,7 @@ import PeerView from './PeerView';
const Peer = (props) =>
{
const {
advancedMode,
peer,
micConsumer,
webcamConsumer,
@ -86,6 +87,7 @@ const Peer = (props) =>
}
<PeerView
advancedMode={advancedMode}
peer={peer}
audioTrack={micConsumer ? micConsumer.track : null}
videoTrack={webcamConsumer ? webcamConsumer.track : null}
@ -104,6 +106,7 @@ const Peer = (props) =>
Peer.propTypes =
{
advancedMode : PropTypes.bool,
peer : appPropTypes.Peer.isRequired,
micConsumer : appPropTypes.Consumer,
webcamConsumer : appPropTypes.Consumer,

View File

@ -45,6 +45,7 @@ export default class PeerView extends React.Component
{
const {
isMe,
advancedMode,
peer,
videoVisible,
videoProfile,
@ -67,6 +68,7 @@ export default class PeerView extends React.Component
return (
<div data-component='PeerView'>
<div className='info'>
{advancedMode ?
<div className={classnames('media', { 'is-me': isMe })}>
{screenVisible ?
<div className='box'>
@ -103,6 +105,8 @@ export default class PeerView extends React.Component
</div>
}
</div>
:null
}
<div className={classnames('peer', { 'is-me': isMe })}>
{isMe ?
@ -126,6 +130,7 @@ export default class PeerView extends React.Component
</span>
}
{advancedMode ?
<div className='row'>
<span
className={classnames('device-icon', peer.device.flag)}
@ -134,6 +139,8 @@ export default class PeerView extends React.Component
{peer.device.name} {Math.floor(peer.device.version) || null}
</span>
</div>
:null
}
</div>
</div>
@ -308,6 +315,7 @@ export default class PeerView extends React.Component
PeerView.propTypes =
{
isMe : PropTypes.bool,
advancedMode : PropTypes.bool,
peer : PropTypes.oneOfType(
[ appPropTypes.Me, appPropTypes.Peer ]).isRequired,
audioTrack : PropTypes.any,

View File

@ -8,9 +8,9 @@ import Peer from './Peer';
class Peers extends React.Component
{
constructor()
constructor(props)
{
super();
super(props);
this.state = {
peerWidth : 400,
peerHeight : 300,
@ -81,6 +81,7 @@ class Peers extends React.Component
render()
{
const {
advancedMode,
activeSpeakerName,
peers
} = this.props;
@ -103,7 +104,10 @@ class Peers extends React.Component
'active-speaker' : peer.name === activeSpeakerName
})} style={style}
>
<Peer name={peer.name} />
<Peer
advancedMode={advancedMode}
name={peer.name}
/>
</div>
</Appear>
);
@ -116,6 +120,7 @@ class Peers extends React.Component
Peers.propTypes =
{
advancedMode : PropTypes.bool,
peers : PropTypes.arrayOf(appPropTypes.Peer).isRequired,
activeSpeakerName : PropTypes.string
};

View File

@ -99,14 +99,18 @@ class Room extends React.Component
</div>
</div>
<Peers />
<Peers
advancedMode={room.advancedMode}
/>
<div
className={classnames('me-container', {
'active-speaker' : amActiveSpeaker
})}
>
<Me />
<Me
advancedMode={room.advancedMode}
/>
</div>
<div className='sidebar'>

View File

@ -2,6 +2,7 @@ import React from 'react';
import { connect } from 'react-redux';
import * as appPropTypes from './appPropTypes';
import * as requestActions from '../redux/requestActions';
import * as stateActions from '../redux/stateActions';
import PropTypes from 'prop-types';
import { Appear } from './transitions';
import Dropdown from 'react-dropdown';
@ -20,7 +21,8 @@ class Settings extends React.Component
me,
handleChangeWebcam,
handleChangeAudioDevice,
onToggleSettings
onToggleSettings,
onToggleAdvancedMode
} = this.props;
if (!room.showSettings)
@ -72,6 +74,12 @@ class Settings extends React.Component
onChange={handleChangeAudioDevice}
placeholder={audioDevicesText}
/>
<input
type='checkbox'
defaultChecked={room.advancedMode}
onChange={onToggleAdvancedMode}
/>
<span>Advanced mode</span>
</div>
<div className='footer'>
<span
@ -94,7 +102,8 @@ Settings.propTypes =
room : appPropTypes.Room.isRequired,
onToggleSettings : PropTypes.func.isRequired,
handleChangeWebcam : PropTypes.func.isRequired,
handleChangeAudioDevice : PropTypes.func.isRequired
handleChangeAudioDevice : PropTypes.func.isRequired,
onToggleAdvancedMode : PropTypes.func.isRequired
};
const mapStateToProps = (state) =>
@ -115,6 +124,10 @@ const mapDispatchToProps = (dispatch) =>
handleChangeAudioDevice : (device) =>
{
dispatch(requestActions.changeAudioDevice(device.value));
},
onToggleAdvancedMode : () =>
{
dispatch(stateActions.toggleAdvancedMode());
}
};
};

View File

@ -3,9 +3,8 @@ const initialState =
url : null,
state : 'new', // new/connecting/connected/disconnected/closed,
activeSpeakerName : null,
peerHeight : 300,
peerWidth : 400,
showSettings : false
showSettings : false,
advancedMode : false
};
const room = (state = initialState, action) =>
@ -36,13 +35,6 @@ const room = (state = initialState, action) =>
return { ...state, activeSpeakerName: peerName };
}
case 'SET_COMPONENT_SIZE':
{
const { peerWidth, peerHeight } = action.payload;
return { ...state, peerWidth: peerWidth, peerHeight: peerHeight };
}
case 'TOGGLE_SETTINGS':
{
const showSettings = !state.showSettings;
@ -50,6 +42,13 @@ const room = (state = initialState, action) =>
return { ...state, showSettings };
}
case 'TOGGLE_ADVANCED_MODE':
{
const advancedMode = !state.advancedMode;
return { ...state, advancedMode };
}
default:
return state;
}

View File

@ -22,14 +22,6 @@ export const setRoomActiveSpeaker = (peerName) =>
};
};
export const onComponentResize = (peerWidth, peerHeight) =>
{
return {
type : 'SET_COMPONENT_SIZE',
payload : { peerWidth, peerHeight }
};
};
export const setMe = ({ peerName, displayName, displayNameSet, device }) =>
{
return {
@ -94,6 +86,13 @@ export const setDisplayName = (displayName) =>
};
};
export const toggleAdvancedMode = () =>
{
return {
type : 'TOGGLE_ADVANCED_MODE'
};
};
export const setAudioOnlyState = (enabled) =>
{
return {

View File

@ -17,9 +17,9 @@
position: absolute;
z-index: 5
top: 0;
top: 0.6vmin;
left: 0.6vmin;
bottom: 0;
left: 0;
right: 0;
display: flex;
flex-direction: column;
@ -31,8 +31,7 @@
flex-direction: row;
> .box {
margin: 4px;
padding: 2px 4px;
padding: 0.4vmin;
border-radius: 2px;
background-color: rgba(#000, 0.25);
@ -55,15 +54,20 @@
display: flex;
flex-direction: column;
justify-content: flex-end;
position: absolute;
bottom: 0.6vmin;
left: 0;
border-radius: 2px;
background-color: rgba(#000, 0.25);
+desktop() {
&.is-me {
padding: 10px;
padding: 1vmin;
align-items: flex-start;
}
&:not(.is-me) {
padding: 20px;
padding: 1vmin;
align-items: flex-start;
}
}