Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4789 | Rev 4953 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

/* eslint-disable react/prop-types */
import * as React from 'react';
import Box from '@mui/material/Box';
import Drawer from '@mui/material/Drawer';
import List from '@mui/material/List';
import ListItem from '@mui/material/ListItem';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import Accordion from '@mui/material/Accordion';
import AccordionSummary from '@mui/material/AccordionSummary';
import AccordionDetails from '@mui/material/AccordionDetails';
import Link from '@mui/material/Link';
import Typography from '@mui/material/Typography';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';

function MenuDrawer({ isOpen = false, items = [], icons = [], closeDrawer = () => { } }) {

    return (
        <Drawer anchor='right' open={isOpen} onClose={closeDrawer}>
            <Box sx={{ width: 250, padding: '1rem' }} role="presentation">
                <List>
                    {items.map((navItem, index) => {
                        return (
                            <MenuDrawer.Item
                                key={index}
                                Icon={icons[index]}
                                title={navItem.label}
                                url={navItem.href}
                                childs={navItem.childs}
                            />
                        )
                    })}
                </List>
            </Box>

        </Drawer>
    )
}

const Item = ({ Icon, title, url, childs = [] }) => {
    return (
        <ListItem disablePadding>
            {!childs.length
                ?
                <Link href={url} display='flex' gap='.5rem'>
                    <ListItemIcon>
                        {Icon && <Icon />}
                    </ListItemIcon>
                    <ListItemText primary={title} />
                </Link>
                :
                <Accordion sx={{ border: 'none', width: '100%', boxShadow: 'none' }}>
                    <AccordionSummary
                        expandIcon={<ExpandMoreIcon />}
                        sx={{ minHeight: 'auto !important', margin: '0', padding: 0 }}
                    >
                        {Icon && <Icon />}
                        <Typography margin='0'>{title}</Typography>
                    </AccordionSummary>
                    <AccordionDetails sx={{ padding: 0 }}>
                        {childs.map((child, index) => {
                            if (child.childs?.length) {
                                return (
                                    <Accordion key={index} sx={{ border: 'none', width: '100%', boxShadow: 'none' }}>
                                        <AccordionSummary
                                            expandIcon={<ExpandMoreIcon />}
                                            sx={{ minHeight: 'auto !important', margin: '0'}}
                                        >
                                            <Typography margin='0'>{child.label}</Typography>
                                        </AccordionSummary>
                                        <AccordionDetails sx={{ padding: 0 }}>
                                            {child.childs.map((levelThree, index) => {
                                                return (
                                                    <Link key={index} href={levelThree.href}>
                                                        <ListItemText primary={levelThree.label} />
                                                    </Link>
                                                )
                                            })}
                                        </AccordionDetails>
                                    </Accordion>
                                )
                            }
                            return (
                                <Link key={index} href={child.href}>
                                    <ListItemText primary={child.label} />
                                </Link>
                            )
                        })}
                    </AccordionDetails>
                </Accordion>
            }

        </ListItem>
    )
}

MenuDrawer.Item = Item

export default MenuDrawer