Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3277 stevensc 1
import React from 'react'
1921 stevensc 2
import { useDispatch, useSelector } from 'react-redux'
3277 stevensc 3
import { Controller, useForm } from 'react-hook-form'
1902 stevensc 4
 
3277 stevensc 5
import { axios } from '@utils'
6
import { addNotification } from '@store/notification/notification.actions'
1921 stevensc 7
 
1902 stevensc 8
import Modal from '../modal/Modal'
9
import FormErrorFeedback from '../form/FormErrorFeedback'
3277 stevensc 10
import DropzoneComponent from '@components/dropzone/DropzoneComponent'
1902 stevensc 11
 
12
const CoverModal = ({
13
  show = false,
14
  sizes = '',
15
  onClose = () => {},
1921 stevensc 16
  onChange = () => {},
17
  url = ''
1902 stevensc 18
}) => {
19
  const labels = useSelector(({ intl }) => intl.labels)
1921 stevensc 20
  const dispatch = useDispatch()
1902 stevensc 21
 
2802 stevensc 22
  const {
3277 stevensc 23
    control,
24
    formState: { isSubmitting },
25
    handleSubmit
2802 stevensc 26
  } = useForm()
1902 stevensc 27
 
3277 stevensc 28
  const onSubmit = handleSubmit(async ({ cover }) => {
29
    try {
30
      const formData = new FormData()
31
      formData.append('cover', cover)
1902 stevensc 32
 
3277 stevensc 33
      const response = await axios.post(url, formData)
1979 stevensc 34
 
3277 stevensc 35
      const { data, success } = response
1921 stevensc 36
 
3277 stevensc 37
      if (!success) throw new Error('Error al actualizar el portada')
1921 stevensc 38
 
3277 stevensc 39
      onChange(data)
40
      onClose()
41
    } catch (error) {
42
      console.log(error)
43
      dispatch(addNotification({ style: 'danger', msg: error.message }))
44
    }
1921 stevensc 45
  })
46
 
1902 stevensc 47
  return (
48
    <Modal
49
      title={labels.cover}
50
      show={show}
51
      onClose={onClose}
52
      onAccept={onSubmit}
3277 stevensc 53
      loading={isSubmitting}
1902 stevensc 54
    >
3277 stevensc 55
      <Controller
56
        name='cover'
57
        control={control}
58
        rules={{ required: 'Portada requerida' }}
59
        render={({ field: { onChange, value }, fieldState: { error } }) => (
60
          <>
61
            <DropzoneComponent
62
              modalType='IMAGE'
63
              onUploaded={onChange}
64
              settedFile={value}
65
              recomendationText={`Imágenes recomendadas de ${sizes}`}
66
            />
67
            {error && <FormErrorFeedback>{error.message}</FormErrorFeedback>}
68
          </>
69
        )}
1902 stevensc 70
      />
71
    </Modal>
72
  )
73
}
74
 
75
export default CoverModal