diff --git a/frontend/src/components/Sidebar.jsx b/frontend/src/components/Sidebar.jsx index 39170b9..21fadd1 100644 --- a/frontend/src/components/Sidebar.jsx +++ b/frontend/src/components/Sidebar.jsx @@ -1,11 +1,17 @@ // src/components/Sidebar.jsx +import { useState } from "react"; import { useAuth } from "../lib/auth"; const MENU = [ { id: "ocupabilidad", ico: "📊", label: "Ocupabilidad" }, { id: "ventas", ico: "💰", label: "Ventas" }, { id: "comisiones", ico: "🧮", label: "Comisiones" }, - { id: "cobranza", ico: "📋", label: "Cobranza" }, + // Grupo COBRANZA con submenú (CARTERA = cobranza, RETIROS = retiros) + { id: "grupo-cobranza", ico: "📋", label: "Cobranza", grupo: true, + hijos: [ + { id: "cobranza", ico: "📁", label: "Cartera" }, + { id: "retiros", ico: "🚪", label: "Retiros" }, + ] }, { id: "rentabilidad", ico: "📈", label: "Rentabilidad" }, { id: "asesores", ico: "👥", label: "Asesores" }, { id: "usuarios", ico: "🔐", label: "Usuarios" }, @@ -13,25 +19,94 @@ const MENU = [ export default function Sidebar({ active, onChange }) { const { perfil, permisos, logout } = useAuth(); - const visibles = MENU.filter((m) => permisos.includes(m.id)); + const [colapsado, setColapsado] = useState(false); + + // Un grupo se muestra si el usuario tiene permiso a al menos uno de sus hijos. + const puede = (m) => m.grupo + ? m.hijos.some((h) => permisos.includes(h.id)) + : permisos.includes(m.id); + const visibles = MENU.filter(puede); + + // Submenú abierto: por defecto abierto si la vista activa es uno de sus hijos. + const [abiertos, setAbiertos] = useState(() => { + const ini = {}; + MENU.forEach((m) => { if (m.grupo && m.hijos.some((h) => h.id === active)) ini[m.id] = true; }); + return ini; + }); + const toggle = (id) => setAbiertos((p) => ({ ...p, [id]: !p[id] })); return ( -