Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
774 stevensc 1
import React from 'react'
2
import { useDispatch } from 'react-redux'
3
import { axios } from '../../../../utils'
4
import { addNotification } from '../../../../redux/notification/notification.actions'
348 stevensc 5
 
6
const ShareController = ({
7
  children,
8
  shareData,
9
  onInteraction,
10
  onSuccess,
11
  onError,
12
  onNonNativeShare,
774 stevensc 13
  disabled
348 stevensc 14
}) => {
774 stevensc 15
  const dispatch = useDispatch()
355 stevensc 16
 
774 stevensc 17
  const getShareUrl = async (url = '') => {
361 stevensc 18
    axios
348 stevensc 19
      .get(url)
20
      .then(({ data }) => {
21
        if (!data.success) {
774 stevensc 22
          dispatch(addNotification({ style: 'danger', msg: data.data }))
23
          throw new Error(data.data)
348 stevensc 24
        }
25
 
774 stevensc 26
        return data.data
348 stevensc 27
      })
28
      .catch((err) => {
774 stevensc 29
        onError(err)
30
      })
31
  }
348 stevensc 32
 
33
  const handleOnClick = async () => {
774 stevensc 34
    onInteraction?.()
348 stevensc 35
    if (navigator?.share) {
36
      try {
774 stevensc 37
        const shareUrl = await getShareUrl(shareData.url)
38
        await navigator.share({ ...shareData, url: shareUrl })
39
        onSuccess?.()
348 stevensc 40
      } catch (err) {
774 stevensc 41
        dispatch(addNotification({ style: 'danger', msg: 'Error' }))
42
        onError?.(err)
348 stevensc 43
      }
359 stevensc 44
    } else if (window?.AndroidShareHandler) {
357 stevensc 45
      try {
774 stevensc 46
        window.AndroidShareHandler.share(shareData.url, '', '')
357 stevensc 47
      } catch (error) {
774 stevensc 48
        onError?.(error)
357 stevensc 49
      }
348 stevensc 50
    } else {
774 stevensc 51
      onNonNativeShare?.()
348 stevensc 52
    }
774 stevensc 53
  }
348 stevensc 54
 
55
  return (
351 stevensc 56
    <button
774 stevensc 57
      className='feed__action'
351 stevensc 58
      onClick={handleOnClick}
774 stevensc 59
      type='button'
351 stevensc 60
      disabled={disabled}
61
    >
348 stevensc 62
      {children}
63
    </button>
774 stevensc 64
  )
65
}
348 stevensc 66
 
774 stevensc 67
export default ShareController