Componentes
DataTable

DataTable

Tabela de dados completa com busca, ordenação por coluna e paginação client-side.

Instalação

npm install @dexcode-core/ui react-icons

Uso

import { DataTable } from '@dexcode-core/ui'
import type { DataTableColumn } from '@dexcode-core/ui'
 
type User = {
  id: number
  name: string
  email: string
  role: string
}
 
const columns: DataTableColumn<User>[] = [
  { header: 'Nome', accessorKey: 'name' },
  { header: 'E-mail', accessorKey: 'email' },
  {
    header: 'Perfil',
    accessorKey: 'role',
    align: 'center',
  },
]
 
const data: User[] = [
  { id: 1, name: 'João Silva', email: 'joao@empresa.com', role: 'Admin' },
  { id: 2, name: 'Maria Souza', email: 'maria@empresa.com', role: 'Usuário' },
]
 
export default function Example() {
  return (
    <DataTable
      data={data}
      columns={columns}
      buttonName="Novo usuário"
      onButtonClick={() => console.log('novo usuário')}
    />
  )
}

Coluna com célula customizada

Use cell para renderizar conteúdo customizado (badges, ações, formatação):

const columns: DataTableColumn<User>[] = [
  { header: 'Nome', accessorKey: 'name' },
  {
    header: 'Perfil',
    accessorKey: 'role',
    cell: (row) => (
      <span className="rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-700">
        {row.role}
      </span>
    ),
  },
  {
    header: 'Ações',
    sortable: false,
    align: 'right',
    cell: (row) => <button onClick={() => editUser(row)}>Editar</button>,
  },
]

Estado de carregamento

<DataTable data={data} columns={columns} loading={isFetching} />

Enquanto loading for true, a tabela exibe linhas de skeleton no lugar dos dados.

Busca restrita a colunas específicas

Por padrão a busca considera todas as chaves do primeiro registro. Use searchKeys para restringir:

<DataTable data={data} columns={columns} searchKeys={['name', 'email']} />

Slot customizado na toolbar

<DataTable
  data={data}
  columns={columns}
  toolbarSlot={<button>Exportar CSV</button>}
/>

Props

PropTipoPadrãoDescrição
dataT[]Lista de registros a exibir
columnsDataTableColumn<T>[]Definição das colunas
buttonNamestringTexto do botão de ação exibido na toolbar
onButtonClick() => voidHandler do botão de ação (exibido junto com buttonName)
loadingbooleanfalseExibe skeleton nas linhas e no rodapé
searchKeysstring[]todas as chaves do 1º registroChaves usadas pela busca (suporta paths como "endereco.cidade")
toolbarSlotReactNodeConteúdo extra renderizado na toolbar, ao lado da busca

Tipo — DataTableColumn

PropTipoPadrãoDescrição
headerstringTexto do cabeçalho da coluna
accessorKeystringCaminho do valor no objeto da linha (suporta "a.b.c")
accessorFn(row: T) => ReactNodeFunção para derivar o conteúdo a partir da linha
cell(row: T) => ReactNodeRenderização customizada da célula (tem prioridade sobre accessorFn/accessorKey)
align'left' | 'center' | 'right''left'Alinhamento do conteúdo da coluna
sortablebooleantrue quando há accessorKeyHabilita ordenação por clique no cabeçalho