Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useEffect, useState } from "react";
import { useDispatch } from "react-redux";
import {
  EmailIcon,
  EmailShareButton,
  FacebookIcon,
  FacebookShareButton,
  RedditIcon,
  RedditShareButton,
  TelegramIcon,
  TelegramShareButton,
  TwitterIcon,
  TwitterShareButton,
  WhatsappIcon,
  WhatsappShareButton,
} from "react-share";
import { addNotification } from "../../../redux/notification/notification.actions";
import { axios } from "../../../utils";

export default function withExternalShare(Component, url) {
  return function (props) {
    const dispatch = useDispatch();
    const [shareOptions, setShareOptions] = useState(false);
    const [shareUrl, setShareUrl] = useState("");

    const handleDisplayReactionList = () => setShareOptions(!shareOptions);

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

          setShareUrl(data.data);
        })
        .catch((err) => console.log(err));
    };

    const incrementCount = async () => {
      await axios
        .post(props.shareUrl)
        .then(({ data }) => {
          if (!data.success) {
            dispatch(addNotification({ style: "danger", msg: data.data }));
            return;
          }

          setShareOptions(false);
          props.setValue(data.data);
        })
        .catch((err) => console.log(err));
    };

    useEffect(() => {
      if (shareOptions && !shareUrl) getShareUrl();
    }, [shareOptions]);

    return (
      <Component onClick={handleDisplayReactionList} {...props}>
        {shareOptions && (
          <div className="external__share">
            <FacebookShareButton
              url={shareUrl}
              onShareWindowClose={() => incrementCount()}
            >
              <FacebookIcon size={32} round />
            </FacebookShareButton>
            <TwitterShareButton
              url={shareUrl}
              onShareWindowClose={() => incrementCount()}
            >
              <TwitterIcon size={32} round />
            </TwitterShareButton>
            <TelegramShareButton
              url={shareUrl}
              onShareWindowClose={() => incrementCount()}
            >
              <TelegramIcon size={32} round />
            </TelegramShareButton>
            <WhatsappShareButton
              url={shareUrl}
              onShareWindowClose={() => incrementCount()}
            >
              <WhatsappIcon size={32} round />
            </WhatsappShareButton>
            <RedditShareButton
              url={shareUrl}
              onShareWindowClose={() => incrementCount()}
            >
              <RedditIcon size={32} round />
            </RedditShareButton>
            <EmailShareButton
              url={shareUrl}
              onShareWindowClose={() => incrementCount()}
            >
              <EmailIcon size={32} round />
            </EmailShareButton>
          </div>
        )}
      </Component>
    );
  };
}