Ensure sidebar settings state is not reset on sidebar toggle
parent
4431a40297
commit
0260186c65
|
|
@ -14,112 +14,75 @@ const modes = [ {
|
||||||
label : 'Filmstrip view'
|
label : 'Filmstrip view'
|
||||||
} ];
|
} ];
|
||||||
|
|
||||||
class Settings extends React.Component
|
const findOption = (options, value) => options.find((option) => option.value === value);
|
||||||
|
|
||||||
|
const Settings = ({
|
||||||
|
room, me, onToggleAdvancedMode, handleChangeWebcam,
|
||||||
|
handleChangeAudioDevice, handleChangeMode
|
||||||
|
}) =>
|
||||||
{
|
{
|
||||||
state = {
|
let webcams;
|
||||||
selectedCamera : null,
|
let webcamText;
|
||||||
selectedAudioDevice : null,
|
|
||||||
selectedMode : modes[0]
|
|
||||||
};
|
|
||||||
|
|
||||||
handleChangeWebcam = (webcam) =>
|
if (me.canChangeWebcam)
|
||||||
{
|
webcamText = 'Select camera';
|
||||||
this.props.handleChangeWebcam(webcam.value);
|
else
|
||||||
|
webcamText = 'Unable to select camera';
|
||||||
|
|
||||||
this.setState({
|
if (me.webcamDevices)
|
||||||
selectedCamera : webcam
|
webcams = Array.from(me.webcamDevices.values());
|
||||||
});
|
else
|
||||||
}
|
webcams = [];
|
||||||
|
|
||||||
handleChangeAudioDevice = (device) =>
|
let audioDevices;
|
||||||
{
|
let audioDevicesText;
|
||||||
this.props.handleChangeAudioDevice(device.value);
|
|
||||||
|
|
||||||
this.setState({
|
if (me.canChangeAudioDevice)
|
||||||
selectedAudioDevice : device
|
audioDevicesText = 'Select audio input device';
|
||||||
});
|
else
|
||||||
}
|
audioDevicesText = 'Unable to select audio input device';
|
||||||
|
|
||||||
handleChangeMode = (mode) =>
|
|
||||||
{
|
|
||||||
this.setState({
|
|
||||||
selectedMode : mode
|
|
||||||
});
|
|
||||||
|
|
||||||
this.props.handleChangeMode(mode.value);
|
if (me.audioDevices)
|
||||||
};
|
audioDevices = Array.from(me.audioDevices.values());
|
||||||
|
else
|
||||||
|
audioDevices = [];
|
||||||
|
|
||||||
render()
|
return (
|
||||||
{
|
<div data-component='Settings'>
|
||||||
const {
|
<div className='settings'>
|
||||||
room,
|
<Dropdown
|
||||||
me,
|
disabled={!me.canChangeWebcam}
|
||||||
onToggleAdvancedMode
|
options={webcams}
|
||||||
} = this.props;
|
value={findOption(webcams, me.selectedWebcam)}
|
||||||
|
onChange={(webcam) => handleChangeWebcam(webcam.value)}
|
||||||
|
placeholder={webcamText}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Dropdown
|
||||||
|
disabled={!me.canChangeAudioDevice}
|
||||||
|
options={audioDevices}
|
||||||
|
value={findOption(audioDevices, me.selectedAudioDevice)}
|
||||||
|
onChange={(device) => handleChangeAudioDevice(device.value)}
|
||||||
|
placeholder={audioDevicesText}
|
||||||
|
/>
|
||||||
|
|
||||||
let webcams;
|
<input
|
||||||
let webcamText;
|
id='room-mode'
|
||||||
|
type='checkbox'
|
||||||
|
checked={room.advancedMode}
|
||||||
|
onChange={onToggleAdvancedMode}
|
||||||
|
/>
|
||||||
|
<label htmlFor='room-mode'>Advanced mode</label>
|
||||||
|
|
||||||
if (me.canChangeWebcam)
|
<Dropdown
|
||||||
webcamText = 'Select camera';
|
options={modes}
|
||||||
else
|
value={findOption(modes, room.mode)}
|
||||||
webcamText = 'Unable to select camera';
|
onChange={(mode) => handleChangeMode(mode.value)}
|
||||||
|
/>
|
||||||
if (me.webcamDevices)
|
|
||||||
webcams = Array.from(me.webcamDevices.values());
|
|
||||||
else
|
|
||||||
webcams = [];
|
|
||||||
|
|
||||||
let audioDevices;
|
|
||||||
let audioDevicesText;
|
|
||||||
|
|
||||||
if (me.canChangeAudioDevice)
|
|
||||||
audioDevicesText = 'Select audio input device';
|
|
||||||
else
|
|
||||||
audioDevicesText = 'Unable to select audio input device';
|
|
||||||
|
|
||||||
if (me.audioDevices)
|
|
||||||
audioDevices = Array.from(me.audioDevices.values());
|
|
||||||
else
|
|
||||||
audioDevices = [];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div data-component='Settings'>
|
|
||||||
<div className='settings'>
|
|
||||||
<Dropdown
|
|
||||||
disabled={!me.canChangeWebcam}
|
|
||||||
options={webcams}
|
|
||||||
value={this.state.selectedCamera}
|
|
||||||
onChange={this.handleChangeWebcam}
|
|
||||||
placeholder={webcamText}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<Dropdown
|
|
||||||
disabled={!me.canChangeAudioDevice}
|
|
||||||
options={audioDevices}
|
|
||||||
value={this.state.selectedAudioDevice}
|
|
||||||
onChange={this.handleChangeAudioDevice}
|
|
||||||
placeholder={audioDevicesText}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<input
|
|
||||||
id='room-mode'
|
|
||||||
type='checkbox'
|
|
||||||
checked={room.advancedMode}
|
|
||||||
onChange={onToggleAdvancedMode}
|
|
||||||
/>
|
|
||||||
<label htmlFor='room-mode'>Advanced mode</label>
|
|
||||||
|
|
||||||
<Dropdown
|
|
||||||
options={modes}
|
|
||||||
value={this.state.selectedMode}
|
|
||||||
onChange={this.handleChangeMode}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
</div>
|
||||||
}
|
);
|
||||||
}
|
};
|
||||||
|
|
||||||
Settings.propTypes =
|
Settings.propTypes =
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,9 @@ const initialState =
|
||||||
raiseHand : false,
|
raiseHand : false,
|
||||||
raiseHandInProgress : false,
|
raiseHandInProgress : false,
|
||||||
restartIceInProgress : false,
|
restartIceInProgress : false,
|
||||||
picture : null
|
picture : null,
|
||||||
|
selectedWebcam : null,
|
||||||
|
selectedAudioDevice : null
|
||||||
};
|
};
|
||||||
|
|
||||||
const me = (state = initialState, action) =>
|
const me = (state = initialState, action) =>
|
||||||
|
|
@ -49,6 +51,16 @@ const me = (state = initialState, action) =>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'CHANGE_WEBCAM':
|
||||||
|
{
|
||||||
|
return { ...state, selectedWebcam: action.payload.deviceId };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'CHANGE_AUDIO_DEVICE':
|
||||||
|
{
|
||||||
|
return { ...state, selectedAudioDevice: action.payload.deviceId };
|
||||||
|
}
|
||||||
|
|
||||||
case 'SET_MEDIA_CAPABILITIES':
|
case 'SET_MEDIA_CAPABILITIES':
|
||||||
{
|
{
|
||||||
const { canSendMic, canSendWebcam } = action.payload;
|
const { canSendMic, canSendWebcam } = action.payload;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue