Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
4243 stevensc 1
/* eslint-disable react/prop-types */
2
import React, { useEffect, useState } from 'react'
3
import SearchIcon from '@mui/icons-material/Search'
4
import HomeIcon from '@mui/icons-material/Home'
5
import SupervisorAccountIcon from '@mui/icons-material/SupervisorAccount'
6
import BusinessCenterIcon from '@mui/icons-material/BusinessCenter'
7
import ChatIcon from '@mui/icons-material/Chat'
8
import NotificationsIcon from '@mui/icons-material/Notifications'
4248 stevensc 9
import CalendarViewDayIcon from '@mui/icons-material/CalendarViewDay'
4243 stevensc 10
import HeaderOptions from './HeaderOptions'
4247 stevensc 11
import './Header.scss'
4250 stevensc 12
import UserOptions from './UserOptions'
4243 stevensc 13
 
14
const ICON_OPTIONS = [
15
  HomeIcon,
16
  SupervisorAccountIcon,
17
  BusinessCenterIcon,
18
  ChatIcon,
4248 stevensc 19
  NotificationsIcon,
20
  CalendarViewDayIcon
4243 stevensc 21
]
22
 
4250 stevensc 23
const Header = ({
24
  menu: menuItems = [],
25
  image = '',
26
  logoForNavbar = '',
27
  fullName,
28
  companyVars,
29
  isChatPage,
30
  linkAdmin,
31
  linkImpersonate,
32
  routeCheckSession,
33
}) => {
4243 stevensc 34
 
35
  const [navbarOpen, setNavbarOpen] = useState(false);
4250 stevensc 36
  const [userImage, setUserImage] = useState(image)
4243 stevensc 37
  const [showMobileSearch, setShowMobileSearch] = useState(false)
38
  const [loading, setLoading] = useState(false);
39
 
40
  useEffect(() => {
41
    let timer;
42
    if (!loading) {
4250 stevensc 43
      timer = setTimeout(() => checkUserImage(), 1000);
4243 stevensc 44
    }
45
    return () => {
46
      clearTimeout(timer);
47
    };
48
  }, [loading])
49
 
4250 stevensc 50
  const checkUserImage = async () => {
4243 stevensc 51
    setLoading(true);
52
    const session_image = sessionStorage.getItem('user_session_image')
53
    if (session_image) {
4250 stevensc 54
      await setUserImage(session_image)
4243 stevensc 55
      sessionStorage.removeItem('user_session_image')
56
    }
57
    setLoading(false);
58
  }
59
 
60
 
61
  const handleDisplayMobileSearch = () => {
62
    if (window.innerWidth < 768) {
63
      setShowMobileSearch(true)
64
    }
65
  }
66
 
67
  return (
68
    <div className='header'>
69
      <div className='container'>
70
        <div className='header__nav'>
71
 
72
          <div className='header__left'>
73
            <img src={logoForNavbar} alt='Logo' />
74
 
75
            <div
76
              className={`header__search ${showMobileSearch && 'show'}`}
77
              onClick={handleDisplayMobileSearch}
78
            >
79
              <SearchIcon />
80
              <input
81
                type='text'
82
                placeholder='Search'
83
              />
84
            </div>
85
          </div>
86
 
4247 stevensc 87
          <nav className={`header__right ${showMobileSearch && 'd-none'}`}>
88
            <ul>
89
              {menuItems.map((item, index) => {
90
                return (
91
                  <HeaderOptions
92
                    key={index}
93
                    Icon={ICON_OPTIONS[index]}
94
                    title={item.label}
95
                    url={item.href}
96
                  />
97
                )
98
              })}
4250 stevensc 99
              <UserOptions
100
                image={userImage}
101
                name={fullName}
102
                adminUrl={linkAdmin}
103
                impersonateUrl={linkImpersonate}
104
              />
4247 stevensc 105
            </ul>
106
          </nav>
4243 stevensc 107
        </div>
108
      </div>
109
    </div>
110
  )
111
}
112
 
113
export default Header