Proyectos de Subversion LeadersLinked - SPA

Rev

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