diff --git a/layouts/Sidebar.tsx b/layouts/Sidebar.tsx index 3d6b76b..912e23c 100644 --- a/layouts/Sidebar.tsx +++ b/layouts/Sidebar.tsx @@ -1,6 +1,6 @@ -import React from 'react'; -import { NavLink } from 'react-router-dom'; -import { LayoutDashboard, Search, History, Boxes, Store, Users, TrendingUp, LogOut, Wallet, ShoppingCart, Package, BarChart3, Settings, Printer, Scroll } from 'lucide-react'; +import React, { useState } from 'react'; +import { NavLink, useLocation } from 'react-router-dom'; +import { LayoutDashboard, Search, History, Boxes, Store, Users, TrendingUp, LogOut, Wallet, ShoppingCart, Package, BarChart3, Settings, Printer, Scroll, ChevronDown, ChevronRight, Calculator } from 'lucide-react'; import { useCRM } from '../context/CRMContext'; import clsx from 'clsx'; @@ -10,15 +10,41 @@ interface SidebarProps { onClose?: () => void; } +type NavItem = { + to?: string; + icon: React.ElementType; + label: string; + children?: { to: string; icon: React.ElementType; label: string }[]; +}; + const Sidebar: React.FC = ({ isOpen = false, onClose }) => { const { user, isAdmin, signOut } = useCRM(); const currentUser = user; + const location = useLocation(); - const navItems = [ + // State to track expanded modules + const [expandedModules, setExpandedModules] = useState>({ + 'Impressão 3D': true // Default open for visibility + }); + + const toggleModule = (label: string) => { + setExpandedModules(prev => ({ ...prev, [label]: !prev[label] })); + }; + + const navItems: NavItem[] = [ { to: '/', icon: LayoutDashboard, label: 'Dashboard' }, - { to: '/printing/calculator', icon: Printer, label: 'Calc. 3D' }, - { to: '/printing/filaments', icon: Scroll, label: 'Filamentos' }, - { to: '/printing/printers', icon: Settings, label: 'Impressoras 3D' }, + + // Módulo Impressão 3D + { + icon: Printer, + label: 'Impressão 3D', + children: [ + { to: '/printing/calculator', icon: Calculator, label: 'Calculadora' }, + { to: '/printing/filaments', icon: Scroll, label: 'Filamentos' }, + { to: '/printing/printers', icon: Settings, label: 'Impressoras' }, + ] + }, + { to: '/sales', icon: ShoppingCart, label: 'Vendas' }, { to: '/sourcing', icon: Search, label: 'Sourcing' }, { to: '/products', icon: Package, label: 'Produtos' }, @@ -67,29 +93,88 @@ const Sidebar: React.FC = ({ isOpen = false, onClose }) => { {/* NAV */} -