Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4429 | Rev 4432 | 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 */
4263 stevensc 2
import React, { useEffect, useRef, useState } from 'react'
4243 stevensc 3
import SearchIcon from '@mui/icons-material/Search'
4
import HomeIcon from '@mui/icons-material/Home'
4252 stevensc 5
import BusinessCenterIcon from '@mui/icons-material/BusinessCenter'
4265 stevensc 6
import CalendarMonthIcon from '@mui/icons-material/CalendarMonth';
4252 stevensc 7
import SellIcon from '@mui/icons-material/Sell';
8
import PeopleIcon from '@mui/icons-material/People';
9
import GroupsIcon from '@mui/icons-material/Groups';
10
import HeaderOptions from './HeaderOptions'
4243 stevensc 11
import ChatIcon from '@mui/icons-material/Chat'
12
import NotificationsIcon from '@mui/icons-material/Notifications'
4247 stevensc 13
import './Header.scss'
4250 stevensc 14
import UserOptions from './UserOptions'
4243 stevensc 15
 
16
const ICON_OPTIONS = [
17
  HomeIcon,
4252 stevensc 18
  PeopleIcon,
4243 stevensc 19
  BusinessCenterIcon,
4252 stevensc 20
  GroupsIcon,
21
  SellIcon,
4261 stevensc 22
  CalendarMonthIcon,
4243 stevensc 23
]
24
 
4250 stevensc 25
const Header = ({
26
  menu: menuItems = [],
27
  image = '',
28
  logoForNavbar = '',
29
  fullName,
4251 stevensc 30
  linkAdmin,
31
  linkImpersonate,
4250 stevensc 32
  companyVars,
33
  isChatPage,
34
  routeCheckSession,
35
}) => {
4243 stevensc 36
 
37
  const [navbarOpen, setNavbarOpen] = useState(false);
4250 stevensc 38
  const [userImage, setUserImage] = useState(image)
4243 stevensc 39
  const [showMobileSearch, setShowMobileSearch] = useState(false)
40
  const [loading, setLoading] = useState(false);
4263 stevensc 41
  const searchInput = useRef(null);
4243 stevensc 42
 
43
  useEffect(() => {
44
    let timer;
45
    if (!loading) {
4250 stevensc 46
      timer = setTimeout(() => checkUserImage(), 1000);
4243 stevensc 47
    }
48
    return () => {
49
      clearTimeout(timer);
50
    };
51
  }, [loading])
52
 
4250 stevensc 53
  const checkUserImage = async () => {
4243 stevensc 54
    setLoading(true);
55
    const session_image = sessionStorage.getItem('user_session_image')
56
    if (session_image) {
4250 stevensc 57
      await setUserImage(session_image)
4243 stevensc 58
      sessionStorage.removeItem('user_session_image')
59
    }
60
    setLoading(false);
61
  }
62
 
63
 
64
  const handleDisplayMobileSearch = () => {
65
    if (window.innerWidth < 768) {
66
      setShowMobileSearch(true)
67
    }
68
  }
69
 
4263 stevensc 70
  useEffect(() => {
71
    const handleClickOutside = (event) => {
72
      if (searchInput.current && !searchInput.current.contains(event.target)) {
73
        setShowMobileSearch(false)
74
      }
75
    }
76
    document.addEventListener("mousedown", handleClickOutside);
77
 
78
    return () => {
79
      document.removeEventListener("mousedown", handleClickOutside);
80
    };
81
  }, [searchInput]);
82
 
4243 stevensc 83
  return (
84
    <div className='header'>
85
      <div className='container'>
86
        <div className='header__nav'>
87
 
4265 stevensc 88
          <div className='header__left'>
4243 stevensc 89
            <img src={logoForNavbar} alt='Logo' />
90
            <div
91
              className={`header__search ${showMobileSearch && 'show'}`}
92
              onClick={handleDisplayMobileSearch}
93
            >
94
              <SearchIcon />
95
              <input
96
                type='text'
97
                placeholder='Search'
4263 stevensc 98
                ref={searchInput}
4243 stevensc 99
              />
100
            </div>
101
          </div>
102
 
4247 stevensc 103
          <nav className={`header__right ${showMobileSearch && 'd-none'}`}>
104
            <ul>
105
              {menuItems.map((item, index) => {
106
                return (
107
                  <HeaderOptions
108
                    key={index}
109
                    Icon={ICON_OPTIONS[index]}
110
                    title={item.label}
111
                    url={item.href}
4429 stevensc 112
                    childs={item.childs}
4247 stevensc 113
                  />
114
                )
115
              })}
4250 stevensc 116
              <UserOptions
117
                image={userImage}
118
                name={fullName}
119
                adminUrl={linkAdmin}
120
                impersonateUrl={linkImpersonate}
121
              />
4247 stevensc 122
            </ul>
123
          </nav>
4243 stevensc 124
        </div>
125
      </div>
126
    </div>
127
  )
128
}
129
 
130
export default Header