Rev 3585 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from 'react';import { useNavigate } from 'react-router-dom';import { Badge, styled, Menu, MenuItem } from '@mui/material';import { useDispatch } from 'react-redux';import { getAdminUrl } from '@app/services/admin';import { addNotification } from '@app/redux/notification/notification.actions';const NavItem = styled('div')(({ theme }) => ({position: 'relative',display: 'flex',flexDirection: 'column',alignItems: 'center',justifyContent: 'center',padding: theme.spacing(1, 0),fontSize: '12px',fontWeight: 400,height: '100%',cursor: 'pointer','&::after': {borderBottom: '2px solid var(--font-color)',content: '""',bottom: '-1px',left: 0,position: 'absolute',transform: 'scaleX(0)',transition: 'transform 0.2s ease-in-out',width: '100%'},'&.active::after, &:hover::after': {transform: 'scaleX(1)'},[theme.breakpoints.up('lg')]: {minWidth: '60px'},[theme.breakpoints.down('md')]: {fontSize: 0}}));const NavigationItem = ({ ajax = 0, url = '', childs = [], count = 0, onClick, children }) => {const [anchorEl, setAnchorEl] = useState(null);const open = Boolean(anchorEl);const navigate = useNavigate();const dispatch = useDispatch();const handleClose = () => {setAnchorEl(null);};const openAdmin = async () => {try {const adminUrl = await getAdminUrl(url);window.open(adminUrl, '_blank');} catch (error) {dispatch(addNotification({ style: 'danger', msg: error.message }));}};const handleClick = async (e) => {e.preventDefault();if (ajax) {openAdmin();return;}if (onClick) {onClick();return;}if (childs.length) {setAnchorEl(e.currentTarget);return;}navigate(`/${url}`);};const handleMenuClick = (childUrl) => {navigate(`/${childUrl}`);handleClose();};return (<li><NavItem onClick={handleClick} className={open ? 'active' : ''}>{children}<BadgebadgeContent={count}color='error'sx={{ position: 'absolute', top: '1rem', right: '1rem' }}/></NavItem><MenuanchorEl={anchorEl}open={open}onClose={handleClose}transformOrigin={{ horizontal: 'right', vertical: 'top' }}anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}>{childs.map((child) => (<MenuItem key={child.href} onClick={() => handleMenuClick(child.href)}>{child.label}</MenuItem>))}</Menu></li>);};export default NavigationItem;