Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4446 | Rev 4448 | 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'
4444 stevensc 16
import { useForm } from 'react-hook-form';
4432 stevensc 17
 
4243 stevensc 18
const ICON_OPTIONS = [
19
  HomeIcon,
4252 stevensc 20
  PeopleIcon,
4243 stevensc 21
  BusinessCenterIcon,
4252 stevensc 22
  GroupsIcon,
23
  SellIcon,
4261 stevensc 24
  CalendarMonthIcon,
4243 stevensc 25
]
26
 
4250 stevensc 27
const Header = ({
28
  menu: menuItems = [],
29
  image = '',
30
  logoForNavbar = '',
31
  fullName,
4251 stevensc 32
  linkAdmin,
33
  linkImpersonate,
4444 stevensc 34
  //companyVars,
35
  //isChatPage,
36
  //routeCheckSession,
4250 stevensc 37
}) => {
4243 stevensc 38
 
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
 
4444 stevensc 44
  const { handleSubmit, register } = useForm()
45
  const handleOnSubmit = (data) => window.location.replace(`/search/entity/user?keyword=${data.keyword}`)
46
 
4243 stevensc 47
  useEffect(() => {
48
    let timer;
49
    if (!loading) {
4250 stevensc 50
      timer = setTimeout(() => checkUserImage(), 1000);
4243 stevensc 51
    }
52
    return () => {
53
      clearTimeout(timer);
54
    };
55
  }, [loading])
56
 
4250 stevensc 57
  const checkUserImage = async () => {
4243 stevensc 58
    setLoading(true);
59
    const session_image = sessionStorage.getItem('user_session_image')
60
    if (session_image) {
4250 stevensc 61
      await setUserImage(session_image)
4243 stevensc 62
      sessionStorage.removeItem('user_session_image')
63
    }
64
    setLoading(false);
65
  }
66
 
67
 
68
  const handleDisplayMobileSearch = () => {
4436 stevensc 69
    if (window.innerWidth < 992) {
4243 stevensc 70
      setShowMobileSearch(true)
71
    }
72
  }
73
 
4263 stevensc 74
  useEffect(() => {
75
    const handleClickOutside = (event) => {
76
      if (searchInput.current && !searchInput.current.contains(event.target)) {
77
        setShowMobileSearch(false)
78
      }
79
    }
80
    document.addEventListener("mousedown", handleClickOutside);
81
 
82
    return () => {
83
      document.removeEventListener("mousedown", handleClickOutside);
84
    };
85
  }, [searchInput]);
86
 
4243 stevensc 87
  return (
88
    <div className='header'>
89
      <div className='container'>
90
        <div className='header__nav'>
91
 
4265 stevensc 92
          <div className='header__left'>
4243 stevensc 93
            <img src={logoForNavbar} alt='Logo' />
4444 stevensc 94
            <form
4243 stevensc 95
              className={`header__search ${showMobileSearch && 'show'}`}
96
              onClick={handleDisplayMobileSearch}
4444 stevensc 97
              onSubmit={handleSubmit(handleOnSubmit)}
4446 stevensc 98
              ref={searchInput}
4243 stevensc 99
            >
100
              <SearchIcon />
101
              <input
102
                type='text'
103
                placeholder='Search'
4446 stevensc 104
                name='keyword'
105
                ref={register}
4243 stevensc 106
              />
4444 stevensc 107
            </form>
4243 stevensc 108
          </div>
109
 
4247 stevensc 110
          <nav className={`header__right ${showMobileSearch && 'd-none'}`}>
111
            <ul>
112
              {menuItems.map((item, index) => {
113
                return (
114
                  <HeaderOptions
115
                    key={index}
116
                    Icon={ICON_OPTIONS[index]}
117
                    title={item.label}
118
                    url={item.href}
4429 stevensc 119
                    childs={item.childs}
4247 stevensc 120
                  />
121
                )
122
              })}
4447 stevensc 123
              <HeaderOptions
124
                Icon={ChatIcon}
125
                title='Comunicación'
126
                url=''
127
                childs={[
128
                  { label: 'Inmail', href: '/inmail' },
129
                  { label: 'Chat', href: '/chat' },
130
                ]}
131
              />
4250 stevensc 132
              <UserOptions
133
                image={userImage}
134
                name={fullName}
135
                adminUrl={linkAdmin}
136
                impersonateUrl={linkImpersonate}
137
              />
4247 stevensc 138
            </ul>
139
          </nav>
4243 stevensc 140
        </div>
141
      </div>
142
    </div>
143
  )
144
}
145
 
146
export default Header