materialuiupgraded
Version:
Material-UI's workspace package
95 lines (87 loc) • 3.15 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Popper from '@material-ui/core/Popper';
import Typography from '@material-ui/core/Typography';
import Grid from '@material-ui/core/Grid';
import Button from '@material-ui/core/Button';
import Fade from '@material-ui/core/Fade';
import Paper from '@material-ui/core/Paper';
const styles = theme => ({
root: {
width: 500,
},
typography: {
padding: theme.spacing.unit * 2,
},
});
class PositionedPopper extends React.Component {
state = {
anchorEl: null,
open: false,
placement: null,
};
handleClick = placement => event => {
const { currentTarget } = event;
this.setState(state => ({
anchorEl: currentTarget,
open: state.placement !== placement || !state.open,
placement,
}));
};
render() {
const { classes } = this.props;
const { anchorEl, open, placement } = this.state;
return (
<div className={classes.root}>
<Popper open={open} anchorEl={anchorEl} placement={placement} transition>
{({ TransitionProps }) => (
<Fade {...TransitionProps} timeout={350}>
<Paper>
<Typography className={classes.typography}>The content of the Popper.</Typography>
</Paper>
</Fade>
)}
</Popper>
<Grid container justify="center">
<Grid item>
<Button onClick={this.handleClick('top-start')}>top-start</Button>
<Button onClick={this.handleClick('top')}>top</Button>
<Button onClick={this.handleClick('top-end')}>top-end</Button>
</Grid>
</Grid>
<Grid container justify="center">
<Grid item xs={6}>
<Button onClick={this.handleClick('left-start')}>left-start</Button>
<br />
<Button onClick={this.handleClick('left')}>left</Button>
<br />
<Button onClick={this.handleClick('left-end')}>left-end</Button>
</Grid>
<Grid item container xs={6} alignItems="flex-end" direction="column" spacing={0}>
<Grid item>
<Button onClick={this.handleClick('right-start')}>right-start</Button>
</Grid>
<Grid item>
<Button onClick={this.handleClick('right')}>right</Button>
</Grid>
<Grid item>
<Button onClick={this.handleClick('right-end')}>right-end</Button>
</Grid>
</Grid>
</Grid>
<Grid container justify="center">
<Grid item>
<Button onClick={this.handleClick('bottom-start')}>bottom-start</Button>
<Button onClick={this.handleClick('bottom')}>bottom</Button>
<Button onClick={this.handleClick('bottom-end')}>bottom-end</Button>
</Grid>
</Grid>
</div>
);
}
}
PositionedPopper.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(PositionedPopper);