Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useState, useEffect } from "react";
import { Link, useLocation } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import { Button, Typography } from "@mui/material";

import { axios, parse } from "@utils";
import { addNotification } from "@store/notification/notification.actions";
import colors from "@styles/colors";

import Widget from "@components/UI/Widget";
import Cover from "@components/UI/cover/Cover";
import ConfirmModal from "@components/modals/ConfirmModal";
import ProfileModal from "./ProfileModal";
import Avatar from "@components/common/avatar";
import Row from "@components/common/Row";

const ProfileCard = ({
  cover,
  facebook,
  following,
  formatted_address: formattedAddress,
  full_name: fullName,
  image,
  instagram,
  link_cancel: linkCancel,
  link_inmail: linkInmail,
  link_request: linkRequest,
  overview,
  request_connection: requestConnection,
  show_contact: showContact,
  sizes,
  total_connections: totalConnections,
  twitter,
  user_experiences: userExperiences = [],
  view_following: viewFollowing,
  view_total_connections: viewTotalConnections,
  edit,
}) => {
  const [isAdded, setIsAdded] = useState(false);
  const [connectionUrl, setConnectionUrl] = useState("");
  const [modalToShow, setModalToShow] = useState(null);
  const [settedOverview, setSettedOverview] = useState("");
  const [isModalShow, setIsModalShow] = useState(false);
  const labels = useSelector(({ intl }) => intl.labels);
  const { pathname } = useLocation();
  const dispatch = useDispatch();

  const displayModal = () => {
    setIsModalShow(!isModalShow);
  };

  const getProfileData = async () => {
    try {
      const response = await axios.get(pathname);
      const { link_request, link_cancel } = response.data;

      if (link_request) {
        setConnectionUrl(link_request);
        return;
      }

      setConnectionUrl(link_cancel);
    } catch (err) {
      dispatch(addNotification({ style: "danger", msg: err.message }));
    }
  };

  const connect = async () => {
    try {
      const response = await axios.post(connectionUrl);
      const { data, success } = response.data;

      if (!success) {
        return dispatch(addNotification({ style: "danger", msg: data }));
      }

      if (success && isModalShow) {
        displayModal();
      }

      await getProfileData();
      dispatch(addNotification({ style: "success", msg: data }));
      setIsAdded(!isAdded);
    } catch (error) {
      dispatch(addNotification({ style: "danger", msg: `Error: ${error}` }));
    }
  };

  const closeModal = () => {
    setModalToShow(null);
  };

  useEffect(() => {
    setIsAdded(!requestConnection);
    setSettedOverview(overview);
  }, [requestConnection, overview]);

  useEffect(() => {
    linkRequest ? setConnectionUrl(linkRequest) : setConnectionUrl(linkCancel);
  }, [linkRequest, linkCancel]);

  return (
    <Widget>
      <Cover cover={cover} edit={edit} />

      <Widget.Body>
        <Avatar
          src={image}
          alt={fullName}
          badgeStyles={{
            mt: { xs: "-50px", lg: "-75px" },
          }}
          styles={{
            width: { xs: "100px", lg: "150px" },
            height: { xs: "100px", lg: "150px" },
            border: `1px solid ${colors.border.primary}`,
          }}
          edit={edit}
        />

        <Typography variant="h2">{fullName}</Typography>
        <Typography>{parse(settedOverview)}</Typography>

        <Row>
          <Typography>{formattedAddress}</Typography>
          <Typography variant="overline"> - </Typography>
          <Typography variant="overline" onClick={() => setModalToShow("info")}>
            {labels.personal_info}
          </Typography>
        </Row>

        <Row>
          {viewTotalConnections ? (
            <Link to="/connection/my-connections">
              <Typography variant="overline">
                {`${totalConnections} conexiones`}
              </Typography>
            </Link>
          ) : null}
          {viewFollowing ? (
            <Link onClick={(e) => e.preventDefault()}>
              <Typography variant="overline">
                {`${following} siguiendo`}
              </Typography>
            </Link>
          ) : null}
        </Row>

        <Row>
          {connectionUrl && isAdded && (
            <Button color="primary" onClick={() => displayModal()}>
              {labels.cancel}
            </Button>
          )}
          {connectionUrl && !isAdded && (
            <Button color="primary" onClick={connect}>
              {labels.connect}
            </Button>
          )}
          {showContact && (
            <Button to={linkInmail} LinkComponent={Link} color="secondary">
              {labels.message}
            </Button>
          )}
        </Row>
      </Widget.Body>
      {/*  {isEdit && (
        <>
          <OverviewModal
            isOpen={modalToShow === 'overview'}
            overview={settedOverview}
            id={profileId}
            closeModal={() => closeModal()}
            onComplete={(newOverview) => setSettedOverview(newOverview)}
          />
        </>
      )} */}

      <ProfileModal
        show={modalToShow === "info"}
        closeModal={() => closeModal()}
        fullName={fullName}
        facebook={facebook}
        twitter={twitter}
        instagram={instagram}
        following={following}
        formatted_address={formattedAddress}
        overview={overview}
        total_connections={totalConnections}
        // follower={follower}
      />
      <ConfirmModal
        show={isModalShow}
        onClose={() => setIsModalShow(false)}
        onAccept={() => connect()}
      />
    </Widget>
  );
};

export default ProfileCard;