Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 354 | Rev 356 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
352 stevensc 1
import React, { useEffect, useRef, useState } from "react";
2
import parse from "html-react-parser";
3
import useOutsideClick from "../../../../hooks/useOutsideClick";
348 stevensc 4
 
349 stevensc 5
import styles from "./MobileSharePopUp.module.scss";
6
 
348 stevensc 7
const SharePopup = ({ shareData, onClose, onError }) => {
352 stevensc 8
  const [shareUrl, setShareUrl] = useState("");
348 stevensc 9
  const [state, setState] = useState("pending");
352 stevensc 10
  const popUp = useRef(null);
355 stevensc 11
  useOutsideClick(popUp, () => onClose());
348 stevensc 12
 
349 stevensc 13
  const getShareUrl = async (url = "") => {
14
    await axios
15
      .get(url)
16
      .then(({ data }) => {
17
        if (!data.success) {
18
          dispatch(addNotification({ style: "danger", msg: data.data }));
19
          return;
20
        }
21
 
352 stevensc 22
        setShareUrl(data.data);
349 stevensc 23
      })
24
      .catch((err) => {
25
        onError(err);
26
        throw new Error(err);
27
      });
28
  };
29
 
348 stevensc 30
  const copyClicked = async () => {
31
    try {
349 stevensc 32
      await navigator.clipboard.writeText(shareUrl || "");
348 stevensc 33
      setState("success");
34
    } catch (err) {
35
      onError && onError(err);
36
      setState("error");
37
    }
38
  };
39
 
40
  const getButtonText = (state) => {
41
    switch (state) {
42
      case "success":
43
        return "Link copied";
44
      case "pending":
45
      default:
46
        return "Copy link";
47
    }
48
  };
49
 
352 stevensc 50
  useEffect(() => {
51
    getShareUrl(shareData.url);
52
  }, [shareData]);
53
 
348 stevensc 54
  return (
352 stevensc 55
    <div className={styles.share__popup} ref={popUp}>
354 stevensc 56
      {parse(shareData.title)}
57
      {state === "error" ? (
58
        <p className={styles.copy__error}>
59
          Unable to copy to clipboard, please manually copy the url to share.
60
        </p>
61
      ) : null}
62
      <input value={shareUrl} readOnly />
63
      <button className="btn btn-primary" onClick={copyClicked}>
64
        {getButtonText(state)}
65
      </button>
348 stevensc 66
    </div>
67
  );
68
};
69
 
70
export default SharePopup;