Rev 6000 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable camelcase *//* eslint-disable react/prop-types */import React, { useRef, useState } from 'react'import { addNotification } from '../redux/notification/notification.actions'import ConfirmationBox from '../shared/confirmation-box/ConfirmationBox'import Spinner from '../shared/loading-spinner/Spinner'import { axios } from '../utils'import styled from 'styled-components'import { useSelector } from 'react-redux'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,fetchCallback,isTopData = false,btnAcceptTitle = 'Ver perfil',btnCancelTitle = 'Borrar perfil',btnEditTitle = 'Editar perfil',btnLeaveTitle = 'Editar perfil',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,}) => {const [isShowConfirmation, setIsShowConfirmation] = useState(false)const [loading, setLoading] = useState(false)const confirmUrl = useRef('')const labels = useSelector((state) => state.labels)const handleConfirm = (url = '') => {setIsShowConfirmation(!isShowConfirmation)confirmUrl.current = url}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 onConfirm = (url) => {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.dataaddNotification({ style: 'success', msg })if (fetchCallback) fetchCallback()}).catch((error) => console.log('>>: error > ', error)).finally(() => {confirmUrl.current = ''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)}}const linksOptions = [{ label: btnAcceptTitle, url: link_view, color: 'primary' },{ label: btnEditTitle, url: link_edit, color: 'secondary' },{ label: labels.APPROVE, url: link_approve, color: 'tertiary' },{ label: labels.ACCEPT, url: link_accept, color: 'tertiary' },{ label: labels.REJECT, url: link_reject, color: 'tertiary' },{ label: btnCancelTitle, url: link_delete, color: 'tertiary' },{ label: labels.MESSAGE, url: link_inmail, color: 'secondary' },{ label: labels.ADMINISTRATE, url: link_admin, color: 'secondary' },{ label: labels.UNFOLLOW, url: link_unfollow, color: 'tertiary' },{ label: labels.BLOCK, url: link_block, color: 'tertiary' },{ label: labels.UNBLOCK, url: link_unblock, color: 'tertiary' },{ label: labels.CONNECT, url: link_request, color: 'tertiary' },{ label: labels.CANCEL, url: link_cancel, color: 'tertiary' },{ label: labels.LEAVE, url: link_leave, color: 'tertiary' },{ label: 'Personificar', url: link_impersonate, color: 'tertiary' },]return (<div className="profile_info"><div className={`${image ? 'd-flex' : 'd-block'} position-relative`}>{image && (<div className="profile_info_header_imgContainer"><imgsrc={image}className="object-fit-contain"style={{ maxHeight: '100px' }}alt="group image"/></div>)}<divclassName={`${image ? 'col-8 d-flex flex-column align-items-start' : 'col-12'} ${isTopData ? 'justify-content-end' : 'justify-content-center'}`}><h3className={`${status ? '' : 'w-100 text-left'} ${isTopData ? 'mb-2' : ''} w-100`}>{name}</h3>{isTopData && email && (<h4className={`${status ? '' : 'w-100 text-left'} ${isTopData ? 'mb-2' : ''} w-100`}>{email}</h4>)}{network && (<h4className={`${status ? '' : 'w-100 text-left'} ${isTopData ? 'mb-2' : ''} w-100`}>{network}</h4>)}{isTopData && (<ul>{link_view && (<li><ahref={link_view}data-link={link_view}className="btn btn-secondary ellipsis">{btnAcceptTitle}</a></li>)}{link_inmail && (<li><ahref={link_inmail}data-link={link_inmail}className="btn btn-primary">{labels.MESSAGE}</a></li>)}</ul>)}</div>{status && (<h4className={`col-sm-12 d-flex justify-content-center align-items-center ${!image ? 'position-relative' : ''}`}>{status}</h4>)}</div><hr /><ul className="position-relative">{linksOptions.map((option) => {const breakOptions = [link_view, link_edit, link_inmail]if (!option.url) {return null}if (option.url === link_view && isTopData) {return null}if (option.url === link_inmail && isTopData) {return null}return (<akey={option.label}href={option.url}title={option.label}className={`btn btn-${option.color} position-relative`}onClick={(e) => {if (!breakOptions.includes(option.url)) {e.preventDefault()handleConfirm(option.url)}if (option.url === link_unfollow) {e.preventDefault()handleUnfollow(option.url)}if (option.url === link_admin) {e.preventDefault()getManageUrl()}if (option.url === link_impersonate) {e.preventDefault()getImpersonateUrl(option.url)}}}>{option.label}</a>)})}<ConfirmationBoxshow={isShowConfirmation}onClose={() => handleConfirm()}onAccept={() => onConfirm(confirmUrl.current)}/></ul>{loading && (<StyledSpinnerContainer><Spinner /></StyledSpinnerContainer>)}</div>)}export default Profile