Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15384 | | 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]) {
15385 stevensc 25
			dispatch(addNotification({
14168 stevensc 26
				style: 'danger',
27
				msg: 'El campo no puede estar vacio.'
28
			}))
15385 stevensc 29
			return setloading(false)
14168 stevensc 30
		}
31
 
11142 stevensc 32
		const formData = new FormData()
7118 stevensc 33
 
11254 stevensc 34
		if (Array.isArray(submitData)) {
35
			submitData.forEach(data => {
36
				Object.entries(data).forEach((entries) => {
37
					formData.append(entries[0], entries[1])
38
				})
39
			})
40
		} else {
41
			Object.entries(submitData).forEach((entries) => {
42
				formData.append(entries[0], entries[1])
43
			})
44
		}
45
 
11142 stevensc 46
		axios.post(postLink, formData)
47
			.then(({ data }) => {
48
				if (!data.success) {
14843 stevensc 49
					typeof data.data === 'string'
50
						?
51
						dispatch(addNotification({
52
							style: 'danger',
53
							msg: data.data
54
						}))
55
						: Object.entries(data.data).map(([key, value]) =>
56
							value.map(err =>
57
								dispatch(addNotification({
58
									style: 'danger',
59
									msg: `${key}: ${err}`
60
								}))
61
							)
62
						)
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))
11142 stevensc 75
	}
7107 stevensc 76
 
11142 stevensc 77
	return (
78
		<Modal size="lg" show onHide={closeModal}>
79
			<Modal.Header closeButton>
80
				<Modal.Title>{title}</Modal.Title>
81
			</Modal.Header>
82
			<Modal.Body>
83
				<div className='form-group'>
84
					{children}
85
				</div>
86
				{error && <p>{error}</p>}
87
			</Modal.Body>
88
			<Modal.Footer>
15384 stevensc 89
				<button
90
					className='btn btn-primary'
11142 stevensc 91
					onClick={onSubmit}
15224 stevensc 92
					disabled={loading}
11142 stevensc 93
				>
11254 stevensc 94
					Enviar
15384 stevensc 95
				</button>
96
				<button className='btn btn-secondary' onClick={closeModal}>
11254 stevensc 97
					Cancelar
15384 stevensc 98
				</button>
11142 stevensc 99
			</Modal.Footer>
100
		</Modal >
101
	)
7107 stevensc 102
}
103
 
104
export default SubmitModal