mirror of https://github.com/sgoudham/carbon.git
Merge branch 'master' into toolbar
commit
8272d81753
@ -0,0 +1,93 @@
|
||||
import React from 'react'
|
||||
import domtoimage from 'dom-to-image'
|
||||
|
||||
import Button from './Button'
|
||||
import api from '../lib/api'
|
||||
|
||||
// constants
|
||||
const BUTTON_COLOR = '#84ACFC'
|
||||
const BUTTON_STYLE = { borderRadius: '3px 0px 0px 3px' }
|
||||
const DEBOUNCE_DURATION = 10000
|
||||
|
||||
const STATUS = {
|
||||
IDLE: 'IDLE',
|
||||
LOADING: 'LOADING',
|
||||
DEBOUNCED: 'DEBOUNCED'
|
||||
}
|
||||
|
||||
const textMap = {
|
||||
[STATUS.IDLE]: 'Copy Imgur Link',
|
||||
[STATUS.LOADING]: 'Uploading...',
|
||||
[STATUS.DEBOUNCED]: 'Copied to Clipboard'
|
||||
}
|
||||
|
||||
class CopyButton extends React.Component {
|
||||
constructor(props) {
|
||||
super(props)
|
||||
|
||||
this.state = {
|
||||
status: STATUS.IDLE
|
||||
}
|
||||
|
||||
// bind methods
|
||||
this.handleIdleClick = this.handleIdleClick.bind(this)
|
||||
this.handleDebounceClick = this.handleDebounceClick.bind(this)
|
||||
this.handleClick = this.handleClick.bind(this)
|
||||
}
|
||||
|
||||
uploadImage () {
|
||||
return domtoimage.toBlob(document.getElementById('container'))
|
||||
.then(api.uploadImage)
|
||||
.then(res => res.data.id)
|
||||
.then(id => `http://i.imgur.com/${id}`)
|
||||
}
|
||||
|
||||
handleIdleClick () {
|
||||
// set to loading
|
||||
this.setState({
|
||||
status: STATUS.LOADING
|
||||
})
|
||||
|
||||
// upload code image and update state
|
||||
this.uploadImage()
|
||||
.then(link => {
|
||||
console.log('link')
|
||||
this.setState({
|
||||
status: STATUS.DEBOUNCED,
|
||||
link
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
status: STATUS.IDLE
|
||||
})
|
||||
}, DEBOUNCE_DURATION)
|
||||
})
|
||||
}
|
||||
|
||||
handleDebounceClick () {
|
||||
// copy link to clipboard
|
||||
}
|
||||
|
||||
handleClick () {
|
||||
console.log('called!')
|
||||
switch (this.state.status) {
|
||||
case STATUS.IDLE:
|
||||
this.handleIdleClick()
|
||||
break
|
||||
case STATUS.DEBOUNCED:
|
||||
this.handleDebounceClick()
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
return (
|
||||
<div >
|
||||
{ this.state.link ? <input id="linkTarget" type="hidden" value="https://github.com/zenorocha/clipboard.js.git" /> : null }
|
||||
<Button onClick={this.handleClick} title={textMap[this.state.status]} bg={BUTTON_COLOR} style={BUTTON_STYLE}/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default CopyButton
|
Loading…
Reference in New Issue