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