Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useState, useEffect } from "react";
import { useDispatch } from "react-redux";

import { axios } from "utils/index";
import { addNotification } from "../../redux/notification/notification.actions";

import Modal from "components/UI/modal/Modal";
import Input from "../UI/inputs/Input";

const AddMemberModal = ({
  isShow = false,
  linkInvite = "",
  handleClose = function () {},
}) => {
  const [users, setUsers] = useState([]);
  const [search, setSearch] = useState("");
  const dispatch = useDispatch();

  const handleChange = ({ target }) => setSearch(target.value);

  const searchMember = (url, search) => {
    if (!url) return;
    axios
      .get(url + "?search=" + search)
      .then((response) => {
        const { data } = response.data;
        setUsers(data);
      })
      .catch((err) => {
        dispatch(addNotification({ style: "danger", msg: err.message }));
      });
  };

  const invite = (uuid) => {
    const formData = new FormData();
    formData.append("id", uuid);
    axios
      .post(linkInvite, formData)
      .then((response) => {
        const { data, success } = response.data;

        if (!success) {
          throw new Error(data);
        }

        dispatch(addNotification({ style: "success", msg: data }));
        handleClose();
      })
      .catch((err) => {
        dispatch(addNotification({ style: "danger", msg: err.message }));
      });
  };

  useEffect(() => {
    searchMember(linkInvite, search);
  }, [search, linkInvite]);

  return (
    <Modal
      title="Agregar miembro"
      show={isShow}
      onClose={handleClose}
      showFooter={false}
    >
      <Input
        name="search"
        placeholder="Escribe el nombre del usuario"
        onChange={handleChange}
      />

      <ul className="d-flex flex-column w-100" style={{ gap: "1rem" }}>
        {users.map((element, index) => (
          <li key={index}>
            <div
              className="d-flex align-items-center justify-content-between flex-column flex-md-row"
              style={{ gap: ".5rem" }}
            >
              <span>{element.text}</span>
              <button
                className="btn btn-primary"
                onClick={() => invite(element.value)}
              >
                Invitar
              </button>
            </div>
          </li>
        ))}
      </ul>
    </Modal>
  );
};

export default AddMemberModal;