Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3436 stevensc 1
import React, { useState } from 'react';
3435 stevensc 2
import { Link, useNavigate } from 'react-router-dom';
3
import { useSelector } from 'react-redux';
4
import { AppBar, Box, Container, Toolbar } from '@mui/material';
3694 stevensc 5
import Menu from '@mui/icons-material/Menu';
6
import Chat from '@mui/icons-material/Chat';
7
import Home from '@mui/icons-material/Home';
8
import Sell from '@mui/icons-material/Sell';
9
import School from '@mui/icons-material/School';
10
import People from '@mui/icons-material/People';
11
import Groups from '@mui/icons-material/Groups';
12
import BusinessCenter from '@mui/icons-material/BusinessCenter';
13
import Search from '@mui/icons-material/Search';
3201 stevensc 14
 
3435 stevensc 15
import { useNavbar } from '@hooks';
3201 stevensc 16
 
3435 stevensc 17
import MenuDrawer from './Drawer';
18
import NavigationItem from './navigation-item';
19
import UserOptions from './user-options';
20
import Input from '@components/UI/inputs/Input';
3201 stevensc 21
 
22
export default function Navbar() {
3435 stevensc 23
  const { menuData } = useNavbar();
3201 stevensc 24
 
25
  const {
26
    menu = [],
27
    image = '',
28
    fullName,
29
    linkAdmin,
30
    linkImpersonate,
31
    linkKnowledgeArea,
32
    routeKnowledgeArea,
33
    routeAbuseReport,
34
    urlImpersonate,
35
    urlAdmin,
36
    defaultNetwork
3435 stevensc 37
  } = menuData;
3201 stevensc 38
 
3693 stevensc 39
  const [showMenu, setShowMenu] = useState(false);
3435 stevensc 40
  const logo = useSelector(({ auth }) => auth.navbar_url);
41
  const labels = useSelector(({ intl }) => intl.labels);
42
  const navigate = useNavigate();
43
  const userAgent = navigator.userAgent;
44
  const isIphone = /iPad|iPhone|iPod|Mac/.test(userAgent);
3201 stevensc 45
 
3435 stevensc 46
  const ICON_OPTIONS = [Home, People, BusinessCenter, Groups, Sell, Chat, School];
3201 stevensc 47
 
3693 stevensc 48
  const showDrawer = () => setShowMenu(true);
49
  const hideDrawer = () => setShowMenu(false);
50
 
3201 stevensc 51
  const handleSearch = ({ key, target }) => {
52
    if (key !== 'Enter') {
3435 stevensc 53
      return;
3201 stevensc 54
    }
55
 
3435 stevensc 56
    navigate(`/search/entity/user?keyword=${target.value}`);
57
    target.value = '';
58
    target.blur();
59
  };
3201 stevensc 60
 
61
  return (
62
    <>
63
      <AppBar
64
        sx={{
65
          position: 'sticky',
66
          paddingTop: isIphone ? '50px' : '0',
67
          boxShadow: 'none',
68
          borderBottom: '1px solid var(--border-primary)'
69
        }}
70
      >
71
        <Container>
72
          <Toolbar
73
            sx={{
74
              gap: 2,
75
              minHeight: 'none',
76
              paddingLeft: 0,
77
              paddingRight: 0
78
            }}
79
          >
80
            <Box
81
              sx={{
82
                display: 'flex',
83
                alignItems: 'center',
84
                gap: { xs: 0, md: 2 },
85
                flexGrow: 1,
86
                '& img': {
87
                  display: { xs: 'none', md: 'block' },
88
                  height: { xs: '50px', md: '60px' },
89
                  width: { xs: '50px', md: '60px' }
90
                }
91
              }}
92
            >
93
              <Link to='/'>
94
                <img src={logo} alt='Logo' />
95
              </Link>
96
              <Input
97
                placeholder={labels.search}
98
                icon={<Search />}
99
                variant='search'
100
                onKeyDown={handleSearch}
101
              />
102
            </Box>
103
 
104
            <Box
3701 stevensc 105
              component='ul'
3201 stevensc 106
              sx={{
107
                display: 'flex',
3701 stevensc 108
                flex: 1,
109
                justifyContent: 'space-evenly',
110
                gap: { xs: 1, md: 2 },
111
                listStyle: 'none',
112
                padding: 0,
113
                margin: 0,
114
                alignItems: 'center'
3201 stevensc 115
              }}
116
            >
3701 stevensc 117
              {menu.map(({ label, href, childs }, index) => {
118
                const Icon = ICON_OPTIONS[index];
3201 stevensc 119
 
3701 stevensc 120
                return (
121
                  <Box
122
                    component='li'
123
                    key={index}
124
                    sx={{
125
                      display: { xs: 'none', md: 'flex' }
126
                    }}
127
                  >
128
                    <NavigationItem url={href} childs={childs}>
3201 stevensc 129
                      <Icon />
130
                      {label}
131
                    </NavigationItem>
3701 stevensc 132
                  </Box>
133
                );
134
              })}
3201 stevensc 135
 
3701 stevensc 136
              <UserOptions
137
                image={image}
138
                name={fullName}
139
                adminUrl={linkAdmin}
140
                impersonateUrl={linkImpersonate}
141
                defaultNetwork={defaultNetwork}
142
                knowledgeAuth={linkKnowledgeArea}
143
                routeKnowledge={routeKnowledgeArea}
144
                routeAdmin={urlAdmin}
145
                routeImpersonate={urlImpersonate}
146
                routeAbuseReport={routeAbuseReport}
147
              />
3201 stevensc 148
 
3701 stevensc 149
              <Box
150
                component='li'
151
                sx={{
152
                  display: { xs: 'flex', md: 'none' }
153
                }}
154
              >
3693 stevensc 155
                <NavigationItem onClick={showDrawer}>
3201 stevensc 156
                  <Menu />
157
                </NavigationItem>
3701 stevensc 158
              </Box>
3201 stevensc 159
            </Box>
160
          </Toolbar>
161
        </Container>
162
      </AppBar>
163
 
3693 stevensc 164
      <MenuDrawer items={menu} show={showMenu} onClose={hideDrawer} />
3201 stevensc 165
    </>
3435 stevensc 166
  );
3201 stevensc 167
}