import React, { useState, FC } from 'react'; import PropTypes from 'prop-types'; import { makeStyles, Theme, createStyles, Tooltip, IconButton, Fade, } from '@material-ui/core'; interface CopyButtonProps { className?: string; icon?: any; label: string; value: string; others?: any; } const CopyIcon = ( ); const CopyButton: FC = props => { const { label, icon, className, value, ...others } = props; const classes = useStyles(); const [tooltipTitle, setTooltipTitle] = useState('Copy'); const handleClick = (v: string) => { setTooltipTitle('Copied!'); navigator.clipboard.writeText(v); setTimeout(() => { setTooltipTitle('Copy'); }, 1000); }; return ( handleClick(value || '')} {...others} > {icon || CopyIcon} ); }; CopyButton.propTypes = { className: PropTypes.string, icon: PropTypes.element, label: PropTypes.string.isRequired, value: PropTypes.string.isRequired, others: PropTypes.object, }; CopyButton.defaultProps = { label: 'copy button', value: '', }; CopyButton.displayName = 'CopyButton'; const useStyles = makeStyles((theme: Theme) => createStyles({ root: {}, button: {}, tooltip: {}, }) ); export default CopyButton;