Rev 1442 | Rev 2110 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react'
import { useDispatch } from 'react-redux'
import { axios } from 'utils/index'
import { addNotification } from '../../../../redux/notification/notification.actions'
import Modal from 'components/UI/modal/Modal'
import TextInput from 'components/UI/inputs/TextInput'
import FormErrorFeedback from 'components/UI/form/FormErrorFeedback'
import Button from '@app/components/UI/buttons/Buttons'
const SharePopup = ({ shareData, onClose, onError, show }) => {
const [shareUrl, setShareUrl] = useState('')
const [state, setState] = useState('pending')
const dispatch = useDispatch()
const getShareUrl = (url = '') => {
axios
.get(url)
.then(({ data }) => {
if (!data.success) {
dispatch(addNotification({ style: 'danger', msg: data.data }))
return
}
setShareUrl(data.data)
})
.catch((err) => {
onError(err)
throw new Error(err)
})
}
const copyClicked = async () => {
try {
await navigator.clipboard.writeText(shareUrl || '')
setState('success')
} catch (err) {
onError && onError(err)
setState('error')
}
}
const getButtonText = (state) => {
switch (state) {
case 'success':
return 'URL Copiada al portapapeles'
case 'pending':
default:
return 'Copiar URL'
}
}
useEffect(() => {
if (show) {
getShareUrl(shareData?.url)
}
}, [shareData, show])
return (
<Modal show={show} onClose={onClose}>
{state === 'error' ? (
<FormErrorFeedback>
No se pudo copiar al portapapeles, por favor copia la url manualmente
para compartir.
</FormErrorFeedback>
) : null}
<TextInput type='text' value={shareUrl} readOnly />
<Button variant='primary' onClick={copyClicked}>
{getButtonText(state)}
</Button>
</Modal>
)
}
export default SharePopup