Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
4679 stevensc 1
/* eslint-disable react/prop-types */
4813 stevensc 2
import React, { useEffect, useRef, useState } from 'react'
4679 stevensc 3
import axios from '../../../utils/axios'
4
import { connect } from 'react-redux'
5
import { addNotification } from '../../../redux/notification/notification.actions'
4813 stevensc 6
import useOutsideClick from '../../../hooks/useOutsideClick'
4679 stevensc 7
 
8
const ComunicationOptions = ({ sessionLink, Icon, title, url, childs }) => {
9
    const [messagesCount, setMessagesCount] = useState(0)
4813 stevensc 10
    const [displayMenu, setDisplayMenu] = useState(false)
4679 stevensc 11
    const [loading, setLoading] = useState(false);
4813 stevensc 12
    const outsideClick = useOutsideClick(menu)
13
    const menu = useRef(null)
4679 stevensc 14
 
15
    const checkSession = async () => {
16
        try {
17
            setLoading(true)
18
            const { data: response } = await axios.get(sessionLink)
19
            const { total_messages } = response.data
20
 
21
            if (response.success) {
22
                setMessagesCount(Number(total_messages))
23
            }
24
            setLoading(false)
25
        } catch (error) {
26
            console.log(error)
27
        }
28
    }
29
 
4815 stevensc 30
    const handleClick = (e) => {
31
        e.preventDefault()
32
        setDisplayMenu(!displayMenu)
33
    }
34
 
4813 stevensc 35
    useEffect(() => {
36
        let timer;
37
        if (!loading) {
38
            timer = setTimeout(() => checkSession(), 1000);
39
        }
40
        return () => {
41
            clearTimeout(timer);
42
        };
43
    }, [loading])
44
 
45
    useEffect(() => {
46
        if (outsideClick) setDisplayMenu(false)
47
    }, [outsideClick])
48
 
4679 stevensc 49
    return (
4813 stevensc 50
        <li ref={menu}>
4815 stevensc 51
            <a href={url} className={`header__option mobile ${displayMenu && 'active'}`} onClick={handleClick}>
4679 stevensc 52
                {Icon && <Icon className="header__option-icon" />}
53
                <span>{title}</span>
54
                <span className={`badge ${messagesCount ? 'd-block' : 'd-none'}`} style={{ top: '10px' }}>
55
                    {messagesCount}
56
                </span>
57
            </a>
58
            {!!childs.length &&
4813 stevensc 59
                <nav className={`nav__options-dropdown ${displayMenu && 'show'}`}>
4679 stevensc 60
                    <ul>{childs.map((linkOption, index) =>
61
                        <li key={index}>
4680 stevensc 62
                            <li className='d-flex align-items-center justify-content-between' key={index}>
4763 stevensc 63
                                <a href={linkOption.href} target='secondary'>{linkOption.label}</a>
4682 stevensc 64
                                {(linkOption.label === 'Inmail' && messagesCount) &&
4813 stevensc 65
                                    <span className={`badge ${messagesCount ? 'd-block position-relative' : 'd-none'}`} style={{ left: 0, transform: 'none' }}>
4682 stevensc 66
                                        {messagesCount}
67
                                    </span>}
4680 stevensc 68
                            </li>
4679 stevensc 69
                        </li>
70
                    )}
71
                    </ul>
72
                </nav>
73
            }
74
        </li>
75
    )
76
}
77
 
78
const mapDispatchToProps = {
79
    addNotification: (notification) => addNotification(notification),
80
};
81
 
82
export default connect(null, mapDispatchToProps)(ComunicationOptions)