Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
6694 stevensc 1
import React, { useState, useEffect } from 'react'
2
import DefaultNavbar from './default/Navbar'
3
import { axios } from '../../utils'
4
import { getBackendVars } from '../../services/backendVars'
5
 
6
const Header = ({ theme = 'default' }) => {
7
  const [backendVars, setBackendVars] = useState(null)
6699 stevensc 8
  const [notificationsCount, setNotificationsCount] = useState(0)
9
  const [messagesCount, setMessagesCount] = useState(0)
6694 stevensc 10
  const [userImage, setUserImage] = useState('')
11
  const [loading, setLoading] = useState(false)
12
 
13
  const checkUserImage = () => {
14
    const session_image = sessionStorage.getItem('user_session_image')
15
 
16
    if (!session_image) {
17
      return
18
    }
19
 
20
    setUserImage(session_image)
21
    sessionStorage.removeItem('user_session_image')
22
  }
23
 
24
  const checkSession = async () => {
25
    try {
26
      setLoading(true)
27
      const { data: response } = await axios.get(backendVars?.routeCheckSession)
28
      const { total_messages, total_notifications } = response.data
29
 
30
      if (response.success) {
31
        setMessagesCount(Number(total_messages))
32
        setNotificationsCount(Number(total_notifications))
33
      }
34
      setLoading(false)
35
    } catch (error) {
36
      console.log(error)
37
    }
38
  }
39
 
40
  useEffect(() => {
41
    getBackendVars('/helpers/menu')
6700 stevensc 42
      .then((results) => {
6694 stevensc 43
        const knowledgeRoutes = {
44
          label: 'Conocimiento',
45
          href: '/knowledge',
46
          img: '',
6699 stevensc 47
          childs: [],
6694 stevensc 48
          ajax: 0,
49
        }
50
 
6699 stevensc 51
        const comunicationRoutes = {
52
          label: 'Comunicación',
53
          href: '/comunication',
54
          img: '',
55
          childs: [
56
            { label: 'Calendario', href: '/calendar' },
57
            { label: 'Inmail', href: '/inmail', count: messagesCount },
58
            { label: 'Chat', href: '/chat' },
59
            {
60
              label: 'Notificaciones',
61
              href: '/notifications',
62
              count: notificationsCount,
63
            },
64
          ],
65
          ajax: 0,
66
        }
6694 stevensc 67
 
6701 stevensc 68
        const menuItems = [
69
          ...results.menu.splice(0, 5),
70
          knowledgeRoutes,
71
          comunicationRoutes,
72
        ]
6699 stevensc 73
 
6700 stevensc 74
        if (results.linkMyCoach) {
75
          knowledgeRoutes.childs.push({ label: 'Mi Coach', href: '/my-coach' })
76
        }
77
 
6699 stevensc 78
        if (results.linkKnowledgeArea) {
79
          knowledgeRoutes.childs.push({
80
            label: 'Área de conocimiento',
81
            href: results.routeKnowledgeArea,
82
          })
83
        }
84
 
6700 stevensc 85
        setUserImage(results.image)
86
        setBackendVars({ ...results, menu: menuItems })
6694 stevensc 87
      })
88
      .catch((err) => {
89
        console.log(err)
90
        throw new Error(err)
91
      })
92
  }, [])
93
 
94
  useEffect(() => {
95
    let timer
96
    if (!loading) {
97
      timer = setTimeout(() => {
98
        checkUserImage()
99
        checkSession()
100
      }, 2000)
101
    }
102
    return () => {
103
      clearTimeout(timer)
104
    }
105
  }, [loading])
106
 
107
  switch (theme) {
108
    case 'default':
109
      return (
110
        <DefaultNavbar
111
          menu={backendVars?.menu}
112
          image={userImage}
113
          logo={backendVars?.logoForNavbar}
114
          name={backendVars?.fullName}
115
          linkAdmin={backendVars?.linkAdmin}
116
          linkImpersonate={backendVars?.linkImpersonate}
117
        />
118
      )
119
    default:
120
      return <DefaultNavbar />
121
  }
122
}
123
 
124
export default Header