Rev 3435 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from 'react'import { Link, useNavigate } from 'react-router-dom'import { useSelector } from 'react-redux'import { AppBar, Box, Container, Toolbar } from '@mui/material'import {Menu,Chat,Home,Sell,School,People,Groups,BusinessCenter,Search} from '@mui/icons-material'import { useNavbar } from '@hooks'import MenuDrawer from './Drawer'import NavigationItem from './navigation-item'import UserOptions from './user-options'import Input from '@components/UI/inputs/Input'export default function Navbar() {const { menuData, totalMessages, totalNotifications } = useNavbar()const {menu = [],image = '',fullName,linkAdmin,linkImpersonate,linkKnowledgeArea,routeKnowledgeArea,routeAbuseReport,urlImpersonate,urlAdmin,defaultNetwork} = menuDataconst [showDrawer, setShowDrawer] = useState(false)const logo = useSelector(({ auth }) => auth.navbar_url)const labels = useSelector(({ intl }) => intl.labels)const navigate = useNavigate()const userAgent = navigator.userAgentconst isIphone = /iPad|iPhone|iPod|Mac/.test(userAgent)const ICON_OPTIONS = [Home,People,BusinessCenter,Groups,Sell,Chat,School]const handleSearch = ({ key, target }) => {if (key !== 'Enter') {return}navigate(`/search/entity/user?keyword=${target.value}`)target.value = ''target.blur()}return (<><AppBarsx={{position: 'sticky',paddingTop: isIphone ? '50px' : '0',boxShadow: 'none',borderBottom: '1px solid var(--border-primary)'}}><Container><Toolbarsx={{gap: 2,minHeight: 'none',paddingLeft: 0,paddingRight: 0}}><Boxsx={{display: 'flex',alignItems: 'center',gap: { xs: 0, md: 2 },flexGrow: 1,'& img': {display: { xs: 'none', md: 'block' },height: { xs: '50px', md: '60px' },width: { xs: '50px', md: '60px' }}}}><Link to='/'><img src={logo} alt='Logo' /></Link><Inputplaceholder={labels.search}icon={<Search />}variant='search'onKeyDown={handleSearch}/></Box><Boxsx={{alignItems: 'center',display: 'flex','& > ul': {display: 'flex',flex: 1,justifyContent: 'space-evenly',gap: { xs: 1, md: 2 },'& > li': {position: 'relative',display: 'flex','&:not(:nth-last-child(-n + 4))': {display: { xs: 'none', md: 'flex' }},'&:nth-last-child(-n + 1)': {display: { xs: 'flex', md: 'none' }}}}}}><ul>{menu.map(({ label, href, childs, ajax }, index) => {const totalCount = totalNotifications + totalMessagesconst Icon = ICON_OPTIONS[index]return (<NavigationItemkey={index}url={href}childs={childs}count={label === 'Comunicación' ? totalCount : 0}><Icon />{label}</NavigationItem>)})}<UserOptionsimage={image}name={fullName}adminUrl={linkAdmin}impersonateUrl={linkImpersonate}defaultNetwork={defaultNetwork}knowledgeAuth={linkKnowledgeArea}routeKnowledge={routeKnowledgeArea}routeAdmin={urlAdmin}routeImpersonate={urlImpersonate}routeAbuseReport={routeAbuseReport}/><NavigationItem onClick={() => setShowDrawer(!showDrawer)}><Menu /></NavigationItem></ul></Box></Toolbar></Container></AppBar><MenuDraweritems={menu}icons={ICON_OPTIONS}isOpen={showDrawer}closeDrawer={() => setShowDrawer(false)}/></>)}