materialuiupgraded
Version:
Material-UI's workspace package
230 lines (215 loc) • 7.9 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import MarkdownElement from '@material-ui/docs/MarkdownElement';
import Grid from '@material-ui/core/Grid';
import FormControl from '@material-ui/core/FormControl';
import FormLabel from '@material-ui/core/FormLabel';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import RadioGroup from '@material-ui/core/RadioGroup';
import Radio from '@material-ui/core/Radio';
import Paper from '@material-ui/core/Paper';
import Avatar from '@material-ui/core/Avatar';
import Chip from '@material-ui/core/Chip';
import FaceIcon from '@material-ui/icons/Face';
import DoneIcon from '@material-ui/icons/Done';
const styles = theme => ({
root: {
flexGrow: 1,
},
control: {
padding: theme.spacing.unit * 2,
},
chipWrapper: {
marginBottom: theme.spacing.unit * 5,
},
});
class ChipsPlayground extends React.Component {
state = {
color: 'default',
onDelete: 'none',
avatar: 'none',
icon: 'none',
variant: 'default',
};
handleChange = key => (event, value) => {
this.setState({
[key]: value,
});
};
handleDeleteExample = () => {
alert('You clicked the delete icon.'); // eslint-disable-line no-alert
};
render() {
const { classes } = this.props;
const { color, onDelete, avatar, icon, variant } = this.state;
const colorToCode = color !== 'default' ? `color="${color}" ` : '';
const variantToCode = variant !== 'default' ? `variant="${variant}" ` : '';
let onDeleteToCode;
switch (onDelete) {
case 'none':
onDeleteToCode = '';
break;
case 'custom':
onDeleteToCode = 'deleteIcon={<DoneIcon />} onDelete={handleDelete} ';
break;
default:
onDeleteToCode = 'onDelete={handleDelete} ';
break;
}
let iconToCode;
let iconToPlayground;
switch (icon) {
case 'none':
iconToCode = '';
break;
default:
iconToCode = 'icon={<FaceIcon />}';
iconToPlayground = <FaceIcon />;
break;
}
let avatarToCode;
let avatarToPlayground;
switch (avatar) {
case 'none':
avatarToCode = '';
break;
case 'img':
avatarToCode = 'avatar={<Avatar src="/static/images/uxceo-128.jpg" />} ';
avatarToPlayground = <Avatar src="/static/images/uxceo-128.jpg" />;
break;
case 'letter':
avatarToCode = 'avatar={<Avatar>FH</Avatar>} ';
avatarToPlayground = <Avatar>FH</Avatar>;
break;
default:
avatarToCode = 'avatar={<Avatar><FaceIcon /></Avatar>} ';
avatarToPlayground = (
<Avatar>
<FaceIcon />
</Avatar>
);
break;
}
if (avatar !== 'none') {
iconToCode = '';
iconToPlayground = null;
}
const code = `
\`\`\`jsx
<Chip ${colorToCode}${onDeleteToCode}${avatarToCode}${iconToCode}${variantToCode}/>
\`\`\`
`;
return (
<Grid container className={classes.root}>
<Grid item xs={12}>
<Grid container justify="center" alignItems="center" spacing={40}>
<Grid item className={classes.chipWrapper}>
<Chip
label="Awesome Chip Component"
color={color}
deleteIcon={onDelete === 'custom' ? <DoneIcon /> : undefined}
onDelete={onDelete !== 'none' ? this.handleDeleteExample : undefined}
avatar={avatarToPlayground}
icon={iconToPlayground}
variant={variant}
/>
</Grid>
</Grid>
</Grid>
<Grid item xs={12}>
<Paper className={classes.control}>
<Grid container spacing={24}>
<Grid item xs={12}>
<FormControl component="fieldset">
<FormLabel>color</FormLabel>
<RadioGroup
row
name="color"
aria-label="color"
value={color}
onChange={this.handleChange('color')}
>
<FormControlLabel value="default" control={<Radio />} label="default" />
<FormControlLabel value="primary" control={<Radio />} label="primary" />
<FormControlLabel value="secondary" control={<Radio />} label="secondary" />
</RadioGroup>
</FormControl>
</Grid>
<Grid item xs={12}>
<FormControl component="fieldset">
<FormLabel>onDelete</FormLabel>
<RadioGroup
row
name="onDelete"
aria-label="onDelete"
value={onDelete}
onChange={this.handleChange('onDelete')}
>
<FormControlLabel value="none" control={<Radio />} label="none" />
<FormControlLabel value="default" control={<Radio />} label="default" />
<FormControlLabel value="custom" control={<Radio />} label="custom" />
</RadioGroup>
</FormControl>
</Grid>
<Grid item xs={12}>
<FormControl component="fieldset">
<FormLabel>icon</FormLabel>
<RadioGroup
row
name="icon"
aria-label="icon"
value={icon}
onChange={this.handleChange('icon')}
>
<FormControlLabel value="none" control={<Radio />} label="none" />
<FormControlLabel value="icon" control={<Radio />} label="icon" />
</RadioGroup>
</FormControl>
</Grid>
<Grid item xs={12}>
<FormControl component="fieldset">
<FormLabel>avatar</FormLabel>
<RadioGroup
row
name="avatar"
aria-label="avatar"
value={avatar}
onChange={this.handleChange('avatar')}
>
<FormControlLabel value="none" control={<Radio />} label="none" />
<FormControlLabel value="letter" control={<Radio />} label="letter" />
<FormControlLabel value="img" control={<Radio />} label="img" />
<FormControlLabel value="icon" control={<Radio />} label="icon" />
</RadioGroup>
</FormControl>
</Grid>
<Grid item xs={12}>
<FormControl component="fieldset">
<FormLabel>variant</FormLabel>
<RadioGroup
row
name="variant"
aria-label="variant"
value={variant}
onChange={this.handleChange('variant')}
>
<FormControlLabel value="default" control={<Radio />} label="default" />
<FormControlLabel value="outlined" control={<Radio />} label="outlined" />
</RadioGroup>
</FormControl>
</Grid>
</Grid>
</Paper>
</Grid>
<Grid item xs={12}>
<MarkdownElement text={code} />
</Grid>
</Grid>
);
}
}
ChipsPlayground.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(ChipsPlayground);