# 📊 Dashboard Tab System - Guia Completo ## 🎯 Visão Geral O **Dashboard Tab System** é uma extensão do framework `BaseDomainComponent` que permite adicionar uma aba de dashboard antes da aba de lista em qualquer domínio. Esta funcionalidade oferece uma visão geral com KPIs, gráficos e itens recentes de forma automática e customizável. ## ✨ Características - ✅ **Aba Dashboard antes da Lista**: Ordem automática (Dashboard → Lista → Edições) - ✅ **KPIs Automáticos**: Total, Ativos, Recentes (últimos 7 dias) - ✅ **KPIs Customizados**: Definidos por domínio - ✅ **Itens Recentes**: Últimos 5 registros automaticamente - ✅ **Gráficos Customizados**: Placeholder para implementações futuras - ✅ **Design Responsivo**: Funciona em desktop e mobile - ✅ **Dark Mode**: Suporte completo - ✅ **Configuração Simples**: Apenas uma flag no `DomainConfig` ## 🚀 Como Usar ### 1. Habilitar Dashboard em um Domínio ```typescript // exemplo: drivers.component.ts protected override getDomainConfig(): DomainConfig { return { domain: 'driver', title: 'Motoristas', entityName: 'motorista', subTabs: ['dados', 'photos', 'documents'], // ✅ NOVO: Habilitar aba Dashboard showDashboardTab: true, // ✅ NOVO: Configuração opcional do dashboard dashboardConfig: { title: 'Dashboard de Motoristas', // Opcional showKPIs: true, // default: true showCharts: true, // default: true showRecentItems: true, // default: true customKPIs: [ { id: 'drivers-with-license', label: 'Com CNH Válida', value: '85%', icon: 'fas fa-id-card', color: 'success', trend: 'up', change: '+3%' } ] }, columns: [...] }; } ``` ### 2. Configuração Mínima ```typescript // Configuração mínima - apenas habilitar protected override getDomainConfig(): DomainConfig { return { domain: 'vehicle', title: 'Veículos', entityName: 'veículo', subTabs: ['dados'], showDashboardTab: true, // ✅ Só isso já funciona! columns: [...] }; } ``` ## 📋 Interfaces e Tipos ### DomainConfig (Estendido) ```typescript export interface DomainConfig { // ... propriedades existentes ... showDashboardTab?: boolean; // Mostrar aba Dashboard (default: false) dashboardConfig?: DashboardTabConfig; // Configuração específica do dashboard } ``` ### DashboardTabConfig ```typescript export interface DashboardTabConfig { title?: string; // Título customizado (default: 'Dashboard de [Title]') showKPIs?: boolean; // Mostrar KPIs principais (default: true) showCharts?: boolean; // Mostrar gráficos (default: true) showRecentItems?: boolean; // Mostrar itens recentes (default: true) customKPIs?: DashboardKPI[]; // KPIs customizados customCharts?: DashboardChart[]; // Gráficos customizados } ``` ### DashboardKPI ```typescript export interface DashboardKPI { id: string; // Identificador único label: string; // Rótulo do KPI value: string | number; // Valor (formatado automaticamente) icon: string; // Ícone FontAwesome color: 'primary' | 'success' | 'warning' | 'danger' | 'info'; trend?: 'up' | 'down' | 'stable'; // Tendência (opcional) change?: string; // Mudança percentual (opcional) } ``` ### DashboardChart ```typescript export interface DashboardChart { id: string; // Identificador único title: string; // Título do gráfico type: 'bar' | 'line' | 'pie' | 'donut'; // Tipo do gráfico data: any[]; // Dados do gráfico config?: any; // Configurações específicas } ``` ## 🎨 KPIs Automáticos O sistema gera automaticamente os seguintes KPIs baseados nos dados: ### 1. Total de Registros - **Label**: "Total de [Title]" - **Valor**: `totalItems` - **Ícone**: `fas fa-list` - **Cor**: `primary` ### 2. Registros Ativos (se existir campo `status`) - **Label**: "[Title] Ativos" - **Valor**: Contagem de itens com `status = 'Ativo'|'active'|'Active'` - **Ícone**: `fas fa-check-circle` - **Cor**: `success` - **Tendência**: `stable` ### 3. Registros Recentes (últimos 7 dias) - **Label**: "Novos (7 dias)" - **Valor**: Contagem de itens com `created_at` nos últimos 7 dias - **Ícone**: `fas fa-plus-circle` - **Cor**: `info` - **Tendência**: `up` ## 🎯 Exemplos Práticos ### Exemplo 1: Dashboard Simples (Veículos) ```typescript protected override getDomainConfig(): DomainConfig { return { domain: 'vehicle', title: 'Veículos', entityName: 'veículo', subTabs: ['dados', 'documentos'], showDashboardTab: true, columns: [ { field: "license_plate", header: "Placa", sortable: true }, { field: "brand", header: "Marca", sortable: true }, { field: "model", header: "Modelo", sortable: true } ] }; } ``` **Resultado**: Dashboard com KPIs automáticos + últimos 5 veículos. ### Exemplo 2: Dashboard Avançado (Clientes) ```typescript protected override getDomainConfig(): DomainConfig { return { domain: 'client', title: 'Clientes', entityName: 'cliente', subTabs: ['dados', 'contratos'], showDashboardTab: true, dashboardConfig: { title: 'Painel de Clientes', customKPIs: [ { id: 'premium-clients', label: 'Clientes Premium', value: 45, icon: 'fas fa-crown', color: 'warning', trend: 'up', change: '+12%' }, { id: 'active-contracts', label: 'Contratos Ativos', value: '89%', icon: 'fas fa-file-contract', color: 'success', trend: 'stable' }, { id: 'monthly-revenue', label: 'Receita Mensal', value: 'R$ 125K', icon: 'fas fa-dollar-sign', color: 'primary', trend: 'up', change: '+8.5%' } ] }, columns: [...] }; } ``` **Resultado**: Dashboard com KPIs automáticos + 3 KPIs customizados + itens recentes. ## 🔧 Arquitetura Técnica ### Fluxo de Criação das Abas ```mermaid graph TD A[loadEntities] --> B{Primeira vez?} B -->|Sim| C[createInitialTabs] B -->|Não| D[updateTabsData] C --> E{showDashboardTab?} E -->|Sim| F[createDashboardTab] E -->|Não| G[createListTab] F --> G D --> H{Dashboard existe?} H -->|Sim| I[updateDashboardTabData] H -->|Não| J[updateListTabData] I --> J ``` ### Componentes Envolvidos 1. **BaseDomainComponent**: Lógica de criação e gerenciamento das abas 2. **TabSystemComponent**: Renderização das abas e roteamento de conteúdo 3. **DomainDashboardComponent**: Componente visual do dashboard 4. **DomainConfig**: Interface de configuração ### Métodos Principais ```typescript // BaseDomainComponent private async createDashboardTab(): Promise private generateAutomaticKPIs(): DashboardKPI[] private async createInitialTabs(): Promise private updateDashboardTabData(): void ``` ## 🎨 Customização Visual ### Cores dos KPIs ```typescript // Cores disponíveis type KPIColor = 'primary' | 'success' | 'warning' | 'danger' | 'info'; // Mapeamento visual primary: var(--idt-primary-color) // Azul success: var(--idt-success) // Verde warning: var(--idt-warning) // Amarelo/Laranja danger: var(--idt-danger) // Vermelho info: var(--idt-info) // Azul claro ``` ### Ícones Recomendados ```typescript // KPIs comuns 'fas fa-list' // Total 'fas fa-check-circle' // Ativos 'fas fa-plus-circle' // Novos 'fas fa-users' // Usuários 'fas fa-car' // Veículos 'fas fa-building' // Empresas 'fas fa-dollar-sign' // Financeiro 'fas fa-chart-line' // Crescimento 'fas fa-crown' // Premium 'fas fa-star' // Favoritos ``` ## 📱 Responsividade O dashboard é totalmente responsivo: - **Desktop**: Grid de 3-4 colunas para KPIs - **Tablet**: Grid de 2 colunas - **Mobile**: Grid de 1 coluna ## 🌙 Dark Mode Suporte completo ao dark mode com: - Cores adaptadas automaticamente - Contrastes adequados - Ícones e bordas ajustados ## 🔄 Atualização Automática O dashboard é atualizado automaticamente quando: - Dados são recarregados (`loadEntities`) - Filtros são aplicados - Paginação é alterada - Novos itens são criados/editados ## 🚀 Próximos Passos ### Funcionalidades Futuras 1. **Gráficos Reais**: Integração com bibliotecas de gráficos (Chart.js, D3.js) 2. **Filtros no Dashboard**: Filtros específicos para KPIs 3. **Exportação**: Exportar dados do dashboard 4. **Widgets Customizados**: Componentes específicos por domínio 5. **Refresh Manual**: Botão de atualização manual ### Como Contribuir 1. Adicione novos tipos de KPIs automáticos 2. Implemente gráficos específicos por domínio 3. Crie widgets customizados 4. Melhore a responsividade 5. Adicione animações e transições ## 📚 Referências - [BaseDomainComponent](../architecture/BASE_DOMAIN_COMPONENT.md) - [TabSystem](../tab-system/README.md) - [Interfaces](../../shared/interfaces/) - [Componentes](../../shared/components/) --- **Criado em**: Janeiro 2025 **Versão**: 1.0 **Autor**: Sistema PraFrota **Branch**: `feature/dashboard-tab-system`