Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4430 | Rev 4436 | 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'
4250 stevensc 13
import UserOptions from './UserOptions'
4243 stevensc 14
 
4432 stevensc 15
import './Header.scss'
16
 
4243 stevensc 17
const ICON_OPTIONS = [
18
  HomeIcon,
4252 stevensc 19
  PeopleIcon,
4243 stevensc 20
  BusinessCenterIcon,
4252 stevensc 21
  GroupsIcon,
22
  SellIcon,
4261 stevensc 23
  CalendarMonthIcon,
4243 stevensc 24
]
25
 
4250 stevensc 26
const Header = ({
27
  menu: menuItems = [],
28
  image = '',
29
  logoForNavbar = '',
30
  fullName,
4251 stevensc 31
  linkAdmin,
32
  linkImpersonate,
4250 stevensc 33
  companyVars,
34
  isChatPage,
35
  routeCheckSession,
36
}) => {
4243 stevensc 37
 
38
  const [navbarOpen, setNavbarOpen] = useState(false);
4250 stevensc 39
  const [userImage, setUserImage] = useState(image)
4243 stevensc 40
  const [showMobileSearch, setShowMobileSearch] = useState(false)
41
  const [loading, setLoading] = useState(false);
4263 stevensc 42
  const searchInput = useRef(null);
4243 stevensc 43
 
44
  useEffect(() => {
45
    let timer;
46
    if (!loading) {
4250 stevensc 47
      timer = setTimeout(() => checkUserImage(), 1000);
4243 stevensc 48
    }
49
    return () => {
50
      clearTimeout(timer);
51
    };
52
  }, [loading])
53
 
4250 stevensc 54
  const checkUserImage = async () => {
4243 stevensc 55
    setLoading(true);
56
    const session_image = sessionStorage.getItem('user_session_image')
57
    if (session_image) {
4250 stevensc 58
      await setUserImage(session_image)
4243 stevensc 59
      sessionStorage.removeItem('user_session_image')
60
    }
61
    setLoading(false);
62
  }
63
 
64
 
65
  const handleDisplayMobileSearch = () => {
66
    if (window.innerWidth < 768) {
67
      setShowMobileSearch(true)
68
    }
69
  }
70
 
4263 stevensc 71
  useEffect(() => {
72
    const handleClickOutside = (event) => {
73
      if (searchInput.current && !searchInput.current.contains(event.target)) {
74
        setShowMobileSearch(false)
75
      }
76
    }
77
    document.addEventListener("mousedown", handleClickOutside);
78
 
79
    return () => {
80
      document.removeEventListener("mousedown", handleClickOutside);
81
    };
82
  }, [searchInput]);
83
 
4243 stevensc 84
  return (
85
    <div className='header'>
86
      <div className='container'>
87
        <div className='header__nav'>
88
 
4265 stevensc 89
          <div className='header__left'>
4243 stevensc 90
            <img src={logoForNavbar} alt='Logo' />
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