9.8 KiB
9.8 KiB
📱 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.
🎯 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
// 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:
@Component({
template: `
<div class="app-container">
<!-- Layout principal -->
<!-- Menu Mobile Flutuante -->
<app-mobile-footer-menu
(sidebarToggle)="toggleSidebar()">
</app-mobile-footer-menu>
</div>
`
})
export class MainLayoutComponent {
toggleSidebar() {
if (this.sidebar) {
this.sidebar.toggleSidebar();
}
}
}
2. Uso Automático
O menu funciona automaticamente:
// ✅ 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
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)
// Mostrar menu mesmo em desktop (desenvolvimento)
this.mobileMenuService.setVisibility(true);
// Voltar ao comportamento normal
this.mobileMenuService.setVisibility(false);
🎨 Personalização
Cores e Temas
// 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
// 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
// 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
// Notificações específicas
setMeliNotifications(count: number, message?: string): void
setVehicleNotifications(count: number, message?: string): void
setDashboardNotifications(count: number, message?: string): void
Observables
// Observar notificações
notifications$: Observable<MobileMenuNotification[]>
// Observar visibilidade
visibility$: Observable<boolean>
// Obter notificação específica
getNotification(type: string): Observable<MobileMenuNotification | undefined>
MobileFooterMenuComponent
Eventos
@Output() sidebarToggle = new EventEmitter<void>();
Propriedades
isVisible: boolean // Controla visibilidade
notifications: Array // Lista de notificações
🛣️ Rotas Configuradas
// 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
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
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
// 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
// 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
// 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
- Reportar Bugs: Usar issues do projeto
- Sugerir Features: Documentar casos de uso
- Código: Seguir padrões estabelecidos
- Testes: Incluir em dispositivos reais
Padrões de Código
// 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.
