import React from 'react'; import PropTypes from 'prop-types'; import { withStyles } from '@material-ui/core/styles'; import SyntaxHighlighter, { registerLanguage } from 'react-syntax-highlighter/prism-light'; import jsx from 'react-syntax-highlighter/languages/prism/jsx'; import themeSource from 'react-syntax-highlighter/styles/prism/prism'; import { green } from '@material-ui/core/colors'; import { FormControl, FormLabel, FormControlLabel, Radio, RadioGroup, Grid, Typography, Button, Popover, Input, InputLabel, } from '@material-ui/core'; const styles = theme => ({ buttonWrapper: { position: 'relative', marginBottom: theme.spacing(4), }, anchor: { backgroundColor: green[500], width: 10, height: 10, borderRadius: '50%', position: 'absolute', }, radioAnchor: { color: green[600], '&$checked': { color: green[500], }, }, checked: {}, typography: { margin: theme.spacing(2), }, }); const inlineStyles = { anchorVertical: { top: { top: -5, }, center: { top: 'calc(50% - 5px)', }, bottom: { bottom: -5, }, }, anchorHorizontal: { left: { left: -5, }, center: { left: 'calc(50% - 5px)', }, right: { right: -5, }, }, }; class PopoverPlayground extends React.Component { state = { open: false, anchorOriginVertical: 'top', anchorOriginHorizontal: 'left', transformOriginVertical: 'top', transformOriginHorizontal: 'left', positionTop: 200, // Just so the popover can be spotted more easily positionLeft: 400, // Same as above anchorReference: 'anchorEl', }; handleChange = key => (event, value) => { this.setState({ [key]: value, }); }; handleNumberInputChange = key => event => { this.setState({ [key]: parseInt(event.target.value, 10), }); }; handleClickButton = () => { this.setState({ open: true, }); }; handleClose = () => { this.setState({ open: false, }); }; anchorEl = null; render() { const { classes } = this.props; registerLanguage('jsx', jsx); const { open, anchorOriginVertical, anchorOriginHorizontal, transformOriginVertical, transformOriginHorizontal, positionTop, positionLeft, anchorReference, } = this.state; let mode = ''; if (anchorReference === 'anchorPosition') { mode = ` anchorReference="${anchorReference}" anchorPosition={{ top: ${positionTop}, left: ${positionLeft} }}`; } const code = ` `; const radioAnchorClasses = { root: classes.radioAnchor, checked: classes.checked }; return (
{anchorReference === 'anchorEl' && (
)} The content of the Popover. anchorReference } label="anchorEl" /> } label="anchorPosition" /> anchorPosition.top   anchorPosition.left anchorOrigin.vertical } label="Top" /> } label="Center" /> } label="Bottom" /> transformOrigin.vertical } label="Top" /> } label="Center" /> } label="Bottom" /> anchorOrigin.horizontal } label="Left" /> } label="Center" /> } label="Right" /> transformOrigin.horizontal } label="Left" /> } label="Center" /> } label="Right" /> {code}
); } } PopoverPlayground.propTypes = { classes: PropTypes.object.isRequired, }; export default withStyles(styles)(PopoverPlayground);