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