Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
4309 stevensc 1
/* eslint-disable react/display-name */
2
import React, { useState } from "react"
3
import { useDispatch } from "react-redux"
4
import { EmailIcon, EmailShareButton, FacebookIcon, FacebookShareButton, RedditIcon, RedditShareButton, TelegramIcon, TelegramShareButton, TwitterIcon, TwitterShareButton, WhatsappIcon, WhatsappShareButton } from "react-share"
5
import { addNotification } from "../../../../redux/notification/notification.actions"
6
import { axios } from "../../../../utils"
7
 
8
export default function withExternalShare(Component, url, params) {
9
    return function () {
10
        const dispatch = useDispatch()
11
        const [shareOptions, setShareOptions] = useState(false)
12
        const [shareUrl, setShareUrl] = useState('');
13
 
14
        const handleDisplayReactionList = () => setShareOptions(!shareOptions)
15
 
16
        const getShareUrl = new Promise((resolve, reject) => {
17
            if (shareOptions) {
18
                axios.get(url)
19
                    .then(({ data }) => {
20
                        if (!data.success) {
21
                            dispatch(addNotification({ style: 'danger', msg: data.data }))
22
                            setShareOptions(false)
23
                            return reject(data.data)
24
                        }
25
                        setShareUrl(data.data)
26
                        return resolve(data.data)
27
                    })
28
                    .catch((err) => reject(err))
29
            }
30
        });
31
 
32
        return (
4626 stevensc 33
            <div className="position-relative d-inline-flex" onClick={handleDisplayReactionList} style={{ flexGrow: 1 }}>
4309 stevensc 34
                <Component {...params} />
35
                {shareOptions &&
36
                    <div className="external__share" >
37
                        <FacebookShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
38
                            <FacebookIcon size={32} round />
39
                        </FacebookShareButton>
40
                        <TwitterShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
41
                            <TwitterIcon size={32} round />
42
                        </TwitterShareButton>
43
                        <TelegramShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
44
                            <TelegramIcon size={32} round />
45
                        </TelegramShareButton>
46
                        <WhatsappShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
47
                            <WhatsappIcon size={32} round />
48
                        </WhatsappShareButton>
49
                        <RedditShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
50
                            <RedditIcon size={32} round />
51
                        </RedditShareButton>
52
                        <EmailShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
53
                            <EmailIcon size={32} round />
54
                        </EmailShareButton>
55
                    </div>
56
                }
57
            </div>
58
        )
59
    }
60
}