SWCore / Componentes / Tabela avançada

Tabela avançada Componentes

Busca, ordenar por coluna, paginar e exportar CSV — tudo automático a partir de um <table> comum.

O que é

Pega uma tabela HTML normal e adiciona busca, ordenação por coluna (clicando no cabeçalho), paginação e exportação, sem precisar de dados vindos de API.

Como funciona

Abaixo de sw-table-collapse (largura DO CONTAINER, não da tela), muda pra modo responsivo: mostra só a 1ª coluna + ▸, clicar a linha abre o resto empilhado — sem rolagem lateral.

Exemplos

Busca, ordenação e paginação — de um <table> comum Ao vivo
NomeCargoSetorStatus
Ana SouzaDesignerProdutoAtivo
Bruno LimaDevEngenhariaFérias
Carla DiasPMProdutoAtivo
Diego AlvesDevEngenhariaAtivo
Elisa RamosSuporteAtendimentoAtivo
Fábio TorresDevEngenhariaAfastado
Gabriela ReisDesignerProdutoAtivo
Heitor NunesFinanceiroAdministrativoAtivo

Clique nos cabeçalhos pra ordenar, use a busca, troque de página. A coluna Status está travada (sw-table-nosort).

<table sw-table sw-table-per="10">
  <thead>
    <tr><th>Nome</th><th>Cargo</th><th sw-table-nosort>Status</th></tr>
  </thead>
  <tbody>
    <tr><td>Ana Souza</td><td>Designer</td><td>Ativo</td></tr>
  </tbody>
</table>

<!-- busca, ordenação e zebra já vêm ligadas -->
Exportar, imprimir e escolher quantas linhas Ao vivo
ProdutoCategoriaPreço
Teclado mecânicoPeriféricosR$ 349,00
Monitor 27"TelasR$ 1.899,00
Mouse sem fioPeriféricosR$ 129,00
Webcam HDVídeoR$ 289,00
HeadsetÁudioR$ 459,00
Suporte de monitorAcessóriosR$ 179,00
<table sw-table
       sw-table-per="10"
       sw-table-per-opts="5,10,25,50"
       sw-table-export="csv"
       sw-table-print>
  …
</table>

<!-- sem sw-table-per-opts, o seletor oferece 10, 25, 50 e 100 -->
Seleção de linhas e colunas escondíveis Ao vivo
PedidoClienteValorID
#1042Ana SouzaR$ 349,00a1
#1043Bruno LimaR$ 129,00b2
#1044Carla DiasR$ 1.899,00c3
#1045Diego AlvesR$ 289,00d4

A coluna ID não aparece no menu de colunas (sw-table-novis).

<table sw-table sw-table-select sw-table-colvis>
  <thead>
    <tr><th>Pedido</th><th>Cliente</th><th sw-table-novis>ID</th></tr>
  </thead>
  …
</table>

<script>
  tabela.addEventListener('sw:table:select', (e) => {
    console.log('linhas marcadas:', e.detail);
  });
</script>
Sem zebra, e lembrando como o usuário deixou Ao vivo
CidadeEstadoHabitantes
RecifePE1.653.461
OlindaPE393.115
CaruaruPE369.343
PetrolinaPE354.317
JaboatãoPE706.867

Com sw-table-state: ordene ou busque, saia da página e volte — ele lembra.

<!-- sem a zebra -->
<table sw-table sw-table-stripe="false">…</table>

<!-- lembra busca, ordem e página entre visitas -->
<table sw-table sw-table-state>…</table>
No celular — vira lista empilhada Ao vivo

sw-table-collapse mede a largura do contêiner, não da tela. Abaixo dela, a tabela mostra só a primeira coluna com um ▸; clicar na linha abre o resto empilhado.

É melhor do que rolagem lateral: ninguém precisa arrastar a tabela pro lado pra ler.

<table sw-table sw-table-collapse="760">
  …
</table>

<!-- abaixo de 760px DE CONTÊINER, vira lista empilhada -->
Montando a partir de dados JS Ao vivo

Sem demonstração visual — é uma chamada de JavaScript. Veja o código ao lado.

SWTable.fromData(
  document.querySelector('#minhaTabela'),
  ['Nome', 'Cargo', { label: 'Status', nosort: true }],
  [
    ['Ana Souza', 'Designer', 'Ativo'],
    ['Bruno Lima', 'Dev', 'Férias']
  ]
);

// outras chamadas
SWTable.search(tabela, 'ana');
SWTable.export(tabela, 'csv');
SWTable.reload(tabela);

Atributos

sw-table-per
linhas por página
sw-table-per-opts
opções do seletor de linhas por página — padrão "10,25,50,100"
sw-table-search
liga/desliga o campo de busca
sw-table-export
formato de exportação — "csv"
sw-table-print
botão de imprimir
sw-table-stripe
"false" tira a zebra das linhas (ela vem ligada)
sw-table-select
só a presença: liga a seleção de linhas
sw-table-colvis
só a presença: liga o menu de mostrar/esconder colunas
sw-table-state
só a presença: lembra busca, ordem e página do usuário
sw-table-collapse
largura DO CONTAINER onde vira o modo empilhado
sw-table-nosort (no <th>)
trava a ordenação daquela coluna
sw-table-novis (no <th>)
tira a coluna do menu de visibilidade

Variantes

(sem nada)
já vem com busca, ordenação clicando no cabeçalho e zebra
sw-table-select
caixinha de seleção por linha
sw-table-colvis
menu pra esconder colunas
sw-table-state
guarda o estado — o usuário volta e encontra como deixou
sw-table-collapse="760"
abaixo de 760px de contêiner, vira lista empilhada

Eventos

sw:table:sort
ordenou por uma coluna
sw:table:search
o usuário buscou algo
sw:table:page
trocou de página
sw:table:select
mudou a seleção de linhas

API (JavaScript)

SWTable.reload(el)
recarrega os dados
SWTable.search(el, texto)
busca por código
SWTable.export(el, "csv")
exporta por código
SWTable.fromData(el, colunas, linhas)
monta a tabela a partir de dados JS puros

Requisitos

Nenhuma.

Limitações — o que ele não faz

  • Ele trabalha com as linhas que JÁ estão no HTML: busca, ordenação e paginação são no navegador. Pra milhares de linhas vindas do servidor, pagine do lado do servidor.