import React from 'react' import {Motion, spring} from 'react-motion'; class Tooltip extends React.Component { static propTypes = { children: React.PropTypes.node, content: React.PropTypes.node, openOnHover: React.PropTypes.bool, show: React.PropTypes.bool, onToggle: React.PropTypes.func }; state = { show : false }; render() { return (
{(this.getShowValue()) ? this.renderAnimatedMessage() : null}
{this.props.children}
); } renderAnimatedMessage() { return ( {this.renderMessage.bind(this)} ) } renderMessage(animation) { return (
{this.props.content}
) } getProps() { let props = {}; props.className = 'tooltip'; if(this.props.openOnHover) { props.onMouseOver = this.onMouseOver.bind(this); props.onMouseOut = this.onMouseOut.bind(this); } return props; } getChildrenProps() { let props = {}; props.className = 'tooltip__children'; if(!this.props.openOnHover) { props.onClick = this.onClick.bind(this); } return props; } onMouseOver() { this.setState({ show: true }); if(this.props.onToggle) { this.props.onToggle(true); } } onMouseOut() { this.setState({ show: false }); if(this.props.onToggle) { this.props.onToggle(false); } } onClick() { this.setState({ show: !this.getShowValue() }); if(this.props.onToggle) { this.props.onToggle(!this.getShowValue()); } } getShowValue() { return (this.props.show !== undefined) ? this.props.show : this.state.show; } } export default Tooltip;