Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useState } from "react";

import styles from "./MobileSharePopUp.module.scss";

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

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

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

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

  const getButtonText = (state) => {
    switch (state) {
      case "success":
        return "Link copied";
      case "pending":
      default:
        return "Copy link";
    }
  };

  return (
    <div className={styles.share__popup}>
      <div>
        <h3>{shareData.title}</h3>
        <button onClick={onClose}>
          <span>Close Share</span>
          <div aria-hidden="true">
            <svg
              xmlns="http://www.w3.org/2000/svg"
              width="24"
              height="24"
              viewBox="0 0 24 24"
            >
              <g id="close">
                <path
                  id="x"
                  d="M18.717 6.697l-1.414-1.414-5.303 5.303-5.303-5.303-1.414 1.414 5.303 5.303-5.303 5.303 1.414 1.414 5.303-5.303 5.303 5.303 1.414-1.414-5.303-5.303z"
                />
              </g>
            </svg>
          </div>
        </button>
      </div>
      <div>
        {state === "error" ? (
          <div>
            <p>
              Unable to copy to clipboard, please manually copy the url to
              share.
            </p>
          </div>
        ) : null}
        <input value={shareData.url} readOnly />
        <button onClick={copyClicked}>{getButtonText(state)}</button>
      </div>
    </div>
  );
};

export default SharePopup;