# 📱 Mobile Footer Menu - Documentação ## Visão Geral O **Mobile Footer Menu** é um componente de navegação flutuante desenvolvido especificamente para dispositivos móveis, proporcionando acesso rápido às principais funcionalidades da aplicação IDT App. ![Menu Mobile Footer](../samples_screem/menu_footer_mobile.jpg) ## 🎯 Funcionalidades ### ✅ Navegação Principal - **Menu Sidebar**: Controla abertura/fechamento do menu lateral - **Dashboard**: Navegação rápida para o painel principal - **Rotas Meli**: Acesso direto às rotas do Mercado Livre - **Veículos**: Navegação para gestão de frota ### ✅ Sistema de Notificações - **Badges dinâmicos**: Contadores visuais de notificações - **Auto-clear**: Notificações são automaticamente limpas ao navegar - **Tempo real**: Atualizações em tempo real via Observable ### ✅ Design Responsivo - **Mobile-only**: Visível apenas em dispositivos ≤768px - **Auto-hide**: Oculto automaticamente em desktop - **Animações**: Transições suaves e efeitos visuais ## 🏗️ Arquitetura ### Componentes ``` 📁 mobile-footer-menu/ ├── mobile-footer-menu.component.ts // Componente principal ├── mobile-footer-menu.component.scss // Estilos responsivos 📁 services/ └── mobile-menu.service.ts // Gerenciamento de estado ``` ### Dependências ```typescript // Imports necessários import { MobileFooterMenuComponent } from './mobile-footer-menu.component'; import { MobileMenuService } from '../services/mobile-menu.service'; ``` ## 🚀 Implementação ### 1. Integração no Layout O componente já está integrado no `MainLayoutComponent`: ```typescript @Component({ template: `
` }) export class MainLayoutComponent { toggleSidebar() { if (this.sidebar) { this.sidebar.toggleSidebar(); } } } ``` ### 2. Uso Automático O menu funciona automaticamente: ```typescript // ✅ Detecção automática de dispositivo móvel // ✅ Visibilidade controlada por media queries // ✅ Navegação configurada para rotas padrão ``` ## 🔧 Configuração ### Service de Gerenciamento ```typescript import { MobileMenuService } from './services/mobile-menu.service'; constructor(private mobileMenuService: MobileMenuService) {} // Atualizar notificações this.mobileMenuService.setMeliNotifications(5, 'Novas rotas'); this.mobileMenuService.setVehicleNotifications(2, 'Manutenção pendente'); this.mobileMenuService.setDashboardNotifications(1, 'Relatório pronto'); // Limpar notificações this.mobileMenuService.clearNotification('meli'); // Incrementar contador this.mobileMenuService.incrementNotification('vehicles'); ``` ### Forçar Visibilidade (para testes) ```typescript // Mostrar menu mesmo em desktop (desenvolvimento) this.mobileMenuService.setVisibility(true); // Voltar ao comportamento normal this.mobileMenuService.setVisibility(false); ``` ## 🎨 Personalização ### Cores e Temas ```scss // Tema claro (padrão) .mobile-footer-menu { background: linear-gradient(135deg, #FFC82E 0%, #FFD700 100%); } // Tema escuro (automático) @media (prefers-color-scheme: dark) { .mobile-footer-menu { background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%); } } ``` ### Responsividade ```scss // Dispositivos muito pequenos @media (max-width: 360px) { .menu-item { min-width: 50px; } .menu-icon { font-size: 20px; } } // Dispositivos médios @media (min-width: 361px) and (max-width: 480px) { .menu-item { min-width: 65px; } } // Desktop (oculto) @media (min-width: 769px) { .mobile-footer-menu { display: none; } } ``` ## 📋 API Reference ### MobileMenuService #### Métodos Principais ```typescript // Atualizar notificação updateNotification(type: 'meli' | 'dashboard' | 'vehicles' | 'sidebar', count: number, message?: string): void // Limpar notificação clearNotification(type: string): void // Incrementar notificação incrementNotification(type: string, message?: string): void // Controlar visibilidade setVisibility(visible: boolean): void ``` #### Métodos de Conveniência ```typescript // Notificações específicas setMeliNotifications(count: number, message?: string): void setVehicleNotifications(count: number, message?: string): void setDashboardNotifications(count: number, message?: string): void ``` #### Observables ```typescript // Observar notificações notifications$: Observable // Observar visibilidade visibility$: Observable // Obter notificação específica getNotification(type: string): Observable ``` ### MobileFooterMenuComponent #### Eventos ```typescript @Output() sidebarToggle = new EventEmitter(); ``` #### Propriedades ```typescript isVisible: boolean // Controla visibilidade notifications: Array // Lista de notificações ``` ## 🛣️ Rotas Configuradas ```typescript // Rotas padrão do menu const routes = { dashboard: '/app/dashboard', meli: '/app/routes/mercado-live', vehicles: '/app/vehicles', sidebar: 'toggle()' // Ação especial }; ``` ## 📊 Exemplos de Uso ### Exemplo 1: Atualizar Notificações ```typescript export class SomeComponent { constructor(private mobileMenuService: MobileMenuService) {} onNewMeliRoute() { // Nova rota disponível this.mobileMenuService.incrementNotification('meli', 'Nova rota de entrega'); } onVehicleMaintenance() { // Manutenção programada this.mobileMenuService.setVehicleNotifications(3, 'Revisões pendentes'); } onTaskCompleted() { // Tarefa concluída, limpar notificação this.mobileMenuService.clearNotification('dashboard'); } } ``` ### Exemplo 2: Observar Mudanças ```typescript export class DashboardComponent implements OnInit { constructor(private mobileMenuService: MobileMenuService) {} ngOnInit() { // Observar notificações do dashboard this.mobileMenuService.getNotification('dashboard').subscribe(notification => { if (notification && notification.count > 0) { console.log(`Dashboard tem ${notification.count} notificações`); } }); } } ``` ### Exemplo 3: Demo de Notificações ```typescript // Iniciar demo automático (já configurado) this.mobileMenuService.startDemoNotifications(); // Sequência de demo: // 1. +3 segundos: Nova rota Meli // 2. +6 segundos: Alerta de veículo // 3. +10 segundos: Limpar notificações Meli ``` ## 🎭 Estados Visuais ### Botões - **Normal**: Transparente com ícone preto - **Hover**: Background semi-transparente + elevação - **Active**: Efeito ripple + compressão - **Focus**: Outline acessível ### Notificações - **Badge**: Vermelho (#FF4444) com animação pulse - **Contador**: Números brancos centralizados - **Auto-hide**: Oculta quando count = 0 ### Animações - **Entrada**: Slide-up suave (0.3s cubic-bezier) - **Hover**: Scale dos ícones (1.1x) - **Ripple**: Expansão circular no touch ## 🔍 Debugging ### Logs de Console ```javascript // Logs automáticos disponíveis: "🔧 Abrindo sidebar..." "📊 Navegando para Dashboard..." "🛣️ Navegando para Rotas Meli..." "🚗 Navegando para Veículos..." "📱 Notificação atualizada para meli: 5" "🧪 Iniciando demo de notificações..." ``` ### Testes Manuais ```typescript // No console do navegador: const service = window.ng.getComponent(document.querySelector('app-mobile-footer-menu')).mobileMenuService; // Testar notificações service.setMeliNotifications(10); service.setVehicleNotifications(5); // Forçar visibilidade service.setVisibility(true); ``` ## 🚨 Limitações Conhecidas ### Mobile Only - Componente **não é visível** em desktop (>768px) - Design otimizado apenas para touch interfaces ### Navegação - Rotas hard-coded no componente - Requer roteamento Angular configurado ### Performance - Service sempre ativo (singleton) - Demo de notificações consome recursos ## 🔄 Atualizações Futuras ### Planejadas - [ ] Suporte a gestos (swipe) - [ ] Haptic feedback - [ ] Customização de posição - [ ] Configuração dinâmica de botões - [ ] Integração com PWA ### Possíveis Melhorias - [ ] Lazy loading do componente - [ ] Cache de notificações - [ ] Analytics de uso - [ ] Temas personalizáveis - [ ] Acessibilidade aprimorada ## 🤝 Contribuição ### Como Contribuir 1. **Reportar Bugs**: Usar issues do projeto 2. **Sugerir Features**: Documentar casos de uso 3. **Código**: Seguir padrões estabelecidos 4. **Testes**: Incluir em dispositivos reais ### Padrões de Código ```typescript // Convenções seguidas: // - Prefixo 'mobile' para classes // - Observables com sufixo '$' // - Logs com emojis para debugging // - Comentários em português // - TypeScript strict mode ``` ## 📞 Suporte ### Troubleshooting | Problema | Solução | |----------|---------| | Menu não aparece | Verificar se está em dispositivo móvel (≤768px) | | Notificações não atualizam | Verificar subscription ao service | | Sidebar não abre | Verificar referência no MainLayoutComponent | | Rotas não funcionam | Verificar configuração do Angular Router | ### Contato - **Desenvolvedor**: Equipe IDT App - **Última Atualização**: Janeiro 2025 - **Versão**: 1.0.0 --- ## 📄 Resumo O **Mobile Footer Menu** oferece uma experiência de navegação moderna e intuitiva para dispositivos móveis, com: - ✅ **4 botões principais** de navegação - ✅ **Sistema de notificações** em tempo real - ✅ **Design responsivo** e acessível - ✅ **Integração completa** com o layout - ✅ **Customização** via service - ✅ **Performance otimizada** para mobile **Resultado**: Interface mobile profissional que melhora significativamente a experiência do usuário em dispositivos móveis.