Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
7774 stevensc 1
import React from 'react'
2
import { useState } from 'react'
3
import SearchLocationInput from '../../../shared/SearchLocationInput'
14738 stevensc 4
import { addNotification } from '../../../redux/notification/notification.actions'
5
import axios from 'axios'
6
import { useDispatch } from 'react-redux'
7
import { Button, Modal } from 'react-bootstrap'
7774 stevensc 8
 
9
const LocationModal = ({
11152 stevensc 10
	closeModal,
11
	dataLink,
12
	googleApiKey,
14738 stevensc 13
	defaultData = '',
14
	onComplete = function () { }
7774 stevensc 15
}) => {
16
 
11152 stevensc 17
	const [isActive, setIsActive] = useState((defaultData.is_main === 'y') ? true : false)
18
	const [value, setValue] = useState(defaultData.formatted_address)
19
	const [data, setData] = useState({})
14738 stevensc 20
	const dispatch = useDispatch()
8042 stevensc 21
 
14738 stevensc 22
	const onSubmit = () => {
23
 
24
		const values = Object.values(data)
25
 
26
		if (!values.length) {
27
			return dispatch(addNotification({
28
				style: 'danger',
29
				msg: 'El campo no puede estar vacio.'
30
			}))
31
		}
32
 
33
		const formData = new FormData()
34
		Object.entries({ ...data, is_main: isActive ? 'y' : 'n' }).forEach((entries) => {
35
			formData.append(entries[0], entries[1])
36
		})
37
 
38
		axios.post(dataLink, formData)
39
			.then(({ data }) => {
40
				if (!data.success) {
14843 stevensc 41
					typeof data.data === 'string'
42
						?
43
						dispatch(addNotification({
44
							style: 'danger',
45
							msg: data.data
46
						}))
47
						: Object.entries(data.data).map(([key, value]) =>
48
							value.map(err =>
49
								dispatch(addNotification({
50
									style: 'danger',
51
									msg: `${key}: ${err}`
52
								}))
53
							)
54
						)
55
					return
14738 stevensc 56
				}
57
 
58
				onComplete(data.data)
59
				dispatch(addNotification({
60
					style: 'success',
61
					msg: 'Registro actualizado'
62
				}))
63
				closeModal()
64
			})
65
			.catch((err) => console.log(err))
66
	}
67
 
11152 stevensc 68
	return (
14738 stevensc 69
		<Modal size="lg" show onHide={closeModal}>
70
			<Modal.Header closeButton>
71
				<Modal.Title>Ubicación</Modal.Title>
72
			</Modal.Header>
73
			<Modal.Body>
74
				<div className='form-group'>
75
					<SearchLocationInput
76
						value={value}
77
						setValue={setValue}
78
						googleApiKey={googleApiKey}
79
						updateData={setData}
80
					/>
81
					<div
82
						className={`toggle btn btn-primary ${!isActive && 'off'}`}
83
						data-toggle="toggle"
84
						role="button"
85
						style={{ width: '130px' }}
86
						onClick={() => setIsActive(!isActive)}
87
					>
88
						<input
89
							type="checkbox"
90
							checked={isActive}
91
						/>
92
						<div className="toggle-group">
93
							<label htmlFor="status" className="btn btn-primary toggle-on">Principal</label>
94
							<label htmlFor="status" className="btn btn-light toggle-off">Secundaria</label>
95
							<span className="toggle-handle btn btn-light"></span>
96
						</div>
97
					</div>
11152 stevensc 98
				</div>
14738 stevensc 99
			</Modal.Body>
100
			<Modal.Footer>
101
				<Button
102
					variant="primary"
103
					onClick={onSubmit}
104
				>
105
					Enviar
106
				</Button>
107
				<Button variant="danger" onClick={closeModal}>
108
					Cancelar
109
				</Button>
110
			</Modal.Footer>
111
		</Modal >
11152 stevensc 112
	)
7774 stevensc 113
}
114
export default LocationModal