Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4796 | Rev 4798 | 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
                        }
4792 stevensc 25
 
26
                        return resolve(setShareUrl(data.data))
4309 stevensc 27
                    })
28
                    .catch((err) => reject(err))
29
            }
4792 stevensc 30
        })
4309 stevensc 31
 
4797 stevensc 32
        async function getShareUrlVoid() {
33
            if (shareOptions) {
34
                await axios.get(url)
35
                    .then(({ data }) => {
36
                        if (!data.success) {
37
                            dispatch(addNotification({ style: 'danger', msg: data.data }))
38
                            setShareOptions(false)
39
                            return
40
                        }
4792 stevensc 41
 
4797 stevensc 42
                        setShareUrl(data.data)
43
                    })
44
                    .catch((err) => console.log(err))
45
            }
46
        }
47
 
4309 stevensc 48
        return (
4626 stevensc 49
            <div className="position-relative d-inline-flex" onClick={handleDisplayReactionList} style={{ flexGrow: 1 }}>
4309 stevensc 50
                <Component {...params} />
51
                {shareOptions &&
52
                    <div className="external__share" >
4797 stevensc 53
                        <FacebookShareButton beforeOnClick={getShareUrlVoid} url={shareUrl}>
4309 stevensc 54
                            <FacebookIcon size={32} round />
55
                        </FacebookShareButton>
56
                        <TwitterShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
57
                            <TwitterIcon size={32} round />
58
                        </TwitterShareButton>
59
                        <TelegramShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
60
                            <TelegramIcon size={32} round />
61
                        </TelegramShareButton>
62
                        <WhatsappShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
63
                            <WhatsappIcon size={32} round />
64
                        </WhatsappShareButton>
65
                        <RedditShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
66
                            <RedditIcon size={32} round />
67
                        </RedditShareButton>
68
                        <EmailShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
69
                            <EmailIcon size={32} round />
70
                        </EmailShareButton>
71
                    </div>
72
                }
73
            </div>
74
        )
75
    }
76
}