Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15279 | | Comparar con el anterior | Ultima modificación | Ver Log |

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