Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 361 | Rev 1442 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useEffect, useState } from "react";
import { axios } from "../../../../utils";
import { Modal } from "react-bootstrap";
import { useDispatch } from "react-redux";
import { addNotification } from "../../../../redux/notification/notification.actions";

import FormErrorFeedback from "../../../UI/FormErrorFeedback";

const SharePopup = ({ shareData, onClose, onError, show }) => {
  const [shareUrl, setShareUrl] = useState("");
  const [state, setState] = useState("pending");
  const dispatch = useDispatch();

  const getShareUrl = (url = "") => {
    axios
      .get(url)
      .then(({ data }) => {
        if (!data.success) {
          dispatch(addNotification({ style: "danger", msg: data.data }));
          return;
        }

        setShareUrl(data.data);
      })
      .catch((err) => {
        onError(err);
        throw new Error(err);
      });
  };

  const copyClicked = async () => {
    try {
      await navigator.clipboard.writeText(shareUrl || "");
      setState("success");
    } catch (err) {
      onError && onError(err);
      setState("error");
    }
  };

  const getButtonText = (state) => {
    switch (state) {
      case "success":
        return "URL Copiada al portapapeles";
      case "pending":
      default:
        return "Copiar URL";
    }
  };

  useEffect(() => {
    if (show) {
      getShareUrl(shareData?.url);
    }
  }, [shareData, show]);

  return (
    <Modal show={show} onHide={onClose} centered>
      <Modal.Header closeButton />
      <Modal.Body>
        {state === "error" ? (
          <FormErrorFeedback>
            No se pudo copiar al portapapeles, por favor copia la url
            manualmente para compartir.
          </FormErrorFeedback>
        ) : null}
        <input className="form-control" type="text" value={shareUrl} readOnly />
        <button className="btn btn-primary mt-3" onClick={copyClicked}>
          {getButtonText(state)}
        </button>
      </Modal.Body>
    </Modal>
  );
};

export default SharePopup;