import * as React from "react"; import styled from "styled-components"; import { ContentCopy, Check } from "@rimble/icons"; import { Box, Button, Flex } from "rimble-ui"; import { baseColors, colors } from "../../../themes"; import { copyToClipboard } from "../../../utils"; interface ContentCopyStyledProps { hoverColor?: string; } const ContentCopyStyled = styled.span` cursor: pointer; &:hover svg { fill: ${(props: ContentCopyStyledProps) => (props.hoverColor ? props.hoverColor : colors.primary.base)}; transition: 250ms ease; } `; export interface CopyToClipboardProps { text: string; color?: string; iconPadding?: string | number; hoverColor?: string; hoverTitle?: string; size?: string; textButton?: boolean; textButtonTitle?: string; buttonOverride?(copied: boolean): JSX.Element; } export const CopyToClipboard: React.FunctionComponent = (props) => { const [copied, setCopied] = React.useState(false); React.useEffect(() => { if (copied) { setTimeout(() => { setCopied(false); }, 2500); } }, [copied]); if (props.buttonOverride) { return setCopied(copyToClipboard(props.text))}>{props.buttonOverride(copied)}; } if (copied) { if (props.textButton) { return Copied; } return ; } if (props.textButton) { return ( setCopied(copyToClipboard(props.text))} size="small" style={{ backgroundColor: baseColors.white }} > {props.textButtonTitle || "Copy"} ); } return ( setCopied(copyToClipboard(props.text))} title={props.hoverTitle} > ); };