diff --git a/components/CopyButton.js b/components/CopyButton.js new file mode 100644 index 0000000..07b48fb --- /dev/null +++ b/components/CopyButton.js @@ -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 ( +