Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2110 | Rev 3156 | 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) {
2194 stevensc 21
          throw new Error(data.data)
349 stevensc 22
        }
23
 
1437 stevensc 24
        setShareUrl(data.data)
349 stevensc 25
      })
2194 stevensc 26
      .catch((error) => {
27
        onError(error)
28
        dispatch(addNotification({ style: 'danger', msg: error.message }))
1437 stevensc 29
      })
30
  }
349 stevensc 31
 
348 stevensc 32
  const copyClicked = async () => {
33
    try {
1437 stevensc 34
      await navigator.clipboard.writeText(shareUrl || '')
35
      setState('success')
348 stevensc 36
    } catch (err) {
1437 stevensc 37
      onError && onError(err)
38
      setState('error')
348 stevensc 39
    }
1437 stevensc 40
  }
348 stevensc 41
 
42
  const getButtonText = (state) => {
43
    switch (state) {
1437 stevensc 44
      case 'success':
45
        return 'URL Copiada al portapapeles'
46
      case 'pending':
348 stevensc 47
      default:
1437 stevensc 48
        return 'Copiar URL'
348 stevensc 49
    }
1437 stevensc 50
  }
348 stevensc 51
 
352 stevensc 52
  useEffect(() => {
357 stevensc 53
    if (show) {
1437 stevensc 54
      getShareUrl(shareData?.url)
357 stevensc 55
    }
1437 stevensc 56
  }, [shareData, show])
352 stevensc 57
 
348 stevensc 58
  return (
1442 stevensc 59
    <Modal show={show} onClose={onClose}>
2110 stevensc 60
      <Input
61
        value={shareUrl}
62
        readOnly
63
        error={
64
          state === 'error'
65
            ? 'No se pudo copiar al portapapeles, por favor copia la url manualmente para compartir.'
66
            : null
67
        }
68
      />
1442 stevensc 69
 
1567 stevensc 70
      <Button variant='primary' onClick={copyClicked}>
71
        {getButtonText(state)}
72
      </Button>
356 stevensc 73
    </Modal>
1437 stevensc 74
  )
75
}
348 stevensc 76
 
1437 stevensc 77
export default SharePopup