Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

/* eslint-disable react/prop-types */
import React, { useState } from "react";
import { axios } from "../utils";
import { addNotification } from "../redux/notification/notification.actions";
import ConfirmationBox from "../shared/confirmation-box/ConfirmationBox";
import Spinner from "../shared/loading-spinner/Spinner";
import styled from 'styled-components'

const StyledSpinnerContainer = styled.div`
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background: rgba(255, 255, 255, 0.4);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 300;
`;


const Profile = ({
  image,
  name,
  email,
  network,
  status,
  link_view,
  link_edit,
  link_delete,
  link_cancel,
  link_block,
  link_reject,
  link_accept,
  link_inmail,
  link_request,
  link_unblock,
  link_unfollow,
  link_approve,
  link_leave,
  link_admin,
  link_impersonate,
  fetchCallback,
  isTopData = false,
  btnAcceptTitle = 'Ver perfil',
  btnCancelTitle = 'Borrar perfil',
  btnEditTitle = 'Editar perfil'
}) => {

  const getImpersonateUrl = async (url = '') => {
    try {
      const { data } = await axios.get(url)
      if (data.success) window.location.href = data.data;
    } catch (error) {
      console.log('>>: error > ', error)
    }
  }

  const [showConfirmationBox, setShowConfirmationBox] = useState(null)
  const [loading, setLoading] = useState(false)

  const handleShowConfirmation = (type) => setShowConfirmationBox(type)

  const linkOptions = {
    view: link_view,
    edit: link_edit,
    delete: link_delete,
    cancel: link_cancel,
    block: link_block,
    reject: link_reject,
    accept: link_accept,
    inmail: link_inmail,
    request: link_request,
    unblock: link_unblock,
    unfollow: link_unfollow,
    approve: link_approve,
    leave: link_leave,
    admin: link_admin,
  }

  const handleCancelApply = (url = link_delete) => {
    setLoading(true);
    axios.post(url)
      .then(({ data }) => {
        if (!data.success) {
          const errorMsg =
            typeof data.data === "string"
              ? data.data
              : "Ha ocurrido un error, Por favor intente más tarde";
          addNotification({
            style: "danger",
            msg: errorMsg,
          });
        }
        const msg = data.data;
        addNotification({
          style: "success",
          msg: msg,
        });
        if (fetchCallback) fetchCallback();
      })
      .catch((error) => console.log('>>: error > ', error))
      .finally(() => setLoading(false))
  };

  const handleUnfollow = async (link_unfollow) => {
    setLoading(true);
    await axios.post(link_unfollow)
      .then(({ data }) => {
        if (data.success) fetchCallback()

        typeof data.data === 'string' &&
          addNotification({
            style: "danger",
            msg: data.data
          })
      })
    setLoading(false);
  };

  const getManageUrl = async () => {
    try {
      const { data } = await axios.get(link_admin)
      if (data.success) window.open(data.data, '_backend')
    } catch (error) {
      console.log('>>: error > ', error)
    }
  }

  return (
    <div className='profile_info'>
      <div className={`${image ? 'd-flex' : 'd-block'} position-relative`}>
        {image &&
          <div className='profile_info_header_imgContainer'>
            <img src={image} className="object-fit-contain" style={{ maxHeight: '100px' }} alt="group image" />
          </div>
        }
        <div
          className={`${image ? 'col-8 d-flex flex-column align-items-start' : 'col-12'} ${isTopData ? 'justify-content-end' : 'justify-content-center'}`}>
          <h3 className={`${status ? '' : "w-100 text-left"} ${isTopData ? 'mb-2' : ''} w-100`}>
            {name}
          </h3>
          {(isTopData && email) &&
            <h4 className={`${status ? '' : "w-100 text-left"} ${isTopData ? 'mb-2' : ''} w-100`}>
              {email}
            </h4>
          }
          {network &&
            <h4 className={`${status ? '' : "w-100 text-left"} ${isTopData ? 'mb-2' : ''} w-100`}>
              {network}
            </h4>
          }
          {isTopData &&
            <ul>
              {link_view &&
                <li>
                  <a
                    href={link_view}
                    className="btn btn-primary ellipsis"
                  >
                    {btnAcceptTitle}
                  </a>
                </li>
              }
              {link_inmail &&
                <li>
                  <a
                    href={link_inmail}
                    className="btn btn-secondary"
                  >
                    Mensaje
                  </a>
                </li>
              }
            </ul>
          }
        </div>
        {status &&
          <h4 className={`col-sm-12 d-flex justify-content-center align-items-center ${!image ? 'position-relative' : ''}`}>
            {status}
          </h4>
        }
      </div>
      <hr />
      <ul>
        {(link_view && !isTopData) &&
          <li>
            <a
              href={link_view}
              className="btn btn-tertiary"
            >
              {btnAcceptTitle}
            </a>
          </li>
        }
        {link_edit &&
          <li>
            <a
              href={link_edit}
              data-link={link_edit}
              title=""
              className="btn btn-tertiary"
            >
              {btnEditTitle}
            </a>
          </li>
        }
        {link_approve &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('aprove')}
            >
              Aprobar
            </button>
          </li>
        }
        {link_accept &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('accept')}
            >
              Aceptar
            </button>
          </li>
        }
        {link_reject &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('reject')}
            >
              Rechazar
            </button>
          </li >
        }
        {link_delete &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('delete')}
            >
              {btnCancelTitle}
            </button>
          </li >
        }
        {(link_inmail && !isTopData) &&
          <li>
            <a
              href={link_inmail}
              className="btn btn-secondary"
            >
              Mensaje
            </a>
          </li>
        }
        {link_admin &&
          <li>
            <a
              onClick={() => getManageUrl()}
              data-link={link_admin}
              title="Administrar empresa"
              className="btn btn-secondary"
            >
              Administrar
            </a>
          </li>
        }
        {link_unfollow &&
          <li>
            <a
              onClick={() => handleUnfollow(link_unfollow)}
              data-link={link_unfollow}
              title="Administrar empresa"
              className="btn btn-secondary"
            >
              Dejar de seguir
            </a>
          </li>
        }

        {link_block &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('block')}
            >
              Bloquear
            </button>
          </li >
        }
        {link_unblock &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('unblock')}
            >
              Desbloquear
            </button>
          </li>
        }
        {link_request &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('request')}
            >
              Conectar
            </button>
          </li >
        }
        {link_cancel &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('cancel')}
            >
              Cancelar
            </button>
          </li >
        }
        {link_leave &&
          <li>
            <button
              className="btn btn-tertiary"
              onClick={() => handleShowConfirmation('leave')}
            >
              Abandonar
            </button>
          </li >
        }
      </ul >
      {link_delete &&
        <div style={{ position: "relative" }}>
          <ConfirmationBox
            show={showConfirmationBox}
            onClose={() => handleShowConfirmation(null)}
            onAccept={() => handleCancelApply(linkOptions[showConfirmationBox])}
          />
        </div>
      }
      {link_impersonate &&
        <li>
          <a
            href="#"
            className="btn btn-primary"
            onClick={(e) => {
              e.preventDefault()
              getImpersonateUrl(link_impersonate)
            }}
          >
            Personificar
          </a>
        </li>
      }
      {
        loading &&
        <StyledSpinnerContainer>
          <Spinner />
        </StyledSpinnerContainer>
      }
    </div >
  );
};

export default Profile;