Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
4243 stevensc 1
/* eslint-disable react/prop-types */
4810 stevensc 2
import React, { useEffect, useRef, useState } from 'react'
4247 stevensc 3
import './HeaderOptions.scss'
4432 stevensc 4
import './Dropdowns.scss'
4810 stevensc 5
import useOutsideClick from '../../../hooks/useOutsideClick'
4844 stevensc 6
import axios from '../../../utils/axios'
4243 stevensc 7
 
4844 stevensc 8
const HeaderOptions = ({ Icon, title, url, childs = [], isMobile = false, ajaxRequest }) => {
4809 stevensc 9
    const [displayMenu, setDisplayMenu] = useState(false)
4810 stevensc 10
    const menu = useRef(null)
11
    const outsideClick = useOutsideClick(menu)
12
 
13
    useEffect(() => {
14
        if (outsideClick) setDisplayMenu(false)
15
    }, [outsideClick])
16
 
4844 stevensc 17
    const handleAjaxRequest = async () => {
18
        try {
19
            const { data } = await axios.get(url)
20
            if (data.success) window.open(data.data, '_backend')
21
        } catch (error) {
22
            console.log('>>: error > ', error)
23
        }
24
    }
25
 
4243 stevensc 26
    return (
4810 stevensc 27
        <li ref={menu} className={!isMobile && 'd-none d-md-block'}>
4765 stevensc 28
            <a
4844 stevensc 29
                href={`/${url}`}
4814 stevensc 30
                className={`header__option ${isMobile && 'mobile'} ${displayMenu && 'active'}`}
4809 stevensc 31
                onClick={(e) => {
4844 stevensc 32
                    if (ajaxRequest) {
33
                        e.preventDefault()
34
                        handleAjaxRequest()
35
                    }
4809 stevensc 36
                    if (childs.length) {
37
                        e.preventDefault()
38
                        setDisplayMenu(!displayMenu)
39
                    }
40
                }}
4766 stevensc 41
                target='framename'
4763 stevensc 42
            >
4243 stevensc 43
                {Icon && <Icon className="header__option-icon" />}
4253 stevensc 44
                <span>{title}</span>
4243 stevensc 45
            </a>
4427 stevensc 46
            {!!childs.length &&
4809 stevensc 47
                <nav className={`nav__options-dropdown ${isMobile && 'mobile'} ${displayMenu && 'show'}`}>
4427 stevensc 48
                    <ul>{childs.map((linkOption, index) =>
49
                        <li key={index}>
4449 stevensc 50
                            {linkOption.childs?.length
4427 stevensc 51
                                ? <a href='/' onClick={(e) => e.preventDefault()}>{linkOption.label}</a>
4766 stevensc 52
                                : <a href={linkOption.href} target='framename'>{linkOption.label}</a>
4427 stevensc 53
                            }
4448 stevensc 54
                            {!!linkOption.childs?.length &&
4427 stevensc 55
                                <nav className='navLinkLevelThree'>
56
                                    <ul>
57
                                        {linkOption.childs?.map((optionsChild, index) =>
58
                                            <li key={index}>
4766 stevensc 59
                                                <a href={optionsChild.href} target='framename'>{optionsChild.label}</a>
4427 stevensc 60
                                            </li>
61
                                        )}
62
                                    </ul>
63
                                </nav>
64
                            }
65
                        </li>
66
                    )}
67
                    </ul>
68
                </nav>
69
            }
4247 stevensc 70
        </li>
4243 stevensc 71
    )
72
}
73
 
74
export default HeaderOptions