Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15383 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
11142 stevensc 1
import React, { useState } from 'react'
2
import { Modal, Button } from 'react-bootstrap'
3
import axios from 'axios'
4
import { addNotification } from '../../../redux/notification/notification.actions'
5
import { useDispatch } from 'react-redux'
7107 stevensc 6
 
7
const SubmitModal = ({
11142 stevensc 8
	children,
9
	closeModal = function () { },
10
	postLink = '',
11
	submitData = '',
14561 stevensc 12
	title = '',
13
	onComplete = function () { }
7107 stevensc 14
}) => {
15
 
11142 stevensc 16
	const [error, setError] = useState('')
15224 stevensc 17
	const [loading, setloading] = useState(false)
11142 stevensc 18
	const dispatch = useDispatch()
7107 stevensc 19
 
11142 stevensc 20
	const onSubmit = () => {
15224 stevensc 21
		setloading(true)
14168 stevensc 22
		const values = Object.values(submitData)
23
 
14169 stevensc 24
		if (!values.length || !values[0]) {
14168 stevensc 25
			return dispatch(addNotification({
26
				style: 'danger',
27
				msg: 'El campo no puede estar vacio.'
28
			}))
29
		}
30
 
11142 stevensc 31
		const formData = new FormData()
7118 stevensc 32
 
11254 stevensc 33
		if (Array.isArray(submitData)) {
34
			submitData.forEach(data => {
35
				Object.entries(data).forEach((entries) => {
36
					formData.append(entries[0], entries[1])
37
				})
38
			})
39
		} else {
40
			Object.entries(submitData).forEach((entries) => {
41
				formData.append(entries[0], entries[1])
42
			})
43
		}
44
 
11142 stevensc 45
		axios.post(postLink, formData)
46
			.then(({ data }) => {
47
				if (!data.success) {
14843 stevensc 48
					typeof data.data === 'string'
49
						?
50
						dispatch(addNotification({
51
							style: 'danger',
52
							msg: data.data
53
						}))
54
						: Object.entries(data.data).map(([key, value]) =>
55
							value.map(err =>
56
								dispatch(addNotification({
57
									style: 'danger',
58
									msg: `${key}: ${err}`
59
								}))
60
							)
61
						)
15383 stevensc 62
					setloading(false)
14843 stevensc 63
					return
11142 stevensc 64
				}
65
				dispatch(addNotification({
66
					style: 'success',
67
					msg: 'Envio completado'
68
				}))
14561 stevensc 69
				onComplete()
11142 stevensc 70
				setError(null)
71
				closeModal()
72
			})
73
			.catch((err) => setError(err))
15383 stevensc 74
			.finally(() => setloading(false))
15382 stevensc 75
		setloading(false)
11142 stevensc 76
	}
7107 stevensc 77
 
11142 stevensc 78
	return (
79
		<Modal size="lg" show onHide={closeModal}>
80
			<Modal.Header closeButton>
81
				<Modal.Title>{title}</Modal.Title>
82
			</Modal.Header>
83
			<Modal.Body>
84
				<div className='form-group'>
85
					{children}
86
				</div>
87
				{error && <p>{error}</p>}
88
			</Modal.Body>
89
			<Modal.Footer>
15384 stevensc 90
				<button
91
					className='btn btn-primary'
11142 stevensc 92
					onClick={onSubmit}
15224 stevensc 93
					disabled={loading}
11142 stevensc 94
				>
11254 stevensc 95
					Enviar
15384 stevensc 96
				</button>
97
				<button className='btn btn-secondary' onClick={closeModal}>
11254 stevensc 98
					Cancelar
15384 stevensc 99
				</button>
11142 stevensc 100
			</Modal.Footer>
101
		</Modal >
102
	)
7107 stevensc 103
}
104
 
105
export default SubmitModal