Proyectos de Subversion LeadersLinked - SPA

Rev

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 { Link, useNavigate } from 'react-router-dom'
import { Badge, styled } from '@mui/material'

import { useOutsideClick } from '@hooks'

import ListItemDropdown from './ListItemDropdown'

import './Dropdowns.scss'
import { getAdminUrl } from '@app/services/admin'
import { useDispatch } from 'react-redux'
import { addNotification } from '@app/redux/notification/notification.actions'

const NavItem = styled(Link)(({ theme }) => ({
  position: 'relative',
  display: 'flex',
  flexDirection: 'column',
  alignItems: 'center',
  justifyContent: 'center',
  padding: theme.spacing(1, 0),
  fontSize: '12px',
  fontWeight: 400,
  height: '100%',
  '&::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 [displayMenu, setDisplayMenu] = useState(false)

  const navigate = useNavigate()
  const dispatch = useDispatch()

  const [menu] = useOutsideClick(() => setDisplayMenu(false))

  const toggleMenu = () => setDisplayMenu(!displayMenu)

  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) {
      toggleMenu()
      return
    }

    navigate(`/${url}`)
  }

  return (
    <li ref={menu}>
      <NavItem
        to={url}
        onClick={handleClick}
        className={displayMenu ? 'active' : ''}
      >
        {children}

        <Badge
          badgeContent={count}
          color='error'
          sx={{ position: 'absolute', top: '1rem', right: '1rem' }}
        />
      </NavItem>

      <ListItemDropdown
        isShow={displayMenu}
        options={childs}
        onSelect={toggleMenu}
      />
    </li>
  )
}

export default NavigationItem