// Copyright 2015, 2016 Ethcore (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . import React, { Component, PropTypes } from 'react'; import { IconButton } from 'material-ui'; import Snackbar from 'material-ui/Snackbar'; import Clipboard from 'react-copy-to-clipboard'; import CopyIcon from 'material-ui/svg-icons/content/content-copy'; import Theme from '../Theme'; import { darkBlack } from 'material-ui/styles/colors'; const { textColor, disabledTextColor } = Theme.flatButton; import styles from './copyToClipboard.css'; export default class CopyToClipboard extends Component { static propTypes = { data: PropTypes.string.isRequired, onCopy: PropTypes.func, size: PropTypes.number, // in px cooldown: PropTypes.number // in ms }; static defaultProps = { className: '', onCopy: () => {}, size: 16, cooldown: 1000 }; state = { copied: false, timeout: null }; componentWillUnmount () { const { timeoutId } = this.state; if (timeoutId) { window.clearTimeout(timeoutId); } } render () { const { data, size } = this.props; const { copied } = this.state; return (
copied { data } to clipboard
} autoHideDuration={ 2000 } bodyStyle={ { backgroundColor: darkBlack } } />
); } onCopy = () => { const { cooldown, onCopy } = this.props; this.setState({ copied: true, timeout: setTimeout(() => { this.setState({ copied: false, timeout: null }); }, cooldown) }); onCopy(); } }