Rev 3406 | Rev 3701 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react'import { Link } from 'react-router-dom'import { useDispatch } from 'react-redux'import { Avatar, styled, Typography } from '@mui/material'import { ArrowDropDown } from '@mui/icons-material'import { useOutsideClick } from '@hooks'import { axios } from '@app/utils'import { asyncLogout } from '@app/redux/auth/auth.actions'import { addNotification } from '@app/redux/notification/notification.actions'const NavItem = styled(Link)(({ theme }) => ({position: 'relative',display: 'flex',alignItems: 'center',padding: theme.spacing(1, 0),height: '100%'}))const UserOptions = ({image = '',name = '',adminUrl = '',impersonateUrl = '',defaultNetwork = 'y',knowledgeAuth,routeAdmin = '',routeImpersonate = ''}) => {const [userImage, setUserImage] = useState('/storage/type/user/code/f3df3718-37d9-4e4d-bd84-71f7924a858d/')const [displayOptions, setDisplayOptions] = useState(false)const dispatch = useDispatch()const [userDropdownContainer] = useOutsideClick(() =>setDisplayOptions(false))const checkUserImage = () => {const session_image = sessionStorage.getItem('user_session_image')if (!session_image) returnsetUserImage(session_image)sessionStorage.removeItem('user_session_image')}const handleDisplay = async (e) => {e.preventDefault()setDisplayOptions(!displayOptions)}const getAdminUrl = async (e) => {e.preventDefault()try {const { data } = await axios.get(routeAdmin)if (data.success) return window.open(data.data)} catch (error) {console.log('>>: error > ', error)}}const handleLogout = async (e) => {e.preventDefault()try {await dispatch(asyncLogout())dispatch(addNotification({ style: 'success', msg: 'Ha finalizado su sesión' }))} catch (error) {dispatch(addNotification({ style: 'danger', msg: error.message }))}}useEffect(() => {const timer = setInterval(checkUserImage, 2000)return () => {clearInterval(timer)}}, [])useEffect(() => {setUserImage(image)}, [image])return (<li ref={userDropdownContainer}><NavItem to='/' onClick={handleDisplay}><Avatar src={userImage} alt={`${name} profile image`} /><ArrowDropDown sx={{ fontSize: '1rem' }} /></NavItem><divclassName={`user__options-dropdown ${displayOptions ? 'fadeIn' : 'fadeOut'}`}><div className='user__options-description'><div className='user__options-info'><Avatar src={userImage} alt={`${name} profile image`} /><Typography variant='h3'>{name}</Typography></div></div>{(adminUrl || impersonateUrl || knowledgeAuth) && (<div className='user__options-item'><Typography variant='h3'>Admin</Typography><ul>{adminUrl && (<li><Link to='/admin' onClick={getAdminUrl}>Administración</Link></li>)}{impersonateUrl && (<li><Link to={routeImpersonate}>Personificar otro usuario</Link></li>)}</ul></div>)}<div className='user__options-item'><Typography variant='h3'>Cuenta</Typography><ul><li><Link to='/account-settings'>Configuración de la cuenta</Link></li><li><Link to='/abuse-report'>Reportes</Link></li>{defaultNetwork === 'y' && (<><li><Link to='/privacy-policy'>Política de privacidad</Link></li><li><Link to='/cookies'>Política de cookies</Link></li></>)}</ul></div><div className='user__options-item'><ul><li className='logOutContainer'><LinkclassName='logOutContainer__a'to='/signout'onClick={handleLogout}>Cerrar sesión</Link></li></ul></div></div></li>)}export default UserOptions