Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4264 | Rev 4430 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

/* eslint-disable react/prop-types */
import React, { useEffect, useRef, useState } from 'react'
import SearchIcon from '@mui/icons-material/Search'
import HomeIcon from '@mui/icons-material/Home'
import BusinessCenterIcon from '@mui/icons-material/BusinessCenter'
import CalendarMonthIcon from '@mui/icons-material/CalendarMonth';
import SellIcon from '@mui/icons-material/Sell';
import PeopleIcon from '@mui/icons-material/People';
import GroupsIcon from '@mui/icons-material/Groups';
import HeaderOptions from './HeaderOptions'
import ChatIcon from '@mui/icons-material/Chat'
import NotificationsIcon from '@mui/icons-material/Notifications'
import './Header.scss'
import UserOptions from './UserOptions'

const ICON_OPTIONS = [
  HomeIcon,
  PeopleIcon,
  BusinessCenterIcon,
  GroupsIcon,
  SellIcon,
  CalendarMonthIcon,
]

const Header = ({
  menu: menuItems = [],
  image = '',
  logoForNavbar = '',
  fullName,
  linkAdmin,
  linkImpersonate,
  companyVars,
  isChatPage,
  routeCheckSession,
}) => {

  const [navbarOpen, setNavbarOpen] = useState(false);
  const [userImage, setUserImage] = useState(image)
  const [showMobileSearch, setShowMobileSearch] = useState(false)
  const [loading, setLoading] = useState(false);
  const searchInput = useRef(null);

  useEffect(() => {
    let timer;
    if (!loading) {
      timer = setTimeout(() => checkUserImage(), 1000);
    }
    return () => {
      clearTimeout(timer);
    };
  }, [loading])

  const checkUserImage = async () => {
    setLoading(true);
    const session_image = sessionStorage.getItem('user_session_image')
    if (session_image) {
      await setUserImage(session_image)
      sessionStorage.removeItem('user_session_image')
    }
    setLoading(false);
  }


  const handleDisplayMobileSearch = () => {
    if (window.innerWidth < 768) {
      setShowMobileSearch(true)
    }
  }

  useEffect(() => {
    const handleClickOutside = (event) => {
      if (searchInput.current && !searchInput.current.contains(event.target)) {
        setShowMobileSearch(false)
      }
    }
    document.addEventListener("mousedown", handleClickOutside);

    return () => {
      document.removeEventListener("mousedown", handleClickOutside);
    };
  }, [searchInput]);

  return (
    <div className='header'>
      <div className='container'>
        <div className='header__nav'>

          <div className='header__left'>
            <img src={logoForNavbar} alt='Logo' />

            <div
              className={`header__search ${showMobileSearch && 'show'}`}
              onClick={handleDisplayMobileSearch}
            >
              <SearchIcon />
              <input
                type='text'
                placeholder='Search'
                ref={searchInput}
              />
            </div>
          </div>

          <nav className={`header__right ${showMobileSearch && 'd-none'}`}>
            <ul>
              {menuItems.map((item, index) => {
                return (
                  <HeaderOptions
                    key={index}
                    Icon={ICON_OPTIONS[index]}
                    title={item.label}
                    url={item.href}
                  />
                )
              })}
              <UserOptions
                image={userImage}
                name={fullName}
                adminUrl={linkAdmin}
                impersonateUrl={linkImpersonate}
              />
            </ul>
          </nav>
        </div>
      </div>
    </div>
  )
}

export default Header