Proyectos de Subversion LeadersLinked - SPA

Rev

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

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