Kobana UI
GitHub

useDataTable

Hook para gerenciar estado do DataTable com TanStack Table.

Instalação

npx @kobana/ui add use-data-table

Dependências npm: @tanstack/react-table

Importação

import { useDataTable } from "@/hooks/use-data-table"

API

const { table, sorting, filtering, pagination, rowSelection } = useDataTable({
  data,
  columns,
  serverSide: false,
  defaultPageSize: 20,
})

Options

OpçãoTipoDefaultDescrição
dataTData[]Dados da tabela
columnsColumnDef<TData>[]Definição das colunas
serverSidebooleanfalseModo server-side
defaultPageSizenumber20Tamanho da página padrão

Return

PropriedadeTipoDescrição
tableTable<TData>Instância TanStack Table
sortingSortingStateEstado de ordenação
filteringColumnFiltersStateEstado de filtros
paginationPaginationStateEstado de paginação
rowSelectionRowSelectionStateLinhas selecionadas

Uso

function ChargesTable({ charges }: { charges: Charge[] }) {
  const { table, sorting, pagination } = useDataTable({
    data: charges,
    columns: chargeColumns,
  })

  return (
    <DataTable
      columns={chargeColumns}
      data={charges}
      searchKey="name"
      searchPlaceholder="Buscar cobranças..."
      onSearch={handleSearch}
      pagination={{
        page: pagination.pageIndex + 1,
        perPage: pagination.pageSize,
        total: charges.length,
        totalPages: Math.ceil(charges.length / pagination.pageSize),
      }}
    />
  )
}

Server-side

const { table, sorting, pagination } = useDataTable({
  data: serverData,
  columns,
  serverSide: true,
})

// Use sorting e pagination para fazer fetch server-side
useEffect(() => {
  fetchCharges({ page: pagination.pageIndex, sort: sorting })
}, [sorting, pagination])

On this page