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;