Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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