Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
356 stevensc 1
import React, { useEffect, useState } from "react";
361 stevensc 2
import { axios } from "../../../../utils";
356 stevensc 3
import { Modal } from "react-bootstrap";
4
import { useDispatch } from "react-redux";
5
import { addNotification } from "../../../../redux/notification/notification.actions";
352 stevensc 6
import parse from "html-react-parser";
348 stevensc 7
 
356 stevensc 8
import FormErrorFeedback from "../../../UI/FormErrorFeedback";
349 stevensc 9
 
356 stevensc 10
const SharePopup = ({ shareData, onClose, onError, show }) => {
352 stevensc 11
  const [shareUrl, setShareUrl] = useState("");
348 stevensc 12
  const [state, setState] = useState("pending");
356 stevensc 13
  const dispatch = useDispatch();
348 stevensc 14
 
357 stevensc 15
  const getShareUrl = (url = "") => {
16
    axios
349 stevensc 17
      .get(url)
18
      .then(({ data }) => {
19
        if (!data.success) {
20
          dispatch(addNotification({ style: "danger", msg: data.data }));
357 stevensc 21
          return;
349 stevensc 22
        }
23
 
352 stevensc 24
        setShareUrl(data.data);
349 stevensc 25
      })
26
      .catch((err) => {
27
        onError(err);
28
        throw new Error(err);
29
      });
30
  };
31
 
348 stevensc 32
  const copyClicked = async () => {
33
    try {
349 stevensc 34
      await navigator.clipboard.writeText(shareUrl || "");
348 stevensc 35
      setState("success");
36
    } catch (err) {
37
      onError && onError(err);
38
      setState("error");
39
    }
40
  };
41
 
42
  const getButtonText = (state) => {
43
    switch (state) {
44
      case "success":
356 stevensc 45
        return "URL Copiada al portapapeles";
348 stevensc 46
      case "pending":
47
      default:
356 stevensc 48
        return "Copiar URL";
348 stevensc 49
    }
50
  };
51
 
352 stevensc 52
  useEffect(() => {
357 stevensc 53
    if (show) {
54
      getShareUrl(shareData?.url);
55
    }
56
  }, [shareData, show]);
352 stevensc 57
 
348 stevensc 58
  return (
356 stevensc 59
    <Modal show={show} onHide={onClose} centered>
60
      <Modal.Header closeButton />
61
      <Modal.Body>
62
        {parse(shareData.title)}
63
        {state === "error" ? (
64
          <FormErrorFeedback>
65
            No se pudo copiar al portapapeles, por favor copia la url
66
            manualmente para compartir.
67
          </FormErrorFeedback>
68
        ) : null}
357 stevensc 69
        <input className="form-control" type="text" value={shareUrl} readOnly />
356 stevensc 70
        <button className="btn btn-primary" onClick={copyClicked}>
71
          {getButtonText(state)}
72
        </button>
73
      </Modal.Body>
74
    </Modal>
348 stevensc 75
  );
76
};
77
 
78
export default SharePopup;