Kobana UI
GitHub

ListPage

Template de página de listagem completa com PageHeader + DataTable + EmptyState.

Carregando...

Instalação

npx @kobana/ui add list-page

Dependências Kobana: data-table, page-header, empty-state

Importação

import { ListPage } from "@/components/kobana/templates/list-page"

Props

PropTipoDefaultDescrição
titlestringTítulo da página
descriptionstringDescrição
breadcrumbsBreadcrumbItem[]Trail de navegação
primaryAction{ label, onClick, icon? }Botão principal
columnsColumnDef<TData>[]Colunas da tabela
dataTData[]Dados
filtersFilterConfig[]Configuração de filtros
filterComponentReactNodeComponente de filtro customizado
searchKeystringColuna de busca
paginationPaginationConfigPaginação server-side
selectablebooleanfalseSeleção de linhas
bulkActionsBulkAction<TData>[]Ações em lote
rowActionsRowAction<TData>[]Ações por linha
isLoadingbooleanLoading
emptyStateEmptyStatePropsEstado vazio customizado

Uso

<ListPage
  title="Cobranças"
  description="Gerencie suas cobranças"
  breadcrumbs={[{ label: "Dashboard", href: "/" }, { label: "Cobranças" }]}
  primaryAction={{ label: "Nova Cobrança", onClick: () => navigate("/new") }}
  columns={columns}
  data={charges}
  searchKey="name"
  searchPlaceholder="Buscar cobranças..."
  onSearch={handleSearch}
  filterComponent={
    <MultiSelectFilter
      label="Status"
      options={statusOptions}
      selected={selectedStatuses}
      onChange={setSelectedStatuses}
    />
  }
  selectable
  rowActions={[
    { label: "Editar", onClick: (row) => navigate(`/edit/${row.id}`) },
    { label: "Excluir", variant: "destructive", onClick: handleDelete },
  ]}
  pagination={{ page, perPage, total, totalPages }}
  onPageChange={setPage}
  onPerPageChange={setPerPage}
  onRefresh={refetch}
  emptyState={{
    title: "Nenhuma cobrança",
    description: "Crie sua primeira cobrança",
    actionLabel: "Criar",
    onAction: () => navigate("/new"),
  }}
/>

On this page