Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1931 | Rev 1979 | 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'
1215 stevensc 7
import { handleApiError } from 'utils/errors'
5 stevensc 8
 
1384 stevensc 9
import Modal from 'components/UI/modal/Modal'
1214 stevensc 10
import DropzoneComponent from '../dropzone/DropzoneComponent'
1437 stevensc 11
import FormErrorFeedback from '../UI/form/FormErrorFeedback'
5 stevensc 12
 
13
const ImageModal = ({ show, onClose, sizes, id, onComplete }) => {
14
  const dispatch = useDispatch()
15
 
1971 stevensc 16
  const {
17
    register,
18
    errors,
19
    handleSubmit,
20
    setValue,
21
    clearErrors,
22
    setError,
23
    watch
24
  } = useForm()
5 stevensc 25
 
26
  const onUploadedHandler = (files) => {
27
    setValue('image', files)
28
    clearErrors('image')
29
  }
30
 
1214 stevensc 31
  const onSubmitHandler = handleSubmit(({ image }) => {
5 stevensc 32
    const type = window.location.pathname.split('/')[1]
33
    const typesUrl = {
34
      profile: `/profile/my-profiles/image/${id}/operation/upload`,
35
      company: `/my-company/${id}/profile/image/upload`,
1214 stevensc 36
      group: `/group/my-groups/image/${id}/operation/upload`
5 stevensc 37
    }
38
 
1215 stevensc 39
    axios
1971 stevensc 40
      .post(typesUrl[type], { image })
1215 stevensc 41
      .then(({ data: response }) => {
42
        const { data, success } = response
5 stevensc 43
 
1215 stevensc 44
        if (!success) {
45
          throw new Error(data)
5 stevensc 46
        }
47
 
1215 stevensc 48
        const newImage = data.profile ?? data
5 stevensc 49
 
1215 stevensc 50
        if (data.update_navbar) {
51
          sessionStorage.setItem('user_session_image', data.user)
52
        }
5 stevensc 53
 
1215 stevensc 54
        onComplete(newImage)
5 stevensc 55
 
1215 stevensc 56
        setValue('image', '')
57
        dispatch(
58
          addNotification({ style: 'success', msg: 'Registro actualizado' })
59
        )
60
        onClose()
61
      })
62
      .catch((err) => {
63
        const error = handleApiError(err)
64
 
65
        Array.isArray(error)
66
          ? error.forEach(({ key, message }) => setError(key, { message }))
67
          : addNotification({ style: 'error', msg: error })
68
      })
1214 stevensc 69
  })
5 stevensc 70
 
71
  useEffect(() => {
72
    register('image', {
1214 stevensc 73
      required: { value: 'true', message: 'El campo es requerido' }
5 stevensc 74
    })
75
  }, [])
76
 
77
  return (
1214 stevensc 78
    <Modal
79
      show={show}
80
      title='Imagen'
81
      onClose={onClose}
1426 stevensc 82
      onReject={onClose}
1214 stevensc 83
      onAccept={onSubmitHandler}
84
    >
85
      <DropzoneComponent
86
        modalType='IMAGE'
87
        onUploaded={onUploadedHandler}
1931 stevensc 88
        settedFile={watch('image')}
1214 stevensc 89
        recomendationText={`Imágenes recomendadas de ${sizes}`}
90
      />
91
 
92
      {errors.image && (
93
        <FormErrorFeedback>{errors.image.message}</FormErrorFeedback>
94
      )}
5 stevensc 95
    </Modal>
96
  )
97
}
98
 
99
export default ImageModal