Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 349 | Rev 354 | 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);
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}>
56
      <div>{parse(shareData.title)}</div>
348 stevensc 57
      <div>
349 stevensc 58
        {state === "error" ? (
348 stevensc 59
          <div>
349 stevensc 60
            <p>
61
              Unable to copy to clipboard, please manually copy the url to
62
              share.
63
            </p>
348 stevensc 64
          </div>
349 stevensc 65
        ) : null}
352 stevensc 66
        <input value={shareUrl} readOnly />
67
        <button className="btn btn-primary" onClick={copyClicked}>
68
          {getButtonText(state)}
69
        </button>
348 stevensc 70
      </div>
71
    </div>
72
  );
73
};
74
 
75
export default SharePopup;