Proyectos de Subversion LeadersLinked - SPA

Rev

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