Proyectos de Subversion LeadersLinked - Backend

Rev

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

import React, { useState } from 'react'
import { Modal, Button } from 'react-bootstrap'
import axios from 'axios'
import { addNotification } from '../../../redux/notification/notification.actions'
import { useDispatch } from 'react-redux'

const SubmitModal = ({
        children,
        closeModal = function () { },
        postLink = '',
        submitData = '',
        title = '',
        onComplete = function () { }
}) => {

        const [error, setError] = useState('')
        const [loading, setloading] = useState(false)
        const dispatch = useDispatch()

        const onSubmit = () => {
                setloading(true)
                const values = Object.values(submitData)

                if (!values.length || !values[0]) {
                        dispatch(addNotification({
                                style: 'danger',
                                msg: 'El campo no puede estar vacio.'
                        }))
                        return setloading(false)
                }

                const formData = new FormData()

                if (Array.isArray(submitData)) {
                        submitData.forEach(data => {
                                Object.entries(data).forEach((entries) => {
                                        formData.append(entries[0], entries[1])
                                })
                        })
                } else {
                        Object.entries(submitData).forEach((entries) => {
                                formData.append(entries[0], entries[1])
                        })
                }

                axios.post(postLink, formData)
                        .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
                                }
                                dispatch(addNotification({
                                        style: 'success',
                                        msg: 'Envio completado'
                                }))
                                onComplete()
                                setError(null)
                                closeModal()
                        })
                        .catch((err) => setError(err))
                        .finally(() => setloading(false))
        }

        return (
                <Modal size="lg" show onHide={closeModal}>
                        <Modal.Header closeButton>
                                <Modal.Title>{title}</Modal.Title>
                        </Modal.Header>
                        <Modal.Body>
                                <div className='form-group'>
                                        {children}
                                </div>
                                {error && <p>{error}</p>}
                        </Modal.Body>
                        <Modal.Footer>
                                <button
                                        className='btn btn-primary'
                                        onClick={onSubmit}
                                        disabled={loading}
                                >
                                        Enviar
                                </button>
                                <button className='btn btn-secondary' onClick={closeModal}>
                                        Cancelar
                                </button>
                        </Modal.Footer>
                </Modal >
        )
}

export default SubmitModal