Rev 3701 | 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/ArrowDropDown';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) return;setUserImage(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><div className={`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'><Link className='logOutContainer__a' to='/signout' onClick={handleLogout}>Cerrar sesión</Link></li></ul></div></div></li>);};export default UserOptions;