Rev 4629 | Rev 4734 | 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 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 UserOptions from './UserOptions'import './Header.scss'import { useForm } from 'react-hook-form';import NotificationsOption from './NotificationsOption';const ICON_OPTIONS = [HomeIcon,PeopleIcon,BusinessCenterIcon,GroupsIcon,SellIcon,]const Header = ({menu,image = '',logoForNavbar = '',fullName,linkAdmin,linkImpersonate,//companyVars,//isChatPage,routeCheckSession,}) => {const [menuItems, setMenuItems] = useState(menu || [])const [aditionalItems, setAditionalItems] = useState([])const [userImage, setUserImage] = useState(image)const [showMobileSearch, setShowMobileSearch] = useState(false)const [loading, setLoading] = useState(false);const searchInput = useRef(null);const { handleSubmit, register } = useForm()const handleOnSubmit = (data) => window.location.replace(`/search/entity/user?keyword=${data.keyword}`)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 < 992) {setShowMobileSearch(true)}}useEffect(() => {let timer;if (!loading) {timer = setTimeout(() => checkUserImage(), 1000);}return () => {clearTimeout(timer);};}, [loading])useEffect(() => {if (menu.length > 5) {setMenuItems(menu.splice(0, 5))setAditionalItems(menu.splice(menu.length - 5))}}, [])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' /><formclassName={`header__search ${showMobileSearch && 'show'}`}onClick={handleDisplayMobileSearch}onSubmit={handleSubmit(handleOnSubmit)}ref={searchInput}><SearchIcon /><inputtype='text'placeholder='Search'name='keyword'ref={register}/></form></div><nav className={`header__right ${showMobileSearch && 'd-none'}`}><ul>{menuItems.map((item, index) => {return (<HeaderOptionskey={index}Icon={ICON_OPTIONS[index]}title={item.label}url={item.href}childs={item.childs}/>)})}<NotificationsOptionIcon={NotificationsIcon}title='Notificaciones'url='/notifications'sessionLink={routeCheckSession}/><HeaderOptionsIcon={ChatIcon}title='Comunicación'url=''childs={[...aditionalItems,{ label: 'Inmail', href: '/inmail' },{ label: 'Chat', href: '/chat' }]}/><UserOptionsimage={userImage}name={fullName}adminUrl={linkAdmin}impersonateUrl={linkImpersonate}/></ul></nav></div></div></div>)}export default Header