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>
)
}
}