import React from 'react'; import PropTypes from 'prop-types'; import copy from 'copy-to-clipboard'; export class CopyToClipboard extends React.PureComponent { static propTypes = { text: PropTypes.string.isRequired, children: PropTypes.element.isRequired, onCopy: PropTypes.func, options: PropTypes.shape({ debug: PropTypes.bool, message: PropTypes.string, format: PropTypes.string }) }; static defaultProps = { onCopy: undefined, options: undefined }; onClick = event => { const { text, onCopy, children, options } = this.props; const elem = React.Children.only(children); const result = copy(text, options); if (onCopy) { onCopy(text, result); } // Bypass onClick if it was present if (elem && elem.props && typeof elem.props.onClick === 'function') { elem.props.onClick(event); } }; render() { const { text: _text, onCopy: _onCopy, options: _options, children, ...props } = this.props; const elem = React.Children.only(children); return React.cloneElement(elem, {...props, onClick: this.onClick}); } }