Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15261 | 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'
15279 stevensc 7
import { 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
		const values = Object.values(data)
24
 
25
		if (!values.length) {
26
			return dispatch(addNotification({
27
				style: 'danger',
28
				msg: 'El campo no puede estar vacio.'
29
			}))
30
		}
31
 
32
		const formData = new FormData()
33
		Object.entries({ ...data, is_main: isActive ? 'y' : 'n' }).forEach((entries) => {
34
			formData.append(entries[0], entries[1])
35
		})
36
 
37
		axios.post(dataLink, formData)
38
			.then(({ data }) => {
39
				if (!data.success) {
14843 stevensc 40
					typeof data.data === 'string'
41
						?
42
						dispatch(addNotification({
43
							style: 'danger',
44
							msg: data.data
45
						}))
46
						: Object.entries(data.data).map(([key, value]) =>
47
							value.map(err =>
48
								dispatch(addNotification({
49
									style: 'danger',
50
									msg: `${key}: ${err}`
51
								}))
52
							)
53
						)
54
					return
14738 stevensc 55
				}
56
 
57
				onComplete(data.data)
58
				dispatch(addNotification({
59
					style: 'success',
60
					msg: 'Registro actualizado'
61
				}))
62
				closeModal()
63
			})
64
			.catch((err) => console.log(err))
65
	}
66
 
11152 stevensc 67
	return (
15261 stevensc 68
		<Modal size="md" show onHide={closeModal}>
14738 stevensc 69
			<Modal.Header closeButton>
70
				<Modal.Title>Ubicación</Modal.Title>
71
			</Modal.Header>
72
			<Modal.Body>
73
				<div className='form-group'>
74
					<SearchLocationInput
75
						value={value}
76
						setValue={setValue}
77
						googleApiKey={googleApiKey}
78
						updateData={setData}
79
					/>
80
					<div
81
						className={`toggle btn btn-primary ${!isActive && 'off'}`}
82
						data-toggle="toggle"
83
						role="button"
84
						style={{ width: '130px' }}
85
						onClick={() => setIsActive(!isActive)}
86
					>
87
						<input
88
							type="checkbox"
89
							checked={isActive}
90
						/>
91
						<div className="toggle-group">
92
							<label htmlFor="status" className="btn btn-primary toggle-on">Principal</label>
93
							<label htmlFor="status" className="btn btn-light toggle-off">Secundaria</label>
94
							<span className="toggle-handle btn btn-light"></span>
95
						</div>
96
					</div>
11152 stevensc 97
				</div>
14738 stevensc 98
			</Modal.Body>
99
			<Modal.Footer>
15279 stevensc 100
				<button
101
					className="btn btn-primary"
102
					type="submit"
14738 stevensc 103
					onClick={onSubmit}
104
				>
105
					Enviar
15279 stevensc 106
				</button>
107
				<button
108
					className='btn btn-tertiary'
109
					onClick={closeModal}
110
				>
14738 stevensc 111
					Cancelar
15279 stevensc 112
				</button>
14738 stevensc 113
			</Modal.Footer>
114
		</Modal >
11152 stevensc 115
	)
7774 stevensc 116
}
117
export default LocationModal