Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4265 | Rev 4430 | 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
 
91
            <div
92
              className={`header__search ${showMobileSearch && 'show'}`}
93
              onClick={handleDisplayMobileSearch}
94
            >
95
              <SearchIcon />
96
              <input
97
                type='text'
98
                placeholder='Search'
4263 stevensc 99
                ref={searchInput}
4243 stevensc 100
              />
101
            </div>
102
          </div>
103
 
4247 stevensc 104
          <nav className={`header__right ${showMobileSearch && 'd-none'}`}>
105
            <ul>
106
              {menuItems.map((item, index) => {
107
                return (
108
                  <HeaderOptions
109
                    key={index}
110
                    Icon={ICON_OPTIONS[index]}
111
                    title={item.label}
112
                    url={item.href}
4429 stevensc 113
                    childs={item.childs}
4247 stevensc 114
                  />
115
                )
116
              })}
4250 stevensc 117
              <UserOptions
118
                image={userImage}
119
                name={fullName}
120
                adminUrl={linkAdmin}
121
                impersonateUrl={linkImpersonate}
122
              />
4247 stevensc 123
            </ul>
124
          </nav>
4243 stevensc 125
        </div>
126
      </div>
127
    </div>
128
  )
129
}
130
 
131
export default Header