Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6693 | Rev 6753 | 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, { Suspense, lazy, useEffect, useState } from 'react'
2
import { axios } from '../../../utils'
6632 stevensc 3
 
4
import HomeIcon from '@mui/icons-material/Home'
5
import BusinessCenterIcon from '@mui/icons-material/BusinessCenter'
6
import SellIcon from '@mui/icons-material/Sell'
7
import PeopleIcon from '@mui/icons-material/People'
8
import GroupsIcon from '@mui/icons-material/Groups'
9
import ChatIcon from '@mui/icons-material/Chat'
10
import MenuIcon from '@mui/icons-material/Menu'
11
import SchoolIcon from '@mui/icons-material/School'
12
 
13
import HeaderOptions from './HeaderOptions'
14
import UserOptions from './UserOptions'
15
 
16
import './Header.scss'
6694 stevensc 17
import NavSearch from './nav-search/NavSearch'
18
import useWindowSize from '../../../hooks/useWindowSize'
19
const MenuDrawer = lazy(() => import('./Drawer'))
6632 stevensc 20
 
21
const ICON_OPTIONS = [
22
  HomeIcon,
23
  PeopleIcon,
24
  BusinessCenterIcon,
25
  GroupsIcon,
26
  SellIcon,
27
  SchoolIcon,
28
]
29
 
30
const Header = ({
31
  menu,
32
  image = '',
33
  logoForNavbar = '',
34
  fullName,
35
  linkAdmin,
36
  linkImpersonate,
37
  linkKnowledgeArea,
38
  routeKnowledgeArea,
39
  // companyVars,
40
  // isChatPage,
41
  routeCheckSession,
42
  defaultNetwork,
43
}) => {
44
  const [menuItems, setMenuItems] = useState(menu || [])
45
  const [notificationsCount, setNotificationsCount] = useState(0)
46
  const [aditionalItems, setAditionalItems] = useState([])
47
  const [messagesCount, setMessagesCount] = useState(0)
48
  const [userImage, setUserImage] = useState(image)
49
 
50
  const [showDrawer, setShowDrawer] = useState(false)
51
  const [loading, setLoading] = useState(false)
52
 
53
  const [innerWidth] = useWindowSize()
54
 
55
  const checkUserImage = async () => {
56
    setLoading(true)
57
    const session_image = sessionStorage.getItem('user_session_image')
58
    if (session_image) {
59
      await setUserImage(session_image)
60
      sessionStorage.removeItem('user_session_image')
61
    }
62
    setLoading(false)
63
  }
64
 
65
  const checkSession = async () => {
66
    try {
67
      setLoading(true)
68
      const { data: response } = await axios.get(routeCheckSession)
69
      const { total_messages, total_notifications } = response.data
70
 
71
      if (response.success) {
72
        setMessagesCount(Number(total_messages))
73
        setNotificationsCount(Number(total_notifications))
74
      }
75
      setLoading(false)
76
    } catch (error) {
77
      console.log(error)
78
    }
79
  }
80
 
81
  const getKnowledgeRoutes = () => {
6693 stevensc 82
    const childs = [{ label: 'Mi Coach', href: '/my-coach' }]
6632 stevensc 83
    if (linkKnowledgeArea) {
84
      childs.push({
85
        label: 'Área de conocimiento',
86
        href: routeKnowledgeArea,
87
      })
88
    }
89
    return childs
90
  }
91
 
92
  useEffect(() => {
93
    let timer
94
    if (!loading) {
95
      timer = setTimeout(() => {
96
        checkUserImage()
97
        checkSession()
98
      }, 2000)
99
    }
100
    return () => {
101
      clearTimeout(timer)
102
    }
103
  }, [loading])
104
 
105
  useEffect(() => {
106
    if (menu.length > 5) {
107
      setMenuItems(menu.splice(0, 5))
108
      setAditionalItems(menu.splice(menu.length - 5))
109
    }
110
  }, [])
111
 
112
  return (
113
    <>
114
      <div className="header">
115
        <div className="container px-0">
116
          <div className="header__nav">
6694 stevensc 117
            <div className={`header__left ${innerWidth < 992 && 'show'}`}>
6632 stevensc 118
              <a href="/">
119
                <img src={logoForNavbar} alt="Logo" />
120
              </a>
6694 stevensc 121
              <NavSearch />
6632 stevensc 122
            </div>
6694 stevensc 123
            <nav className={`header__right ${innerWidth < 992 && 'd-none'}`}>
6632 stevensc 124
              <ul>
125
                {menuItems.map((item, index) => {
126
                  return (
127
                    <HeaderOptions
128
                      key={index}
129
                      Icon={ICON_OPTIONS[index]}
130
                      title={item.label}
131
                      url={item.href}
132
                      childs={item.childs}
133
                      ajaxRequest={item.ajax}
134
                    />
135
                  )
136
                })}
137
                <HeaderOptions
138
                  Icon={SchoolIcon}
139
                  title="Conocimiento"
140
                  url={routeKnowledgeArea}
141
                  childs={getKnowledgeRoutes()}
142
                />
143
                <HeaderOptions
144
                  Icon={ChatIcon}
145
                  title="Comunicación"
146
                  badgeCount={notificationsCount || messagesCount}
147
                  childs={[
148
                    ...aditionalItems,
149
                    { label: 'Inmail', href: '/inmail', count: messagesCount },
150
                    { label: 'Chat', href: '/chat' },
151
                    {
152
                      label: 'Notificaciones',
153
                      href: '/notifications',
154
                      count: notificationsCount,
155
                    },
156
                  ]}
157
                  isMobile={true}
158
                />
159
                <UserOptions
160
                  image={userImage}
161
                  name={fullName}
162
                  adminUrl={linkAdmin}
163
                  impersonateUrl={linkImpersonate}
164
                  defaultNetwork={defaultNetwork}
165
                  knowledgeAuth={linkKnowledgeArea}
166
                  routeKnowledge={routeKnowledgeArea}
167
                />
168
                {MenuDrawer && (
169
                  <li className="d-md-none">
170
                    <a
171
                      href="/"
172
                      className={'header__option mobile'}
173
                      onClick={(e) => {
174
                        e.preventDefault()
175
                        setShowDrawer(!showDrawer)
176
                      }}
177
                    >
178
                      <MenuIcon />
179
                    </a>
180
                  </li>
181
                )}
182
              </ul>
183
            </nav>
184
          </div>
185
        </div>
186
      </div>
6694 stevensc 187
      <Suspense fallback={null}>
188
        <MenuDrawer
189
          items={[
190
            ...menuItems,
191
            {
192
              label: 'Conocimiento',
193
              href: 'Conocimiento',
194
              img: '/images/navbar/market-place.svg',
195
              ajax: 0,
196
              childs: getKnowledgeRoutes(),
197
            },
198
          ]}
199
          icons={ICON_OPTIONS}
200
          isOpen={showDrawer}
201
          closeDrawer={() => setShowDrawer(false)}
202
        />
203
      </Suspense>
6632 stevensc 204
    </>
205
  )
206
}
207
 
208
export default Header