CustomCopyToClipBoard.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import type { FC } from 'react';
  2. import React, { useCallback, useState } from 'react';
  3. import { CopyToClipboard } from 'react-copy-to-clipboard';
  4. import { useTranslation } from 'react-i18next';
  5. import { Tooltip } from 'reactstrap';
  6. type Props = {
  7. message: string;
  8. textToBeCopied?: string;
  9. };
  10. // To get different messages for each copy happend, wrapping CopyToClipBoard and Tooltip together
  11. const CustomCopyToClipBoard: FC<Props> = (props: Props) => {
  12. const { t } = useTranslation();
  13. const [tooltipOpen, setTooltipOpen] = useState(false);
  14. const showToolTip = useCallback(() => {
  15. setTooltipOpen(true);
  16. setTimeout(() => {
  17. setTooltipOpen(false);
  18. }, 1000);
  19. }, []);
  20. return (
  21. <>
  22. <CopyToClipboard text={props.textToBeCopied || ''} onCopy={showToolTip}>
  23. <div className="btn input-group-text" id="tooltipTarget">
  24. <span className="material-symbols-outlined mx-1" aria-hidden="true">
  25. content_paste
  26. </span>
  27. </div>
  28. </CopyToClipboard>
  29. <Tooltip target="tooltipTarget" fade={false} isOpen={tooltipOpen}>
  30. {t(props.message)}
  31. </Tooltip>
  32. </>
  33. );
  34. };
  35. export default CustomCopyToClipBoard;