Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1214 stevensc 1
import React, { useEffect } from 'react'
5 stevensc 2
import { useForm } from 'react-hook-form'
1214 stevensc 3
import { useDispatch } from 'react-redux'
4
 
5 stevensc 5
import { axios } from '../../utils'
6
import { addNotification } from '../../redux/notification/notification.actions'
7
 
1214 stevensc 8
import Modal from 'components/UI/Modal'
9
import DropzoneComponent from '../dropzone/DropzoneComponent'
5 stevensc 10
import FormErrorFeedback from '../UI/FormErrorFeedback'
11
 
12
const ImageModal = ({ show, onClose, sizes, id, onComplete }) => {
13
  const dispatch = useDispatch()
14
 
15
  const {
16
    register,
17
    errors,
18
    handleSubmit,
19
    setValue,
20
    clearErrors,
21
    setError,
1214 stevensc 22
    getValues
5 stevensc 23
  } = useForm()
24
 
25
  const onUploadedHandler = (files) => {
26
    setValue('image', files)
27
    clearErrors('image')
28
  }
29
 
1214 stevensc 30
  const onSubmitHandler = handleSubmit(({ image }) => {
5 stevensc 31
    const type = window.location.pathname.split('/')[1]
32
    const typesUrl = {
33
      profile: `/profile/my-profiles/image/${id}/operation/upload`,
34
      company: `/my-company/${id}/profile/image/upload`,
1214 stevensc 35
      group: `/group/my-groups/image/${id}/operation/upload`
5 stevensc 36
    }
37
 
38
    const formData = new FormData()
39
    formData.append('image', image)
40
 
1214 stevensc 41
    axios.post(typesUrl[type], formData).then(({ data: response }) => {
42
      const { data, success } = response
5 stevensc 43
 
1214 stevensc 44
      if (!success) {
45
        const resError = data
46
        if (resError.constructor.name === 'Object') {
47
          Object.entries(resError).forEach(([key, value]) => {
48
            if (key in getValues()) {
49
              setError(key, {
50
                type: 'manual',
51
                message: Array.isArray(value) ? value[0] : value
52
              })
53
            }
54
          })
55
        } else {
56
          dispatch(addNotification({ style: 'danger', msg: resError }))
5 stevensc 57
        }
1214 stevensc 58
      }
5 stevensc 59
 
1214 stevensc 60
      const newImage = data.profile ?? data
5 stevensc 61
 
1214 stevensc 62
      if (data.update_navbar) {
63
        sessionStorage.setItem('user_session_image', data.user)
64
      }
5 stevensc 65
 
1214 stevensc 66
      onComplete(newImage)
5 stevensc 67
 
1214 stevensc 68
      setValue('image', '')
69
      dispatch(
70
        addNotification({ style: 'success', msg: 'Registro actualizado' })
71
      )
72
      onClose()
73
    })
74
  })
5 stevensc 75
 
76
  useEffect(() => {
77
    register('image', {
1214 stevensc 78
      required: { value: 'true', message: 'El campo es requerido' }
5 stevensc 79
    })
80
  }, [])
81
 
82
  return (
1214 stevensc 83
    <Modal
84
      show={show}
85
      title='Imagen'
86
      onClose={onClose}
87
      onReject={onClose}
88
      onAccept={onSubmitHandler}
89
    >
90
      <DropzoneComponent
91
        modalType='IMAGE'
92
        onUploaded={onUploadedHandler}
93
        recomendationText={`Imágenes recomendadas de ${sizes}`}
94
      />
95
 
96
      {errors.image && (
97
        <FormErrorFeedback>{errors.image.message}</FormErrorFeedback>
98
      )}
5 stevensc 99
    </Modal>
100
  )
101
}
102
 
103
export default ImageModal