Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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