mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Convert CopyButton component to JSX (#7513)
Co-Authored-By: Mark Stacey <markjstacey@gmail.com>
This commit is contained in:
parent
c555ea659c
commit
f5824ffad7
@ -1,66 +1,66 @@
|
|||||||
const Component = require('react').Component
|
import React, { Component } from 'react'
|
||||||
const PropTypes = require('prop-types')
|
import PropTypes from 'prop-types'
|
||||||
const h = require('react-hyperscript')
|
import { connect } from 'react-redux'
|
||||||
const inherits = require('util').inherits
|
|
||||||
const copyToClipboard = require('copy-to-clipboard')
|
|
||||||
const connect = require('react-redux').connect
|
|
||||||
|
|
||||||
|
const copyToClipboard = require('copy-to-clipboard')
|
||||||
const Tooltip = require('./tooltip')
|
const Tooltip = require('./tooltip')
|
||||||
|
|
||||||
CopyButton.contextTypes = {
|
class CopyButton extends Component {
|
||||||
t: PropTypes.func,
|
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 (
|
||||||
|
<div
|
||||||
|
className="copy-button"
|
||||||
|
style={{
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Tooltip title={message}>
|
||||||
|
<i
|
||||||
|
className="fa fa-clipboard cursor-pointer color-orange"
|
||||||
|
style={{
|
||||||
|
margin: '5px',
|
||||||
|
}}
|
||||||
|
onClick={(event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
event.stopPropagation()
|
||||||
|
copyToClipboard(value)
|
||||||
|
this.debounceRestore()
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = connect()(CopyButton)
|
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)
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user