forked from RiseUP/riseup-squad23
132 lines
4.2 KiB
JavaScript
132 lines
4.2 KiB
JavaScript
import React, { useState } from 'react';
|
|
// ADIÇÃO 1: Importar o arquivo JSON com os itens do menu
|
|
import menuItems from '../data/sidebar-items.json'; // <-- ATENÇÃO: ajuste o caminho para o seu arquivo!
|
|
|
|
// ADIÇÃO 2: A função agora precisa receber 'props' para ter acesso ao setCurrentPage
|
|
function Sidebar(props) {
|
|
const [isActive, setIsActive] = useState(true);
|
|
const [openSubmenu, setOpenSubmenu] = useState(null);
|
|
|
|
const toggleSidebar = () => {
|
|
setIsActive(!isActive);
|
|
};
|
|
|
|
const handleSubmenuClick = (submenuName) => {
|
|
setOpenSubmenu(openSubmenu === submenuName ? null : submenuName);
|
|
};
|
|
|
|
// =====================================================
|
|
// renderLink atualizado para suportar Table.jsx
|
|
// =====================================================
|
|
const renderLink = (item) => {
|
|
if (item.url && !item.url.includes('.html') && !item.url.startsWith('http')) {
|
|
return (
|
|
<a
|
|
href="#"
|
|
className="sidebar-link"
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
props.setCurrentPage(item.url); // agora passa "table" corretamente
|
|
}}
|
|
>
|
|
{item.icon && <i className={`bi bi-${item.icon}`}></i>}
|
|
<span>{item.name}</span>
|
|
</a>
|
|
);
|
|
}
|
|
return (
|
|
<a href={item.url} className="sidebar-link">
|
|
{item.icon && <i className={`bi bi-${item.icon}`}></i>}
|
|
<span>{item.name}</span>
|
|
</a>
|
|
);
|
|
};
|
|
|
|
return (
|
|
<div id="sidebar" className={isActive ? 'active' : ''}>
|
|
<div className="sidebar-wrapper active">
|
|
<div className="sidebar-header">
|
|
<div className="d-flex justify-content-between">
|
|
<div className="logo">
|
|
{/* Logo volta pro Início */}
|
|
<a
|
|
href="#"
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
props.setCurrentPage('Inicio');
|
|
}}
|
|
>
|
|
<hi>MediConnect</hi>
|
|
</a>
|
|
</div>
|
|
<div className="toggler">
|
|
<a
|
|
href="#"
|
|
className="sidebar-hide d-xl-none d-block"
|
|
onClick={toggleSidebar}
|
|
>
|
|
<i className="bi bi-x bi-middle"></i>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="sidebar-menu">
|
|
<ul className="menu">
|
|
{menuItems.map((item, index) => {
|
|
if (item.isTitle) {
|
|
return (
|
|
<li key={index} className="sidebar-title">
|
|
{item.name}
|
|
</li>
|
|
);
|
|
}
|
|
if (item.submenu) {
|
|
return (
|
|
<li
|
|
key={index}
|
|
className={`sidebar-item has-sub ${
|
|
openSubmenu === item.key ? 'active' : ''
|
|
}`}
|
|
>
|
|
<a
|
|
href="#"
|
|
className="sidebar-link"
|
|
onClick={() => handleSubmenuClick(item.key)}
|
|
>
|
|
<i className={`bi bi-${item.icon}`}></i>
|
|
<span>{item.name}</span>
|
|
</a>
|
|
<ul
|
|
className={`submenu ${
|
|
openSubmenu === item.key ? 'active' : ''
|
|
}`}
|
|
>
|
|
{item.submenu.map((subItem, subIndex) => (
|
|
<li key={subIndex} className="submenu-item">
|
|
{renderLink(subItem)}
|
|
</li>
|
|
))}
|
|
</ul>
|
|
</li>
|
|
);
|
|
}
|
|
return (
|
|
<li key={index} className="sidebar-item">
|
|
{renderLink(item)}
|
|
</li>
|
|
);
|
|
})}
|
|
</ul>
|
|
</div>
|
|
|
|
<button className="sidebar-toggler btn x">
|
|
<i data-feather="x"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default Sidebar;
|