CopyButton.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React from 'react';
  2. import ClipboardButton from 'react-clipboard.js';
  3. export default class CopyButton extends React.Component {
  4. constructor(props) {
  5. super(props);
  6. this.showToolTip = this.showToolTip.bind(this);
  7. }
  8. showToolTip() {
  9. const buttonId = `#${this.props.buttonId}`;
  10. $(buttonId).tooltip('show');
  11. setTimeout(() => {
  12. $(buttonId).tooltip('hide');
  13. }, 1000);
  14. }
  15. render() {
  16. const containerStyle = {
  17. }
  18. const style = Object.assign({
  19. fontSize: "0.8em",
  20. padding: "0 2px",
  21. border: 'none',
  22. verticalAlign: 'text-top',
  23. }, this.props.buttonStyle);
  24. return (
  25. <span className="btn-copy-container" style={containerStyle}>
  26. <ClipboardButton className={this.props.buttonClassName}
  27. button-id={this.props.buttonId} button-data-toggle="tooltip" button-title="copied!" button-data-placement="bottom" button-data-trigger="manual"
  28. button-style={style}
  29. data-clipboard-text={this.props.text} onSuccess={this.showToolTip}>
  30. <i className={this.props.iconClassName}></i>
  31. </ClipboardButton>
  32. </span>
  33. );
  34. }
  35. }
  36. CopyButton.propTypes = {
  37. text: React.PropTypes.string.isRequired,
  38. buttonId: React.PropTypes.string.isRequired,
  39. buttonClassName: React.PropTypes.string.isRequired,
  40. buttonStyle: React.PropTypes.object,
  41. iconClassName: React.PropTypes.string.isRequired,
  42. };
  43. CopyButton.defaultProps = {
  44. buttonId: 'btnCopy',
  45. buttonStyle: {},
  46. };