Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
653 stevensc 1
import React, { useState, useEffect } from 'react'
2
import { axios } from '../../utils'
3
import { Modal } from 'react-bootstrap'
4
import { addNotification } from 'store/notification/notification.actions'
5
import { useDispatch } from 'react-redux'
5 stevensc 6
 
7
const AddMemberModal = ({
8
  isShow = false,
653 stevensc 9
  linkInvite = '',
10
  handleClose = function () {}
5 stevensc 11
}) => {
653 stevensc 12
  const [users, setUsers] = useState([])
13
  const [search, setSearch] = useState('')
14
  const dispatch = useDispatch()
5 stevensc 15
 
653 stevensc 16
  const handleChange = ({ target }) => setSearch(target.value)
5 stevensc 17
 
653 stevensc 18
  const searchMember = (url, search) => {
19
    if (!url) {
20
      return
5 stevensc 21
    }
22
 
653 stevensc 23
    axios
24
      .get(url + '?search=' + search)
25
      .then(({ data: responseData }) => {
26
        const { data } = responseData
27
        setUsers(data)
28
      })
29
      .catch((err) => {
30
        dispatch(addNotification({ style: 'danger', msg: err }))
31
      })
32
  }
33
 
5 stevensc 34
  const invite = (uuid) => {
653 stevensc 35
    const formData = new FormData()
36
    formData.append('id', uuid)
5 stevensc 37
    axios
38
      .post(linkInvite, formData)
653 stevensc 39
      .then(({ data: responseData }) => {
40
        const { data, success } = responseData
41
 
42
        if (!success) {
43
          throw new Error(data)
5 stevensc 44
        }
653 stevensc 45
 
46
        dispatch(addNotification({ style: 'success', msg: data }))
47
        handleClose()
5 stevensc 48
      })
653 stevensc 49
      .catch((err) => {
654 stevensc 50
        dispatch(addNotification({ style: 'danger', msg: err.message }))
653 stevensc 51
      })
52
  }
5 stevensc 53
 
54
  useEffect(() => {
653 stevensc 55
    searchMember(linkInvite, search)
56
  }, [search, linkInvite])
5 stevensc 57
 
58
  return (
59
    <Modal show={isShow} onHide={handleClose}>
60
      <Modal.Header closeButton>
61
        <h3>Escribe el nombre</h3>
62
      </Modal.Header>
63
      <Modal.Body>
653 stevensc 64
        <div className='container'>
65
          <div className='mb-2'>
5 stevensc 66
            <input
67
              onChange={handleChange}
653 stevensc 68
              name='search'
69
              placeholder='Escribe el nombre del usuario'
5 stevensc 70
            />
71
          </div>
653 stevensc 72
          <ul className='d-flex flex-column w-100' style={{ gap: '1rem' }}>
145 stevensc 73
            {users.map((element, index) => (
74
              <li key={index}>
75
                <div
653 stevensc 76
                  className='d-flex align-items-center justify-content-between flex-column flex-md-row'
77
                  style={{ gap: '.5rem' }}
145 stevensc 78
                >
79
                  <span>{element.text}</span>
80
                  <button
653 stevensc 81
                    className='btn btn-primary'
145 stevensc 82
                    onClick={() => invite(element.value)}
5 stevensc 83
                  >
145 stevensc 84
                    Invitar
85
                  </button>
86
                </div>
87
              </li>
88
            ))}
5 stevensc 89
          </ul>
90
        </div>
91
      </Modal.Body>
92
    </Modal>
653 stevensc 93
  )
94
}
5 stevensc 95
 
653 stevensc 96
export default AddMemberModal