CopyButton.js 1.5 KB

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