UNPKG

materialuiupgraded

Version:

Material-UI's workspace package

178 lines (159 loc) 4.51 kB
/* eslint-disable react/no-multi-comp */ import React from 'react'; import PropTypes from 'prop-types'; import { withStyles } from '@material-ui/core/styles'; import Button from '@material-ui/core/Button'; import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; import ListItemText from '@material-ui/core/ListItemText'; import DialogTitle from '@material-ui/core/DialogTitle'; import DialogContent from '@material-ui/core/DialogContent'; import DialogActions from '@material-ui/core/DialogActions'; import Dialog from '@material-ui/core/Dialog'; import RadioGroup from '@material-ui/core/RadioGroup'; import Radio from '@material-ui/core/Radio'; import FormControlLabel from '@material-ui/core/FormControlLabel'; const options = [ 'None', 'Atria', 'Callisto', 'Dione', 'Ganymede', 'Hangouts Call', 'Luna', 'Oberon', 'Phobos', 'Pyxis', 'Sedna', 'Titania', 'Triton', 'Umbriel', ]; class ConfirmationDialogRaw extends React.Component { constructor(props) { super(); this.state = { value: props.value, }; } // TODO componentWillReceiveProps(nextProps) { if (nextProps.value !== this.props.value) { this.setState({ value: nextProps.value }); } } handleEntering = () => { this.radioGroupRef.focus(); }; handleCancel = () => { this.props.onClose(this.props.value); }; handleOk = () => { this.props.onClose(this.state.value); }; handleChange = (event, value) => { this.setState({ value }); }; render() { const { value, ...other } = this.props; return ( <Dialog disableBackdropClick disableEscapeKeyDown maxWidth="xs" onEntering={this.handleEntering} aria-labelledby="confirmation-dialog-title" {...other} > <DialogTitle id="confirmation-dialog-title">Phone Ringtone</DialogTitle> <DialogContent> <RadioGroup ref={ref => { this.radioGroupRef = ref; }} aria-label="Ringtone" name="ringtone" value={this.state.value} onChange={this.handleChange} > {options.map(option => ( <FormControlLabel value={option} key={option} control={<Radio />} label={option} /> ))} </RadioGroup> </DialogContent> <DialogActions> <Button onClick={this.handleCancel} color="primary"> Cancel </Button> <Button onClick={this.handleOk} color="primary"> Ok </Button> </DialogActions> </Dialog> ); } } ConfirmationDialogRaw.propTypes = { onClose: PropTypes.func, value: PropTypes.string, }; const styles = theme => ({ root: { width: '100%', maxWidth: 360, backgroundColor: theme.palette.background.paper, }, paper: { width: '80%', maxHeight: 435, }, }); class ConfirmationDialog extends React.Component { state = { open: false, value: 'Dione', }; handleClickListItem = () => { this.setState({ open: true }); }; handleClose = value => { this.setState({ value, open: false }); }; render() { const { classes } = this.props; return ( <div className={classes.root}> <List> <ListItem button divider disabled> <ListItemText primary="Interruptions" /> </ListItem> <ListItem button divider aria-haspopup="true" aria-controls="ringtone-menu" aria-label="Phone ringtone" onClick={this.handleClickListItem} > <ListItemText primary="Phone ringtone" secondary={this.state.value} /> </ListItem> <ListItem button divider disabled> <ListItemText primary="Default notification ringtone" secondary="Tethys" /> </ListItem> <ConfirmationDialogRaw classes={{ paper: classes.paper, }} open={this.state.open} onClose={this.handleClose} value={this.state.value} /> </List> </div> ); } } ConfirmationDialog.propTypes = { classes: PropTypes.object.isRequired, }; export default withStyles(styles)(ConfirmationDialog);