import React from 'react'; import { connect } from 'react-redux'; import * as appPropTypes from '../appPropTypes'; import { withStyles } from '@material-ui/core/styles'; import { withRoomContext } from '../../RoomContext'; import * as roomActions from '../../actions/roomActions'; import * as settingsActions from '../../actions/settingsActions'; import PropTypes from 'prop-types'; import { useIntl, FormattedMessage } from 'react-intl'; import Dialog from '@material-ui/core/Dialog'; import DialogTitle from '@material-ui/core/DialogTitle'; import DialogActions from '@material-ui/core/DialogActions'; import Button from '@material-ui/core/Button'; import MenuItem from '@material-ui/core/MenuItem'; import FormHelperText from '@material-ui/core/FormHelperText'; import FormControl from '@material-ui/core/FormControl'; import FormControlLabel from '@material-ui/core/FormControlLabel'; import Select from '@material-ui/core/Select'; import Checkbox from '@material-ui/core/Checkbox'; const styles = (theme) => ({ root : { }, dialogPaper : { width : '30vw', [theme.breakpoints.down('lg')] : { width : '40vw' }, [theme.breakpoints.down('md')] : { width : '50vw' }, [theme.breakpoints.down('sm')] : { width : '70vw' }, [theme.breakpoints.down('xs')] : { width : '90vw' } }, setting : { padding : theme.spacing(2) }, formControl : { display : 'flex' } }); const Settings = ({ roomClient, room, me, settings, onToggleAdvancedMode, onTogglePermanentTopBar, handleCloseSettings, handleChangeMode, classes }) => { const intl = useIntl(); const modes = [ { value : 'democratic', label : intl.formatMessage({ id : 'label.democratic', defaultMessage : 'Democratic view' }) }, { value : 'filmstrip', label : intl.formatMessage({ id : 'label.filmstrip', defaultMessage : 'Filmstrip view' }) } ]; const resolutions = [ { value : 'low', label : intl.formatMessage({ id : 'label.low', defaultMessage : 'Low' }) }, { value : 'medium', label : intl.formatMessage({ id : 'label.medium', defaultMessage : 'Medium' }) }, { value : 'high', label : intl.formatMessage({ id : 'label.high', defaultMessage : 'High (HD)' }) }, { value : 'veryhigh', label : intl.formatMessage({ id : 'label.veryHigh', defaultMessage : 'Very high (FHD)' }) }, { value : 'ultra', label : intl.formatMessage({ id : 'label.ultra', defaultMessage : 'Ultra (UHD)' }) } ]; let webcams; if (me.webcamDevices) webcams = Object.values(me.webcamDevices); else webcams = []; let audioDevices; if (me.audioDevices) audioDevices = Object.values(me.audioDevices); else audioDevices = []; return ( handleCloseSettings({ settingsOpen: false })} classes={{ paper : classes.dialogPaper }} >
{ webcams.length > 0 ? intl.formatMessage({ id : 'settings.selectCamera', defaultMessage : 'Select video device' }) : intl.formatMessage({ id : 'settings.cantSelectCamera', defaultMessage : 'Unable to select video device' }) }
{ audioDevices.length > 0 ? intl.formatMessage({ id : 'settings.selectAudio', defaultMessage : 'Select audio device' }) : intl.formatMessage({ id : 'settings.cantSelectAudio', defaultMessage : 'Unable to select audio device' }) }
} label={intl.formatMessage({ id : 'settings.advancedMode', defaultMessage : 'Advanced mode' })} /> { settings.advancedMode &&
} label={intl.formatMessage({ id : 'settings.permanentTopBar', defaultMessage : 'Permanent top bar' })} />
}
); }; Settings.propTypes = { roomClient : PropTypes.any.isRequired, me : appPropTypes.Me.isRequired, room : appPropTypes.Room.isRequired, settings : PropTypes.object.isRequired, onToggleAdvancedMode : PropTypes.func.isRequired, onTogglePermanentTopBar : PropTypes.func.isRequired, handleChangeMode : PropTypes.func.isRequired, handleCloseSettings : PropTypes.func.isRequired, classes : PropTypes.object.isRequired }; const mapStateToProps = (state) => { return { me : state.me, room : state.room, settings : state.settings }; }; const mapDispatchToProps = { onToggleAdvancedMode : settingsActions.toggleAdvancedMode, onTogglePermanentTopBar : settingsActions.togglePermanentTopBar, handleChangeMode : roomActions.setDisplayMode, handleCloseSettings : roomActions.setSettingsOpen }; export default withRoomContext(connect( mapStateToProps, mapDispatchToProps, null, { areStatesEqual : (next, prev) => { return ( prev.me === next.me && prev.room === next.room && prev.settings === next.settings ); } } )(withStyles(styles)(Settings)));