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