@activelylearn/material-ui
Version:
Material-UI's workspace package
114 lines (102 loc) • 2.96 kB
JavaScript
/* eslint-disable jsx-a11y/mouse-events-have-key-events */
import React from 'react';
import PropTypes from 'prop-types';
import Popover from '@material-ui/core/Popover';
import Typography from '@material-ui/core/Typography';
import { withStyles } from '@material-ui/core/styles';
import Grow from '@material-ui/core/Grow';
import Paper from '@material-ui/core/Paper';
import { Manager, Target, Popper } from 'react-popper';
const styles = theme => ({
paper: {
padding: theme.spacing.unit,
},
popover: {
pointerEvents: 'none',
},
popperClose: {
pointerEvents: 'none',
},
});
class MouseOverPopover extends React.Component {
state = {
anchorEl: null,
popperOpen: false,
};
handlePopoverOpen = event => {
this.setState({ anchorEl: event.target });
};
handlePopoverClose = () => {
this.setState({ anchorEl: null });
};
handlePopperOpen = () => {
this.setState({ popperOpen: true });
};
handlePopperClose = () => {
this.setState({ popperOpen: false });
};
render() {
const { classes } = this.props;
const { anchorEl, popperOpen } = this.state;
const open = !!anchorEl;
return (
<div className="wrapper">
<Typography onMouseOver={this.handlePopoverOpen} onMouseOut={this.handlePopoverClose}>
Hover with a Popover.
</Typography>
<Popover
className={classes.popover}
classes={{
paper: classes.paper,
}}
open={open}
anchorEl={anchorEl}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'left',
}}
transformOrigin={{
vertical: 'top',
horizontal: 'left',
}}
onClose={this.handlePopoverClose}
disableRestoreFocus
>
<Typography>I use Popover.</Typography>
</Popover>
<Manager>
<Target>
<Typography
aria-describedby="react-popper-tooltip"
onMouseOver={this.handlePopperOpen}
onMouseOut={this.handlePopperClose}
>
Hover with react-popper.
</Typography>
</Target>
<Popper
placement="bottom-start"
eventsEnabled={popperOpen}
className={!popperOpen ? classes.popperClose : ''}
>
<Grow in={popperOpen} style={{ transformOrigin: '0 0 0' }}>
<Paper
id="react-popper-tooltip"
className={classes.paper}
role="tooltip"
aria-hidden={!popperOpen}
elevation={8}
>
<Typography>I use react-popper.</Typography>
</Paper>
</Grow>
</Popper>
</Manager>
</div>
);
}
}
MouseOverPopover.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(MouseOverPopover);