Rev 1215 | Rev 1403 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect } from 'react'import { useForm } from 'react-hook-form'import { useDispatch } from 'react-redux'import { axios } from '../../utils'import { addNotification } from '../../redux/notification/notification.actions'import { handleApiError } from 'utils/errors'import Modal from 'components/UI/modal/Modal'import DropzoneComponent from '../dropzone/DropzoneComponent'import FormErrorFeedback from '../UI/FormErrorFeedback'const ImageModal = ({ show, onClose, sizes, id, onComplete }) => {const dispatch = useDispatch()const {register,errors,handleSubmit,setValue,clearErrors,setError,getValues} = useForm()const onUploadedHandler = (files) => {setValue('image', files)clearErrors('image')}const onSubmitHandler = handleSubmit(({ image }) => {const type = window.location.pathname.split('/')[1]const typesUrl = {profile: `/profile/my-profiles/image/${id}/operation/upload`,company: `/my-company/${id}/profile/image/upload`,group: `/group/my-groups/image/${id}/operation/upload`}const formData = new FormData()formData.append('image', image)axios.post(typesUrl[type], formData).then(({ data: response }) => {const { data, success } = responseif (!success) {throw new Error(data)}const newImage = data.profile ?? dataif (data.update_navbar) {sessionStorage.setItem('user_session_image', data.user)}onComplete(newImage)setValue('image', '')dispatch(addNotification({ style: 'success', msg: 'Registro actualizado' }))onClose()}).catch((err) => {const error = handleApiError(err)Array.isArray(error)? error.forEach(({ key, message }) => setError(key, { message })): addNotification({ style: 'error', msg: error })})})useEffect(() => {register('image', {required: { value: 'true', message: 'El campo es requerido' }})}, [])return (<Modalshow={show}title='Imagen'onClose={onClose}onReject={onClose}onAccept={onSubmitHandler}><DropzoneComponentmodalType='IMAGE'onUploaded={onUploadedHandler}recomendationText={`Imágenes recomendadas de ${sizes}`}/>{errors.image && (<FormErrorFeedback>{errors.image.message}</FormErrorFeedback>)}</Modal>)}export default ImageModal