Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 361 | Rev 1437 | 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";
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
        {state === "error" ? (
62
          <FormErrorFeedback>
63
            No se pudo copiar al portapapeles, por favor copia la url
64
            manualmente para compartir.
65
          </FormErrorFeedback>
66
        ) : null}
357 stevensc 67
        <input className="form-control" type="text" value={shareUrl} readOnly />
364 stevensc 68
        <button className="btn btn-primary mt-3" onClick={copyClicked}>
356 stevensc 69
          {getButtonText(state)}
70
        </button>
71
      </Modal.Body>
72
    </Modal>
348 stevensc 73
  );
74
};
75
 
76
export default SharePopup;