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
 
4813 stevensc 30
    useEffect(() => {
31
        let timer;
32
        if (!loading) {
33
            timer = setTimeout(() => checkSession(), 1000);
34
        }
35
        return () => {
36
            clearTimeout(timer);
37
        };
38
    }, [loading])
39
 
40
    useEffect(() => {
41
        if (outsideClick) setDisplayMenu(false)
42
    }, [outsideClick])
43
 
4679 stevensc 44
    return (
4813 stevensc 45
        <li ref={menu}>
4814 stevensc 46
            <a href={url} className={`header__option mobile ${displayMenu && 'active'}`} onClick={(e) => e.preventDefault()}>
4679 stevensc 47
                {Icon && <Icon className="header__option-icon" />}
48
                <span>{title}</span>
49
                <span className={`badge ${messagesCount ? 'd-block' : 'd-none'}`} style={{ top: '10px' }}>
50
                    {messagesCount}
51
                </span>
52
            </a>
53
            {!!childs.length &&
4813 stevensc 54
                <nav className={`nav__options-dropdown ${displayMenu && 'show'}`}>
4679 stevensc 55
                    <ul>{childs.map((linkOption, index) =>
56
                        <li key={index}>
4680 stevensc 57
                            <li className='d-flex align-items-center justify-content-between' key={index}>
4763 stevensc 58
                                <a href={linkOption.href} target='secondary'>{linkOption.label}</a>
4682 stevensc 59
                                {(linkOption.label === 'Inmail' && messagesCount) &&
4813 stevensc 60
                                    <span className={`badge ${messagesCount ? 'd-block position-relative' : 'd-none'}`} style={{ left: 0, transform: 'none' }}>
4682 stevensc 61
                                        {messagesCount}
62
                                    </span>}
4680 stevensc 63
                            </li>
4679 stevensc 64
                        </li>
65
                    )}
66
                    </ul>
67
                </nav>
68
            }
69
        </li>
70
    )
71
}
72
 
73
const mapDispatchToProps = {
74
    addNotification: (notification) => addNotification(notification),
75
};
76
 
77
export default connect(null, mapDispatchToProps)(ComunicationOptions)