ClickToCopy.jsx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import React, { useRef, useState } from "react";
  2. const tooltipClass = "click-to-copy__tooltip";
  3. const tooltipVisClass = `${tooltipClass}--visible`;
  4. export default ({ text }) => {
  5. const textareaRef = useRef(null);
  6. const [hovered, setHovered] = useState(false);
  7. const [copied, setCopied] = useState(false);
  8. const copyText = () => {
  9. textareaRef.current.select();
  10. document.execCommand("copy");
  11. setCopied(true);
  12. };
  13. const hoveredClass = hovered ? tooltipVisClass : "";
  14. return (
  15. <div className="click-to-copy">
  16. <span
  17. className="click-to-copy__text"
  18. onClick={copyText}
  19. onMouseOver={() => {setCopied(false); setHovered(true)}}
  20. onMouseOut={() => setHovered(false)}
  21. >
  22. {text}
  23. </span>
  24. <span className={`${tooltipClass} ${hoveredClass}`}>
  25. {copied ? "Copied!" : "Click to Copy"}
  26. </span>
  27. <textarea
  28. ref={textareaRef}
  29. className="click-to-copy__textarea"
  30. value={text}
  31. readOnly
  32. />
  33. </div>
  34. )
  35. }