Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2248 | Rev 2254 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 2248 Rev 2253
Línea 1... Línea 1...
1
import React, { useEffect, useState } from 'react'
1
import React, { useState } from 'react'
2
import { useDispatch } from 'react-redux'
2
import { useDispatch } from 'react-redux'
3
import {
3
import {
4
  EmailIcon,
4
  EmailIcon,
5
  EmailShareButton,
5
  EmailShareButton,
6
  FacebookIcon,
6
  FacebookIcon,
Línea 42... Línea 42...
42
    const [openPopup, setOpenPopup] = useState(false)
42
    const [openPopup, setOpenPopup] = useState(false)
43
    const [shareUrl, setShareUrl] = useState('')
43
    const [shareUrl, setShareUrl] = useState('')
44
    const isMobile = useMobile()
44
    const isMobile = useMobile()
45
    const dispatch = useDispatch()
45
    const dispatch = useDispatch()
Línea -... Línea 46...
-
 
46
 
-
 
47
    const handleClick = async () => {
-
 
48
      const shorterUrl = shareUrl || (await getShareUrl())
-
 
49
      setShareUrl(shorterUrl)
-
 
50
 
-
 
51
      if (!isMobile) setShowOptions(!showOptions)
-
 
52
 
-
 
53
      if (navigator?.share) {
-
 
54
        try {
-
 
55
          await navigator.share({ url: shorterUrl })
-
 
56
          incrementCount()
-
 
57
        } catch (error) {
-
 
58
          dispatch(addNotification({ style: 'danger', msg: error.message }))
-
 
59
        }
-
 
60
        return
-
 
61
      }
-
 
62
 
-
 
63
      if (window?.AndroidShareHandler) {
-
 
64
        try {
-
 
65
          window.AndroidShareHandler.share(shorterUrl)
-
 
66
        } catch (error) {
-
 
67
          dispatch(addNotification({ style: 'danger', msg: error.message }))
-
 
68
        }
-
 
69
        return
-
 
70
      }
-
 
71
 
-
 
72
      setOpenPopup(true)
-
 
73
    }
46
 
74
 
47
    const getShareUrl = async () => {
75
    const getShareUrl = async () => {
48
      try {
76
      try {
49
        const response = await axios.get(url)
77
        const response = await axios.get(url)
50
        const { data, success } = response.data
78
        const { data, success } = response.data
51
        if (!success) throw new Error(data)
-
 
52
        setShareUrl(data)
79
        if (!success) throw new Error(data)
53
        return data
80
        return data
54
      } catch (error) {
81
      } catch (error) {
55
        dispatch(addNotification({ style: 'danger', msg: error.message }))
82
        dispatch(addNotification({ style: 'danger', msg: error.message }))
56
      }
83
      }
Línea 57... Línea -...
57
    }
-
 
58
 
-
 
59
    const onClick = () => setShowOptions(!showOptions)
84
    }
60
 
85
 
61
    const incrementCount = async () => {
86
    const incrementCount = async () => {
62
      await axios
87
      await axios
63
        .post(shorterUrl)
88
        .post(shorterUrl)
Línea 70... Línea 95...
70
        .catch((err) =>
95
        .catch((err) =>
71
          dispatch(addNotification({ style: 'danger', msg: err.message }))
96
          dispatch(addNotification({ style: 'danger', msg: err.message }))
72
        )
97
        )
73
    }
98
    }
Línea 74... Línea -...
74
 
-
 
75
    const mobileOnClick = async () => {
-
 
76
      if (navigator?.share) {
-
 
77
        try {
-
 
78
          const shareUrl = await getShareUrl()
-
 
79
          await navigator.share({
-
 
80
            url: shareUrl
-
 
81
          })
-
 
82
          incrementCount()
-
 
83
        } catch (error) {
-
 
84
          dispatch(addNotification({ style: 'danger', msg: error.message }))
-
 
85
        }
-
 
86
      } else if (window?.AndroidShareHandler) {
-
 
87
        try {
-
 
88
          const shareUrl = await getShareUrl()
-
 
89
          window.AndroidShareHandler.share(shareUrl)
-
 
90
        } catch (error) {
-
 
91
          dispatch(addNotification({ style: 'danger', msg: error.message }))
-
 
92
        }
-
 
93
      } else {
-
 
94
        setOpenPopup(true)
-
 
95
      }
-
 
96
    }
-
 
97
 
-
 
98
    useEffect(() => {
-
 
99
      if (!showOptions || !openPopup || shareUrl) return
-
 
100
 
-
 
101
      getShareUrl()
-
 
102
    }, [showOptions, shareUrl])
-
 
103
 
99
 
104
    return (
100
    return (
105
      <>
101
      <>
106
        <Component onClick={isMobile ? mobileOnClick : onClick}>
102
        <Component onClick={handleClick}>
Línea 107... Línea 103...
107
          {children}
103
          {children}
108
 
104
 
109
          {showOptions && (
105
          {showOptions && (