From f5824ffad775d0c8adb2dfbfa25816be1443bc86 Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Sat, 23 Nov 2019 12:51:21 -0330 Subject: [PATCH] Convert CopyButton component to JSX (#7513) Co-Authored-By: Mark Stacey --- ui/app/components/ui/copyButton.js | 120 ++++++++++++++--------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/ui/app/components/ui/copyButton.js b/ui/app/components/ui/copyButton.js index a60d33523..d235fea04 100644 --- a/ui/app/components/ui/copyButton.js +++ b/ui/app/components/ui/copyButton.js @@ -1,66 +1,66 @@ -const Component = require('react').Component -const PropTypes = require('prop-types') -const h = require('react-hyperscript') -const inherits = require('util').inherits -const copyToClipboard = require('copy-to-clipboard') -const connect = require('react-redux').connect +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { connect } from 'react-redux' +const copyToClipboard = require('copy-to-clipboard') const Tooltip = require('./tooltip') -CopyButton.contextTypes = { - t: PropTypes.func, +class CopyButton extends Component { + static contextTypes = { + t: PropTypes.func, + } + + static defaultProps = { + title: null, + } + + static propTypes = { + value: PropTypes.string.isRequired, + title: PropTypes.string, + } + + state = {} + + debounceRestore = () => { + this.setState({ copied: true }) + clearTimeout(this.timeout) + this.timeout = setTimeout(() => { + this.setState({ copied: false }) + }, 850) + } + + render () { + const state = this.state + const props = this.props + const value = props.value + const copied = state.copied + const message = copied ? this.context.t('copiedButton') : props.title || this.context.t('copyButton') + + return ( +
+ + { + event.preventDefault() + event.stopPropagation() + copyToClipboard(value) + this.debounceRestore() + }} + /> + +
+ ) + } } module.exports = connect()(CopyButton) - - -inherits(CopyButton, Component) -function CopyButton () { - Component.call(this) -} - -// As parameters, accepts: -// "value", which is the value to copy (mandatory) -// "title", which is the text to show on hover (optional, defaults to 'Copy') -CopyButton.prototype.render = function () { - const props = this.props - const state = this.state || {} - - const value = props.value - const copied = state.copied - - const message = copied ? this.context.t('copiedButton') : props.title || this.context.t('copyButton') - - return h('.copy-button', { - style: { - display: 'flex', - alignItems: 'center', - }, - }, [ - - h(Tooltip, { - title: message, - }, [ - h('i.fa.fa-clipboard.cursor-pointer.color-orange', { - style: { - margin: '5px', - }, - onClick: (event) => { - event.preventDefault() - event.stopPropagation() - copyToClipboard(value) - this.debounceRestore() - }, - }), - ]), - - ]) -} - -CopyButton.prototype.debounceRestore = function () { - this.setState({ copied: true }) - clearTimeout(this.timeout) - this.timeout = setTimeout(() => { - this.setState({ copied: false }) - }, 850) -}