Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15274 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import axios from 'axios'
import React, { useEffect } from 'react'
import { Modal } from 'react-bootstrap'
import { useForm } from 'react-hook-form'
import { useDispatch } from 'react-redux'
import { addNotification } from '../../../redux/notification/notification.actions'
import DropzoneComponent from '../../../shared/Dropzone/DropzoneComponent'

const CompanyImgModal = ({
        isOpen,
        closeModal,
        imageUploadUrl,
        action
}) => {

        const { handleSubmit, register, getValues, setValue, clearErrors, errors } = useForm()
        const dispatch = useDispatch()

        const onSubmit = ({ image }) => {
                const data = new FormData()
                data.append('image', image)
                axios.post(imageUploadUrl, data)
                        .then(({ data }) => {
                                if (!data.success) {
                                        typeof data.data === 'string'
                                                ?
                                                dispatch(addNotification({
                                                        style: 'danger',
                                                        msg: data.data
                                                }))
                                                : Object.entries(data.data).map(([key, value]) =>
                                                        value.map(err =>
                                                                dispatch(addNotification({
                                                                        style: 'danger',
                                                                        msg: `${key}: ${err}`
                                                                }))
                                                        )
                                                )
                                        return
                                }
                                action(data.data)
                                closeModal()
                        })
                        .catch((err) => console.log(err))
        }

        const onUploadedHandler = (file) => {
                setValue('image', file)
                clearErrors('image')
        }

        useEffect(() => {
                if (getValues('image')) setValue('image', '')
        }, [isOpen])

        useEffect(() => {
                register('image', { required: true })
        }, [])

        return (
                <Modal
                        size="md"
                        show={isOpen}
                        onHide={closeModal}
                        autoFocus={false}
                >
                        <Modal.Header closeButton>
                                <Modal.Title>Foto de perfil</Modal.Title>
                        </Modal.Header>
                        <form onSubmit={handleSubmit(onSubmit)}>
                                <Modal.Body>
                                        <div className="form-group">
                                                <DropzoneComponent
                                                        modalType='IMAGE'
                                                        onUploaded={onUploadedHandler}
                                                        settedFile={getValues('image')}
                                                        recomendationText='Imagen recomendada de (180 x 180px)'
                                                />
                                        </div>
                                        {errors.image && <p>Este campo es requerido</p>}
                                </Modal.Body>
                                <Modal.Footer>
                                        <button
                                                className="btn btn-primary"
                                                type="submit"
                                        >
                                                Enviar
                                        </button>
                                        <button
                                                className='btn btn-tertiary'
                                                onClick={closeModal}
                                        >
                                                Cancelar
                                        </button>
                                </Modal.Footer>
                        </form>
                </Modal >
        )
}

export default CompanyImgModal