Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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