Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React from "react";
import { useDispatch } from "react-redux";
import { axios } from "../../../../utils";
import { addNotification } from "../../../../redux/notification/notification.actions";

const ShareController = ({
  children,
  shareData,
  onInteraction,
  onSuccess,
  onError,
  onNonNativeShare,
  disabled,
}) => {
  const dispatch = useDispatch();

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

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

  const handleOnClick = async () => {
    onInteraction?.();
    if (navigator?.share) {
      try {
        const shareUrl = await getShareUrl(shareData.url);
        await navigator.share({ ...shareData, url: shareUrl });
        onSuccess?.();
      } catch (err) {
        dispatch(addNotification({ style: "danger", msg: "Error" }));
        onError?.(err);
        throw new Error(err);
      }
    } else if (window?.AndroidShareHandler) {
      try {
        window.AndroidShareHandler.share(shareData.url, "", "");
      } catch (error) {
        throw new Error(err);
      }
    } else {
      onNonNativeShare?.();
    }
  };

  return (
    <button
      className="feed__action"
      onClick={handleOnClick}
      type="button"
      disabled={disabled}
    >
      {children}
    </button>
  );
};

export default ShareController;