@activelylearn/material-ui
Version:
Material-UI's workspace package
131 lines (121 loc) • 2.73 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
import Tooltip from '@material-ui/core/Tooltip';
const styles = theme => ({
root: {
position: 'relative',
},
button: {
margin: theme.spacing.unit,
color: theme.palette.text.secondary,
transition: `${theme.transitions.create('transform', {
duration: theme.transitions.duration.shorter,
})}, opacity 0.8s`,
opacity: 1,
},
buttonClosed: {
opacity: 0,
transform: 'scale(0)',
},
});
class SpeedDialAction extends React.Component {
state = {
tooltipOpen: false,
};
handleTooltipClose = () => {
this.setState({ tooltipOpen: false });
};
handleTooltipOpen = () => {
this.setState({ tooltipOpen: true });
};
render() {
const {
ButtonProps,
classes,
className: classNameProp,
delay,
icon,
id,
onClick,
open,
tooltipTitle,
...other
} = this.props;
return (
<Tooltip
id={id}
className={classNames(classes.root, classNameProp)}
title={tooltipTitle}
placement="left"
onClose={this.handleTooltipClose}
onOpen={this.handleTooltipOpen}
open={open && this.state.tooltipOpen}
{...other}
>
<Button
variant="fab"
mini
className={classNames(classes.button, !open && classes.buttonClosed)}
style={{ transitionDelay: `${delay}ms` }}
onClick={onClick}
tabIndex={-1}
role="menuitem"
aria-labelledby={id}
{...ButtonProps}
>
{icon}
</Button>
</Tooltip>
);
}
}
SpeedDialAction.propTypes = {
/**
* Properties applied to the `Button` component.
*/
ButtonProps: PropTypes.object,
/**
* Useful to extend the style applied to components.
*/
classes: PropTypes.object.isRequired,
/**
* @ignore
*/
className: PropTypes.string,
/**
* Adds a transition delay, to allow a series of SpeedDialActions to be animated.
*/
delay: PropTypes.number,
/**
* The Icon to display in the SpeedDial Floating Action Button.
*/
icon: PropTypes.node.isRequired,
/**
* @ignore
*/
id: PropTypes.string,
/**
* @ignore
*/
onClick: PropTypes.func,
/**
* @ignore
*/
onKeyDown: PropTypes.func,
/**
* @ignore
*/
open: PropTypes.bool,
/**
* Label to display in the tooltip.
*/
tooltipTitle: PropTypes.node,
};
SpeedDialAction.defaultProps = {
delay: 0,
open: false,
};
export default withStyles(styles)(SpeedDialAction);