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