testes/Modulos Angular/projects/idt_app/docs/GETTING_STARTED_DASHBOARD.md

6.6 KiB

🚀 Getting Started - Dashboard Tab System

👋 Bem-vindo, Novo Desenvolvedor!

Este guia te ajudará a entender e usar o Dashboard Tab System - uma funcionalidade que adiciona automaticamente uma aba de dashboard antes da lista em qualquer domínio.

🎯 O que é o Dashboard Tab System?

É um sistema que permite adicionar uma aba de "Dashboard de [Domínio]" antes da aba "Lista de [Domínio]" com apenas uma linha de código!

Antes vs Depois

Antes (sem dashboard):

[Lista de Motoristas] [Editar: João] [Editar: Maria]

Depois (com dashboard):

[Dashboard de Motoristas] [Lista de Motoristas] [Editar: João] [Editar: Maria]

🚀 Como Usar (Super Simples!)

1. Configuração Mínima (1 linha!)

// Em qualquer arquivo *.component.ts que estende BaseDomainComponent
protected override getDomainConfig(): DomainConfig {
  return {
    domain: 'vehicle',
    title: 'Veículos',
    entityName: 'veículo',
    subTabs: ['dados'],
    showDashboardTab: true, // ✅ SÓ ISSO! 
    columns: [...]
  };
}

Pronto! Agora você tem:

  • Aba "Dashboard de Veículos"
  • KPIs automáticos (Total, Ativos, Recentes)
  • Lista dos últimos 5 itens
  • Design responsivo e dark mode

2. Configuração Avançada (Opcional)

protected override getDomainConfig(): DomainConfig {
  return {
    domain: 'driver',
    title: 'Motoristas',
    entityName: 'motorista',
    subTabs: ['dados', 'documentos'],
    showDashboardTab: true,
    dashboardConfig: {
      title: 'Painel de Motoristas', // Título customizado
      customKPIs: [
        {
          id: 'drivers-with-license',
          label: 'Com CNH Válida',
          value: '85%',
          icon: 'fas fa-id-card',
          color: 'success',
          trend: 'up',
          change: '+3%'
        },
        {
          id: 'drivers-premium',
          label: 'Motoristas Premium',
          value: 42,
          icon: 'fas fa-crown',
          color: 'warning',
          trend: 'stable'
        }
      ]
    },
    columns: [...]
  };
}

📊 KPIs Automáticos (Grátis!)

O sistema gera automaticamente estes KPIs baseados nos seus dados:

1. 📋 Total de Registros

  • O que mostra: Quantidade total de itens
  • Baseado em: totalItems do seu service
  • Exemplo: "Total de Motoristas: 150"

2. Registros Ativos

  • O que mostra: Itens com status ativo
  • Baseado em: Campo status = 'Ativo'|'active'|'Active'
  • Exemplo: "Motoristas Ativos: 142"

3. 🆕 Registros Recentes

  • O que mostra: Itens criados nos últimos 7 dias
  • Baseado em: Campo created_at
  • Exemplo: "Novos (7 dias): 8"

🎨 Cores dos KPIs

color: 'primary'  // 🔵 Azul (padrão)
color: 'success'  // 🟢 Verde (positivo)
color: 'warning'  // 🟡 Amarelo (atenção)
color: 'danger'   // 🔴 Vermelho (crítico)
color: 'info'     // 🔷 Azul claro (informativo)

🎯 Ícones Recomendados

// Totais e listas
'fas fa-list'         // Total geral
'fas fa-users'        // Usuários/Motoristas
'fas fa-car'          // Veículos
'fas fa-building'     // Empresas

// Status e estados
'fas fa-check-circle' // Ativos/Válidos
'fas fa-plus-circle'  // Novos/Recentes
'fas fa-clock'        // Pendentes
'fas fa-times-circle' // Inativos/Inválidos

// Especiais
'fas fa-crown'        // Premium/VIP
'fas fa-star'         // Favoritos
'fas fa-chart-line'   // Crescimento
'fas fa-dollar-sign'  // Financeiro
'fas fa-id-card'      // Documentos

📱 Exemplos Práticos

Exemplo 1: Veículos (Simples)

export class VehiclesComponent extends BaseDomainComponent<Vehicle> {
  protected override getDomainConfig(): DomainConfig {
    return {
      domain: 'vehicle',
      title: 'Veículos',
      entityName: 'veículo',
      subTabs: ['dados', 'documentos'],
      showDashboardTab: true, // ✅ Só isso!
      columns: [
        { field: "license_plate", header: "Placa", sortable: true },
        { field: "brand", header: "Marca", sortable: true }
      ]
    };
  }
}

Exemplo 2: Clientes (Avançado)

export class ClientsComponent extends BaseDomainComponent<Client> {
  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: 'monthly-revenue',
            label: 'Receita Mensal',
            value: 'R$ 125K',
            icon: 'fas fa-dollar-sign',
            color: 'primary',
            trend: 'up',
            change: '+8.5%'
          }
        ]
      },
      columns: [
        { field: "name", header: "Nome", sortable: true },
        { field: "email", header: "Email", sortable: true }
      ]
    };
  }
}

🔧 Troubleshooting

Dashboard não aparece?

Verifique:

  1. showDashboardTab: true está no getDomainConfig()
  2. Componente estende BaseDomainComponent
  3. Build foi executado após a mudança

KPIs automáticos não aparecem?

Possíveis causas:

  1. Service não retorna totalItems
  2. Dados não têm campo status ou created_at
  3. Dados estão vazios

KPI customizado não aparece?

Verifique:

  1. customKPIs está dentro de dashboardConfig
  2. Todos os campos obrigatórios estão preenchidos
  3. id é único

🎓 Próximos Passos

  1. Teste: Adicione showDashboardTab: true em um domínio existente
  2. Customize: Adicione KPIs específicos do seu domínio
  3. Explore: Veja outros domínios como drivers.component.ts
  4. Contribua: Sugira melhorias e novos tipos de KPI

📚 Documentação Completa

💡 Dicas Pro

  1. Comece simples: Use só showDashboardTab: true primeiro
  2. Ícones: Use FontAwesome 5 (fas fa-*)
  3. Cores: success para positivo, warning para atenção
  4. Valores: Use formatação amigável ('85%', 'R$ 125K')
  5. Trends: up = verde, down = vermelho, stable = amarelo

Bem-vindo ao time! 🎉
Se tiver dúvidas, consulte a documentação ou pergunte para a equipe.

Happy Coding! 🚀