aboutsummaryrefslogblamecommitdiffstats
path: root/ui/app/components/copyButton.js
blob: a60d335233a71d76f4b535f43add8bb21e7f4988 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                            
                                       


                                                    
                                              
 
                                    
 



                           
                                      
 
 




                               


                                                                             

                                           

                                
                           

                             
                                                                                                       
 
                            

                      
                           
      


                

















                                                          
                                                    




                                    
 
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

const Tooltip = require('./tooltip')

CopyButton.contextTypes = {
  t: PropTypes.func,
}

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)
}