Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1437 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { useDispatch } from 'react-redux'
1442 stevensc 3
 
2110 stevensc 4
import { axios } from '@app/utils'
5
import { addNotification } from '@app/redux/notification/notification.actions'
348 stevensc 6
 
2110 stevensc 7
import Modal from '@app/components/UI/modal/Modal'
8
import Input from '@app/components/UI/inputs/Input'
1567 stevensc 9
import Button from '@app/components/UI/buttons/Buttons'
349 stevensc 10
 
356 stevensc 11
const SharePopup = ({ shareData, onClose, onError, show }) => {
1437 stevensc 12
  const [shareUrl, setShareUrl] = useState('')
13
  const [state, setState] = useState('pending')
14
  const dispatch = useDispatch()
348 stevensc 15
 
1437 stevensc 16
  const getShareUrl = (url = '') => {
357 stevensc 17
    axios
349 stevensc 18
      .get(url)
19
      .then(({ data }) => {
20
        if (!data.success) {
1437 stevensc 21
          dispatch(addNotification({ style: 'danger', msg: data.data }))
22
          return
349 stevensc 23
        }
24
 
1437 stevensc 25
        setShareUrl(data.data)
349 stevensc 26
      })
27
      .catch((err) => {
1437 stevensc 28
        onError(err)
29
        throw new Error(err)
30
      })
31
  }
349 stevensc 32
 
348 stevensc 33
  const copyClicked = async () => {
34
    try {
1437 stevensc 35
      await navigator.clipboard.writeText(shareUrl || '')
36
      setState('success')
348 stevensc 37
    } catch (err) {
1437 stevensc 38
      onError && onError(err)
39
      setState('error')
348 stevensc 40
    }
1437 stevensc 41
  }
348 stevensc 42
 
43
  const getButtonText = (state) => {
44
    switch (state) {
1437 stevensc 45
      case 'success':
46
        return 'URL Copiada al portapapeles'
47
      case 'pending':
348 stevensc 48
      default:
1437 stevensc 49
        return 'Copiar URL'
348 stevensc 50
    }
1437 stevensc 51
  }
348 stevensc 52
 
352 stevensc 53
  useEffect(() => {
357 stevensc 54
    if (show) {
1437 stevensc 55
      getShareUrl(shareData?.url)
357 stevensc 56
    }
1437 stevensc 57
  }, [shareData, show])
352 stevensc 58
 
348 stevensc 59
  return (
1442 stevensc 60
    <Modal show={show} onClose={onClose}>
2110 stevensc 61
      <Input
62
        value={shareUrl}
63
        readOnly
64
        error={
65
          state === 'error'
66
            ? 'No se pudo copiar al portapapeles, por favor copia la url manualmente para compartir.'
67
            : null
68
        }
69
      />
1442 stevensc 70
 
1567 stevensc 71
      <Button variant='primary' onClick={copyClicked}>
72
        {getButtonText(state)}
73
      </Button>
356 stevensc 74
    </Modal>
1437 stevensc 75
  )
76
}
348 stevensc 77
 
1437 stevensc 78
export default SharePopup