Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6632 | Rev 6796 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useRef, useState } from 'react'
import { axios } from '../../../utils'
import useOutsideClick from '../../../hooks/useOutsideClick'

import ListItemDropdown from './ListItemDropdown'

import './HeaderOptions.scss'
import './Dropdowns.scss'

const HeaderOptions = ({
  Icon = null,
  title = '',
  url = '',
  childs = [],
  ajaxRequest = 0,
  isMobile = false,
  badgeCount = 0,
}) => {
  const [displayMenu, setDisplayMenu] = useState(false)
  const menu = useRef(null)
  useOutsideClick(menu, () => setDisplayMenu(false))

  const handleClick = () => {
    setDisplayMenu(!displayMenu)
  }

  const handleAjaxRequest = async () => {
    try {
      const { data } = await axios.get(url)
      if (data.success) {
        window.open(data.data, 'backend')
      }
    } catch (error) {
      console.log('>>: error > ', error)
    }
  }

  return (
    <li ref={menu} className={!isMobile && 'd-none d-lg-block'}>
      <a
        href={`/${url}`}
        className={`header__option ${isMobile && 'mobile'} ${
          displayMenu && 'active'
        }`}
        onClick={(e) => {
          if (ajaxRequest) {
            e.preventDefault()
            handleAjaxRequest()
            return
          }
          if (childs.length) {
            e.preventDefault()
            handleClick()
          }
        }}
        target="framename"
      >
        {Icon && <Icon className="header__option-icon" />}
        <span>{title}</span>
        <span
          className={`badge ${badgeCount ? 'd-block' : 'd-none'}`}
          style={{ top: '10px' }}
        >
          {badgeCount}
        </span>
      </a>
      <ListItemDropdown isShow={displayMenu} options={childs} />
    </li>
  )
}

export default HeaderOptions