Proyectos de Subversion LeadersLinked - SPA

Rev

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