UNPKG

materialuiupgraded

Version:

Material-UI's workspace package

106 lines (94 loc) 2.78 kB
import React from 'react'; import PropTypes from 'prop-types'; import { withStyles } from '@material-ui/core/styles'; import Button from '@material-ui/core/Button'; import SpeedDial from '@material-ui/lab/SpeedDial'; import SpeedDialIcon from '@material-ui/lab/SpeedDialIcon'; import SpeedDialAction from '@material-ui/lab/SpeedDialAction'; import FileCopyIcon from '@material-ui/icons/FileCopyOutlined'; import SaveIcon from '@material-ui/icons/Save'; import PrintIcon from '@material-ui/icons/Print'; import ShareIcon from '@material-ui/icons/Share'; import DeleteIcon from '@material-ui/icons/Delete'; import EditIcon from '@material-ui/icons/Edit'; const styles = theme => ({ root: { height: 380, }, speedDial: { position: 'absolute', bottom: theme.spacing.unit * 2, right: theme.spacing.unit * 3, }, }); const actions = [ { icon: <FileCopyIcon />, name: 'Copy' }, { icon: <SaveIcon />, name: 'Save' }, { icon: <PrintIcon />, name: 'Print' }, { icon: <ShareIcon />, name: 'Share' }, { icon: <DeleteIcon />, name: 'Delete' }, ]; class OpenIconSpeedDial extends React.Component { state = { open: false, hidden: false, }; handleVisibility = () => { this.setState(state => ({ open: false, hidden: !state.hidden, })); }; handleClick = () => { this.setState(state => ({ open: !state.open, })); }; handleOpen = () => { if (!this.state.hidden) { this.setState({ open: true, }); } }; handleClose = () => { this.setState({ open: false, }); }; render() { const { classes } = this.props; const { hidden, open } = this.state; return ( <div className={classes.root}> <Button onClick={this.handleVisibility}>Toggle Speed Dial</Button> <SpeedDial ariaLabel="SpeedDial openIcon example" className={classes.speedDial} hidden={hidden} icon={<SpeedDialIcon openIcon={<EditIcon />} />} onBlur={this.handleClose} onClick={this.handleClick} onClose={this.handleClose} onFocus={this.handleOpen} onMouseEnter={this.handleOpen} onMouseLeave={this.handleClose} open={open} > {actions.map(action => ( <SpeedDialAction key={action.name} icon={action.icon} tooltipTitle={action.name} onClick={this.handleClick} /> ))} </SpeedDial> </div> ); } } OpenIconSpeedDial.propTypes = { classes: PropTypes.object.isRequired, }; export default withStyles(styles)(OpenIconSpeedDial);