Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6753 | Rev 6840 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
6753 stevensc 1
import React, { useRef, useState } from 'react'
6796 stevensc 2
import { Link } from 'react-router-dom'
6753 stevensc 3
import { axios } from '../../../utils'
6632 stevensc 4
import useOutsideClick from '../../../hooks/useOutsideClick'
6753 stevensc 5
 
6632 stevensc 6
import ListItemDropdown from './ListItemDropdown'
6753 stevensc 7
 
6632 stevensc 8
import './HeaderOptions.scss'
9
import './Dropdowns.scss'
10
 
11
const HeaderOptions = ({
12
  Icon = null,
13
  title = '',
14
  url = '',
15
  childs = [],
16
  ajaxRequest = 0,
17
  isMobile = false,
18
  badgeCount = 0,
19
}) => {
20
  const [displayMenu, setDisplayMenu] = useState(false)
21
  const menu = useRef(null)
6753 stevensc 22
  useOutsideClick(menu, () => setDisplayMenu(false))
6632 stevensc 23
 
6796 stevensc 24
  const handleClick = (e) => {
25
    e.preventDefault()
6632 stevensc 26
    setDisplayMenu(!displayMenu)
27
  }
28
 
6796 stevensc 29
  const handleAjaxRequest = async (e) => {
6632 stevensc 30
    try {
6796 stevensc 31
      e.preventDefault()
6632 stevensc 32
      const { data } = await axios.get(url)
33
      if (data.success) {
34
        window.open(data.data, 'backend')
35
      }
36
    } catch (error) {
37
      console.log('>>: error > ', error)
38
    }
39
  }
40
 
41
  return (
42
    <li ref={menu} className={!isMobile && 'd-none d-lg-block'}>
6796 stevensc 43
      <Link
44
        to={`/${url}`}
6632 stevensc 45
        className={`header__option ${isMobile && 'mobile'} ${
46
          displayMenu && 'active'
47
        }`}
48
        onClick={(e) => {
6796 stevensc 49
          if (ajaxRequest) handleAjaxRequest(e)
50
          if (childs.length) handleClick(e)
6632 stevensc 51
        }}
52
      >
53
        {Icon && <Icon className="header__option-icon" />}
54
        <span>{title}</span>
55
        <span
56
          className={`badge ${badgeCount ? 'd-block' : 'd-none'}`}
57
          style={{ top: '10px' }}
58
        >
59
          {badgeCount}
60
        </span>
6796 stevensc 61
      </Link>
6632 stevensc 62
      <ListItemDropdown isShow={displayMenu} options={childs} />
63
    </li>
64
  )
65
}
66
 
67
export default HeaderOptions