Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

/* eslint-disable react/display-name */
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, params) {
    return function () {
        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(params.shareUrl)
                .then(({ data }) => {
                    if (!data.success) {
                        dispatch(addNotification({ style: 'danger', msg: data.data }))
                        return
                    }

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

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

        return (
            <div className="position-relative d-inline-flex" onClick={handleDisplayReactionList} style={{ flexGrow: 1 }}>
                <Component {...params} />
                {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>
                }
            </div>
        )
    }
}