Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6248 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
4779 stevensc 1
/* eslint-disable react/prop-types */
4953 stevensc 2
import * as React from 'react'
3
import Box from '@mui/material/Box'
4
import Drawer from '@mui/material/Drawer'
5
import List from '@mui/material/List'
6
import ListItem from '@mui/material/ListItem'
7
import ListItemIcon from '@mui/material/ListItemIcon'
8
import ListItemText from '@mui/material/ListItemText'
9
import Accordion from '@mui/material/Accordion'
10
import AccordionSummary from '@mui/material/AccordionSummary'
11
import AccordionDetails from '@mui/material/AccordionDetails'
12
import Link from '@mui/material/Link'
13
import Typography from '@mui/material/Typography'
14
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
6248 stevensc 15
import AccountTreeRoundedIcon from '@mui/icons-material/AccountTreeRounded'
16
import { axios } from '../../../utils'
4779 stevensc 17
 
6248 stevensc 18
function MenuDrawer({
19
  isOpen = false,
20
  items = [],
21
  icons = [],
22
  closeDrawer = () => {},
23
}) {
24
  return (
25
    <Drawer anchor="right" open={isOpen} onClose={closeDrawer}>
26
      <Box sx={{ width: 250 }} role="presentation">
27
        <List>
28
          {items.map((navItem, index) => {
29
            return (
30
              <MenuDrawer.Item
31
                key={index}
32
                Icon={icons[index]}
33
                title={navItem.label}
34
                url={navItem.href}
35
                childs={navItem.childs}
36
                ajaxRequest={navItem.ajax}
37
              />
38
            )
39
          })}
40
        </List>
41
      </Box>
42
    </Drawer>
43
  )
44
}
4779 stevensc 45
 
6249 stevensc 46
const Item = ({ Icon, title, url, childs = [], ajaxRequest }) => {
6248 stevensc 47
  const handleAjaxRequest = async () => {
48
    try {
49
      const { data } = await axios.get(url)
50
      if (data.success) {
51
        window.open(data.data, 'backend')
52
      }
53
    } catch (error) {
54
      console.log('>>: error > ', error)
55
    }
56
  }
4779 stevensc 57
 
6248 stevensc 58
  return (
59
    <ListItem disablePadding>
60
      {!childs.length ? (
61
        <Link
62
          href={`/${url}`}
63
          display="flex"
64
          gap=".5rem"
65
          paddingLeft="1rem"
66
          onClick={(e) => {
6249 stevensc 67
            if (ajaxRequest) {
6248 stevensc 68
              e.preventDefault()
69
              handleAjaxRequest()
70
            }
71
          }}
72
        >
73
          <ListItemIcon>{Icon && <Icon />}</ListItemIcon>
74
          <ListItemText primary={title} />
75
        </Link>
76
      ) : (
77
        <Accordion sx={{ border: 'none', width: '100%', boxShadow: 'none' }}>
78
          <AccordionSummary
79
            expandIcon={<ExpandMoreIcon />}
80
            sx={{
81
              minHeight: 'auto !important',
82
              margin: '0',
83
              padding: 0,
84
              paddingLeft: '1rem',
85
            }}
86
          >
87
            {Icon && <Icon />}
88
            <Typography margin="0">{title}</Typography>
89
          </AccordionSummary>
90
          <AccordionDetails sx={{ padding: 0 }}>
91
            {childs.map((child, index) => {
92
              if (child.childs?.length) {
93
                return (
94
                  <Accordion
95
                    key={index}
96
                    sx={{
97
                      border: 'none',
98
                      width: '100%',
99
                      boxShadow: 'none',
100
                      background: 'lightgray',
101
                    }}
102
                  >
4779 stevensc 103
                    <AccordionSummary
6248 stevensc 104
                      expandIcon={<ExpandMoreIcon />}
105
                      sx={{ minHeight: 'auto !important', margin: '0' }}
4784 stevensc 106
                    >
6248 stevensc 107
                      <AccountTreeRoundedIcon />
108
                      <Typography margin="0">{child.label}</Typography>
4784 stevensc 109
                    </AccordionSummary>
6248 stevensc 110
                    <AccordionDetails sx={{ padding: '0 16px' }}>
111
                      {child.childs.map((levelThree, index) => {
112
                        return (
113
                          <Link key={index} href={`/${levelThree.href}`}>
114
                            <ListItemText primary={levelThree.label} />
115
                          </Link>
116
                        )
117
                      })}
4779 stevensc 118
                    </AccordionDetails>
6248 stevensc 119
                  </Accordion>
120
                )
121
              }
122
              return (
123
                <Link
124
                  key={index}
125
                  href={child.href[0] === '/' ? child.href : `/${child.href}`}
126
                >
127
                  <ListItemText
128
                    primary={child.label}
129
                    sx={{ padding: '0 16px' }}
130
                  />
131
                </Link>
132
              )
133
            })}
134
          </AccordionDetails>
135
        </Accordion>
136
      )}
137
    </ListItem>
138
  )
4779 stevensc 139
}
140
 
141
MenuDrawer.Item = Item
142
 
6248 stevensc 143
export default MenuDrawer