Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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