Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6699 | Rev 6701 | 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
 
6700 stevensc 68
        const menuItems = [...results.menu, knowledgeRoutes, comunicationRoutes]
6699 stevensc 69
 
6700 stevensc 70
        if (results.linkMyCoach) {
71
          knowledgeRoutes.childs.push({ label: 'Mi Coach', href: '/my-coach' })
72
        }
73
 
6699 stevensc 74
        if (results.linkKnowledgeArea) {
75
          knowledgeRoutes.childs.push({
76
            label: 'Área de conocimiento',
77
            href: results.routeKnowledgeArea,
78
          })
79
        }
80
 
6700 stevensc 81
        setUserImage(results.image)
82
        setBackendVars({ ...results, menu: menuItems })
6694 stevensc 83
      })
84
      .catch((err) => {
85
        console.log(err)
86
        throw new Error(err)
87
      })
88
  }, [])
89
 
90
  useEffect(() => {
91
    let timer
92
    if (!loading) {
93
      timer = setTimeout(() => {
94
        checkUserImage()
95
        checkSession()
96
      }, 2000)
97
    }
98
    return () => {
99
      clearTimeout(timer)
100
    }
101
  }, [loading])
102
 
103
  switch (theme) {
104
    case 'default':
105
      return (
106
        <DefaultNavbar
107
          menu={backendVars?.menu}
108
          image={userImage}
109
          logo={backendVars?.logoForNavbar}
110
          name={backendVars?.fullName}
111
          linkAdmin={backendVars?.linkAdmin}
112
          linkImpersonate={backendVars?.linkImpersonate}
113
        />
114
      )
115
    default:
116
      return <DefaultNavbar />
117
  }
118
}
119
 
120
export default Header