Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

/* eslint-disable react/display-name */
import React, { 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, params) {
    return function () {
        const dispatch = useDispatch()
        const [shareOptions, setShareOptions] = useState(false)
        const [shareUrl, setShareUrl] = useState('');

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

        const getShareUrl = new Promise((resolve, reject) => {
            if (shareOptions) {
                axios.get(url)
                    .then(({ data }) => {
                        if (!data.success) {
                            dispatch(addNotification({ style: 'danger', msg: data.data }))
                            setShareOptions(false)
                            return reject(data.data)
                        }
                        setShareUrl(data.data)
                        return resolve(data.data)
                    })
                    .catch((err) => reject(err))
            }
        });

        return (
            <div className="position-relative d-inline-flex" onClick={handleDisplayReactionList} style={{ flexGrow: 1 }}>
                <Component {...params} />
                {shareOptions &&
                    <div className="external__share" >
                        <FacebookShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
                            <FacebookIcon size={32} round />
                        </FacebookShareButton>
                        <TwitterShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
                            <TwitterIcon size={32} round />
                        </TwitterShareButton>
                        <TelegramShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
                            <TelegramIcon size={32} round />
                        </TelegramShareButton>
                        <WhatsappShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
                            <WhatsappIcon size={32} round />
                        </WhatsappShareButton>
                        <RedditShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
                            <RedditIcon size={32} round />
                        </RedditShareButton>
                        <EmailShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
                            <EmailIcon size={32} round />
                        </EmailShareButton>
                    </div>
                }
            </div>
        )
    }
}