Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useEffect, useState } from "react";
import { axios } from "../../../utils";
import { addNotification } from "../../../redux/notification/notification.actions";
import { useDispatch, useSelector } from "react-redux";
import styled from "styled-components";

import EmptySection from "../../UI/EmptySection";
import WidgetLayout from "../WidgetLayout";

import { device } from "../../../styles/MediaQueries";

const StyledContainer = styled(WidgetLayout)`
  .widget-header {
    align-items: center;
    display: flex;
    justify-content: space-between;
    padding: 1rem;
    span {
      cursor: pointer;
    }
  }
`;

const StyledSuggestList = styled.div`
  max-height: 265px;
  overflow: auto;
  width: 100%;
  display: flex;
  flex-direction: column;
`;

const PeopleYouMayKnow = () => {
  const [peopleYouMayKnow, setPeopleYouMayKnow] = useState([]);
  const [lookMore, setLookMore] = useState(false);
  const labels = useSelector(({ intl }) => intl.labels);
  const dispatch = useDispatch();

  const handleConnect = (url) => {
    axios.post(url).then(({ data }) => {
      if (!data.success) {
        dispatch(
          addNotification({
            style: "danger",
            msg:
              typeof data.data === "string"
                ? data.data
                : "Ha ocurrido un error",
          })
        );
        return;
      }

      dispatch(
        addNotification({
          style: "success",
          msg: data.data,
        })
      );
      getSuggestion();
      return;
    });
  };

  const getSuggestion = async (url = "/helpers/people-you-may-know") => {
    try {
      const { data: response } = await axios.get(url);
      if (response.success) setPeopleYouMayKnow(response.data);
    } catch (error) {
      console.log(error);
    }
  };

  const dataSlice = () => {
    let infoFollows = [...peopleYouMayKnow];
    if (!lookMore) {
      infoFollows = infoFollows.slice(0, 3);
    }
    return infoFollows;
  };

  useEffect(() => {
    getSuggestion();
  }, []);

  return (
    <StyledContainer>
      <div className="widget-header">
        <h3>{`${labels.connect_with}:`}</h3>
        {peopleYouMayKnow.length >= 4 && (
          <span onClick={() => setLookMore(!lookMore)}>
            {lookMore ? labels.view_less : labels.view_more}
          </span>
        )}
      </div>
      <StyledSuggestList>
        {peopleYouMayKnow.length ? (
          dataSlice().map(
            ({ id, image, link_cancel, link_request, name, profile }) => (
              <div className="user" key={id}>
                <div
                  className="w-100 d-flex align-items-center"
                  style={{ gap: ".5rem" }}
                >
                  <a href={profile} target="_blank" rel="noreferrer">
                    <img src={image} alt={`${name} profile image`} />
                  </a>
                  <h4 className="break-ellipsis">{name}</h4>
                </div>
                {link_request && (
                  <button
                    className="btn btn-primary"
                    onClick={() => handleConnect(link_request)}
                  >
                    {labels.connect}
                  </button>
                )}
                {link_cancel && (
                  <button
                    className="btn btn-secondary"
                    onClick={() => handleConnect(link_cancel)}
                  >
                    {labels.cancel}
                  </button>
                )}
              </div>
            )
          )
        ) : (
          <EmptySection align="left" message={labels?.datatable_empty} />
        )}
      </StyledSuggestList>
    </StyledContainer>
  );
};

export default PeopleYouMayKnow;