Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 355 | Rev 357 | 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 Input from "../../../UI/Input";
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
 
349 stevensc 15
  const getShareUrl = async (url = "") => {
16
    await axios
17
      .get(url)
18
      .then(({ data }) => {
19
        if (!data.success) {
20
          dispatch(addNotification({ style: "danger", msg: data.data }));
356 stevensc 21
          throw new Error(err);
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(() => {
53
    getShareUrl(shareData.url);
54
  }, [shareData]);
55
 
348 stevensc 56
  return (
356 stevensc 57
    <Modal show={show} onHide={onClose} centered>
58
      <Modal.Header closeButton />
59
      <Modal.Body>
60
        {parse(shareData.title)}
61
        {state === "error" ? (
62
          <FormErrorFeedback>
63
            No se pudo copiar al portapapeles, por favor copia la url
64
            manualmente para compartir.
65
          </FormErrorFeedback>
66
        ) : null}
67
        <Input value={shareUrl} readOnly />
68
        <button className="btn btn-primary" onClick={copyClicked}>
69
          {getButtonText(state)}
70
        </button>
71
      </Modal.Body>
72
    </Modal>
348 stevensc 73
  );
74
};
75
 
76
export default SharePopup;