soiz1's picture
Upload 1525 files
f2bee8a verified
import bindAll from 'lodash.bindall';
import classNames from 'classnames';
import {defineMessages, injectIntl, intlShape, FormattedMessage} from 'react-intl';
import PropTypes from 'prop-types';
import React from 'react';
import ReactTooltip from 'react-tooltip';
import styles from './coming-soon.css';
import awwCatIcon from './aww-cat.png';
import coolCatIcon from './cool-cat.png';
const messages = defineMessages({
message1: {
defaultMessage: 'Don\'t worry, we\'re on it {emoji}',
description: 'One of the "coming soon" random messages for yet-to-be-done features',
id: 'gui.comingSoon.message1'
},
message2: {
defaultMessage: 'Coming Soon...',
description: 'One of the "coming soon" random messages for yet-to-be-done features',
id: 'gui.comingSoon.message2'
},
message3: {
defaultMessage: 'We\'re working on it {emoji}',
description: 'One of the "coming soon" random messages for yet-to-be-done features',
id: 'gui.comingSoon.message3'
}
});
class ComingSoonContent extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'setHide',
'setShow',
'getRandomMessage'
]);
this.state = {
isShowing: false
};
}
setShow () {
// needed to set the opacity to 1, since the default is .9 on show
this.setState({isShowing: true});
}
setHide () {
this.setState({isShowing: false});
}
getRandomMessage () {
// randomly chooses a messages from `messages` to display in the tooltip.
const images = [awwCatIcon, coolCatIcon];
const messageNumber = Math.floor(Math.random() * Object.keys(messages).length) + 1;
const imageNumber = Math.floor(Math.random() * Object.keys(images).length);
return (
<FormattedMessage
{...messages[`message${messageNumber}`]}
values={{
emoji: (
<img
className={styles.comingSoonImage}
src={images[imageNumber]}
/>
)
}}
/>
);
}
render () {
return (
<ReactTooltip
afterHide={this.setHide}
afterShow={this.setShow}
className={classNames(
styles.comingSoon,
this.props.className,
{
[styles.show]: (this.state.isShowing),
[styles.left]: (this.props.place === 'left'),
[styles.right]: (this.props.place === 'right'),
[styles.top]: (this.props.place === 'top'),
[styles.bottom]: (this.props.place === 'bottom')
}
)}
getContent={this.getRandomMessage}
id={this.props.tooltipId}
/>
);
}
}
ComingSoonContent.propTypes = {
className: PropTypes.string,
intl: intlShape,
place: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
tooltipId: PropTypes.string.isRequired
};
ComingSoonContent.defaultProps = {
place: 'bottom'
};
const ComingSoon = injectIntl(ComingSoonContent);
const ComingSoonTooltip = props => (
<div className={props.className}>
<div
data-delay-hide={props.delayHide}
data-delay-show={props.delayShow}
data-effect="solid"
data-for={props.tooltipId}
data-place={props.place}
data-tip="tooltip"
>
{props.children}
</div>
<ComingSoon
className={props.tooltipClassName}
place={props.place}
tooltipId={props.tooltipId}
/>
</div>
);
ComingSoonTooltip.propTypes = {
children: PropTypes.node.isRequired,
className: PropTypes.string,
delayHide: PropTypes.number,
delayShow: PropTypes.number,
place: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
tooltipClassName: PropTypes.string,
tooltipId: PropTypes.string.isRequired
};
ComingSoonTooltip.defaultProps = {
delayHide: 0,
delayShow: 0
};
export {
ComingSoon as ComingSoonComponent,
ComingSoonTooltip
};