Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6698 | Rev 6700 | 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
 
6699 stevensc 6
const results = {
7
  menu: [
8
    {
9
      label: 'Inicio',
10
      href: 'dashboard',
11
      img: '/images/navbar/home.svg',
12
      ajax: 0,
13
      childs: [],
14
    },
15
    {
16
      label: 'Perfil',
17
      href: 'profile',
18
      img: '/images/navbar/perfil.svg',
19
      ajax: 0,
20
      childs: [
21
        {
22
          label: 'Conexiones',
23
          href: 'connection',
24
          childs: [
25
            {
26
              label: 'Mis Conexiones',
27
              href: 'connection/my-connections',
28
            },
29
            {
30
              label: 'Invitaciones enviadas',
31
              href: 'connection/invitations-sent',
32
            },
33
            {
34
              label: 'Invitaciones recibidas',
35
              href: 'connection/invitations-received',
36
            },
37
            {
38
              label: 'Personas que quizás conozcas',
39
              href: 'connection/people-you-may-know',
40
            },
41
            {
42
              label: 'Personas bloqueadas',
43
              href: 'connection/people-blocked',
44
            },
45
          ],
46
        },
47
        {
48
          label: 'Mis perfiles',
49
          href: 'profile/my-profiles',
50
          childs: [],
51
        },
52
        {
53
          label: 'Empleos',
54
          href: 'job',
55
          childs: [
56
            {
57
              label: 'Que he aplicado',
58
              href: 'job/applied-jobs',
59
            },
60
            {
61
              label: 'Guardados',
62
              href: 'job/saved-jobs',
63
            },
64
          ],
65
        },
66
        {
67
          label: 'Quién ha visto mi perfil',
68
          href: 'profile/people-viewed-profile',
69
          childs: [],
70
        },
71
      ],
72
    },
73
    {
74
      label: 'Empresas',
75
      href: 'company',
76
      img: '/images/navbar/empresa.svg',
77
      ajax: 0,
78
      childs: [
79
        {
80
          label: 'Mis empresas',
81
          href: 'company/my-companies',
82
          childs: [],
83
        },
84
        {
85
          label: 'Empresas que sigo',
86
          href: 'company/following-companies',
87
          childs: [],
88
        },
89
        {
90
          label: 'Empresas donde trabajo',
91
          href: 'company/i-work-with',
92
          childs: [],
93
        },
94
        {
95
          label: 'Solicitudes enviadas',
96
          href: 'company/requests-sent',
97
          childs: [],
98
        },
99
        {
100
          label: 'Invitaciones recibidas',
101
          href: 'company/invitations-received',
102
          childs: [],
103
        },
104
      ],
105
    },
106
    {
107
      label: 'Grupos',
108
      href: 'group',
109
      img: '/images/navbar/grupos.svg',
110
      ajax: 0,
111
      childs: [
112
        {
113
          label: 'Mis Grupos',
114
          href: 'group/my-groups',
115
          childs: [],
116
        },
117
        {
118
          label: 'Grupos unidos',
119
          href: 'group/joined-groups',
120
          childs: [],
121
        },
122
        {
123
          label: 'Solicitudes enviadas',
124
          href: 'group/requests-sent',
125
          childs: [],
126
        },
127
        {
128
          label: 'Invitaciones recibidas',
129
          href: 'group/invitations-received',
130
          childs: [],
131
        },
132
      ],
133
    },
134
    {
135
      label: 'Tienda',
136
      href: 'marketplace',
137
      img: '/images/navbar/market-place.svg',
138
      ajax: 0,
139
      childs: [],
140
    },
141
    {
142
      label: 'Calendario',
143
      href: 'calendar',
144
      img: '/images/navbar/calendar.svg',
145
      ajax: 0,
146
      childs: [],
147
    },
148
  ],
149
  isChatPage: false,
150
  routeCheckSession: '/check-session',
151
  linkAdmin: false,
152
  linkImpersonate: true,
153
  image:
154
    '/storage/type/user/code/e85129fa-18eb-4149-8640-fea9ae916cdc/filename/user-profile-63d3c94c2b1a4.png/',
155
  fullName: 'Santiago Olivera',
156
  country: 'México',
157
  visits: '64',
158
  connections: 6,
159
  logoForNavbar: 'https://dev.leaderslinked.com/storage-network/type/navbar',
160
  defaultNetwork: 'y',
161
  linkKnowledgeArea: true,
162
  routeKnowledgeArea: '/knowledge-area',
163
  linkMyCoach: true,
164
  routeMyCoach: '/my-coach',
165
}
166
 
6694 stevensc 167
const Header = ({ theme = 'default' }) => {
168
  const [backendVars, setBackendVars] = useState(null)
6699 stevensc 169
  const [notificationsCount, setNotificationsCount] = useState(0)
170
  const [messagesCount, setMessagesCount] = useState(0)
6694 stevensc 171
  const [userImage, setUserImage] = useState('')
172
  const [loading, setLoading] = useState(false)
173
 
174
  const checkUserImage = () => {
175
    const session_image = sessionStorage.getItem('user_session_image')
176
 
177
    if (!session_image) {
178
      return
179
    }
180
 
181
    setUserImage(session_image)
182
    sessionStorage.removeItem('user_session_image')
183
  }
184
 
185
  const checkSession = async () => {
186
    try {
187
      setLoading(true)
188
      const { data: response } = await axios.get(backendVars?.routeCheckSession)
189
      const { total_messages, total_notifications } = response.data
190
 
191
      if (response.success) {
192
        setMessagesCount(Number(total_messages))
193
        setNotificationsCount(Number(total_notifications))
194
      }
195
      setLoading(false)
196
    } catch (error) {
197
      console.log(error)
198
    }
199
  }
200
 
201
  useEffect(() => {
202
    getBackendVars('/helpers/menu')
6699 stevensc 203
      .then((data) => {
6694 stevensc 204
        const knowledgeRoutes = {
205
          label: 'Conocimiento',
206
          href: '/knowledge',
207
          img: '',
6699 stevensc 208
          childs: [],
6694 stevensc 209
          ajax: 0,
210
        }
211
 
6699 stevensc 212
        const comunicationRoutes = {
213
          label: 'Comunicación',
214
          href: '/comunication',
215
          img: '',
216
          childs: [
217
            { label: 'Calendario', href: '/calendar' },
218
            { label: 'Inmail', href: '/inmail', count: messagesCount },
219
            { label: 'Chat', href: '/chat' },
220
            {
221
              label: 'Notificaciones',
222
              href: '/notifications',
223
              count: notificationsCount,
224
            },
225
          ],
226
          ajax: 0,
227
        }
6694 stevensc 228
 
6699 stevensc 229
        const menuItems = [...data.menu, knowledgeRoutes, comunicationRoutes]
230
 
231
        if (results.linkKnowledgeArea) {
232
          knowledgeRoutes.childs.push({
233
            label: 'Área de conocimiento',
234
            href: results.routeKnowledgeArea,
235
          })
236
        }
237
 
238
        if (results.linkMyCoach) {
239
          knowledgeRoutes.childs.push({ label: 'Mi Coach', href: '/my-coach' })
240
        }
241
 
242
        setUserImage(data.image)
243
        setBackendVars({ ...data, menu: menuItems })
6694 stevensc 244
      })
245
      .catch((err) => {
246
        console.log(err)
247
        throw new Error(err)
248
      })
249
  }, [])
250
 
251
  useEffect(() => {
252
    let timer
253
    if (!loading) {
254
      timer = setTimeout(() => {
255
        checkUserImage()
256
        checkSession()
257
      }, 2000)
258
    }
259
    return () => {
260
      clearTimeout(timer)
261
    }
262
  }, [loading])
263
 
264
  switch (theme) {
265
    case 'default':
266
      return (
267
        <DefaultNavbar
268
          menu={backendVars?.menu}
269
          image={userImage}
270
          logo={backendVars?.logoForNavbar}
271
          name={backendVars?.fullName}
272
          linkAdmin={backendVars?.linkAdmin}
273
          linkImpersonate={backendVars?.linkImpersonate}
274
        />
275
      )
276
    default:
277
      return <DefaultNavbar />
278
  }
279
}
280
 
281
export default Header