Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React from 'react'
import { useDispatch } from 'react-redux'
import { axios } from '../../../../utils'
import { addNotification } from '../../../../redux/notification/notification.actions'

const ShareController = ({
  children,
  shareData,
  onInteraction,
  onSuccess,
  onError,
  onNonNativeShare,
  disabled
}) => {
  const dispatch = useDispatch()

  const getShareUrl = async (url = '') => {
    axios
      .get(url)
      .then(({ data }) => {
        if (!data.success) {
          dispatch(addNotification({ style: 'danger', msg: data.data }))
          throw new Error(data.data)
        }

        return data.data
      })
      .catch((err) => {
        onError(err)
      })
  }

  const handleOnClick = async () => {
    onInteraction?.()
    if (navigator?.share) {
      try {
        const shareUrl = await getShareUrl(shareData.url)
        await navigator.share({ ...shareData, url: shareUrl })
        onSuccess?.()
      } catch (err) {
        dispatch(addNotification({ style: 'danger', msg: 'Error' }))
        onError?.(err)
      }
    } else if (window?.AndroidShareHandler) {
      try {
        window.AndroidShareHandler.share(shareData.url, '', '')
      } catch (error) {
        onError?.(error)
      }
    } else {
      onNonNativeShare?.()
    }
  }

  return (
    <button
      className='feed__action'
      onClick={handleOnClick}
      type='button'
      disabled={disabled}
    >
      {children}
    </button>
  )
}

export default ShareController