X Enterprises
Composables

useDataTable

Manages data table state for sorting, pagination, row selection, and column filtering.

useDataTable

Central state composable for interactive data tables. Pass your raw data array and an options object; get back a rows computed that reflects the current sort, filter, and pagination window, plus helpers for toggling selection and changing page. Consumed by XATable and XADataTable components.

Usage

const {
  rows,
  sort,
  page,
  pageSize,
  pageCount,
  filters,
  selected,
  setSort,
  setPage,
  setFilter,
  toggleRow,
  selectAll,
  clearSelection,
} = useDataTable(items, { pageSize: 25 })

Returns

KeyTypeDescription
rowsComputedRef<T[]>Filtered, sorted, and paginated slice of the source data.
sortRef<{ column: string; direction: 'asc' | 'desc' } | null>Active sort state.
pageRef<number>Current page number (1-indexed).
pageSizeRef<number>Number of rows per page.
pageCountComputedRef<number>Total number of pages given current filters.
filtersRef<Record<string, unknown>>Active filter map keyed by column name.
selectedRef<T[]>Array of currently selected row objects.
setSort(column: string, direction?: 'asc' | 'desc') => voidToggles or sets sort on a column.
setPage(page: number) => voidNavigates to a page; clamps to valid range.
setFilter(key: string, value: unknown) => voidSets a filter value; pass undefined to clear.
toggleRow(row: T) => voidAdds or removes a row from the selection.
selectAll() => voidSelects all rows in the current page.
clearSelection() => voidEmpties the selection.

Example

const { items, loading } = useXCrud("/api/orders")
const {
  rows,
  page,
  pageCount,
  selected,
  setSort,
  setPage,
  setFilter,
  clearSelection,
} = useDataTable(items, { pageSize: 20 })

function search(query: string) {
  setFilter("q", query)
  setPage(1)
}

AI Context

composable: useDataTable
package: "@xenterprises/nuxt-x-app"
use-when: >
  Any admin list view that needs sortable columns, paginated rows, row
  checkboxes for bulk actions, or column filters. Pair with useXCrud to
  get the raw data, then feed it through useDataTable for UI state.
pairs-with: XATable, XADataTable, XABulkAction, useColumns, useXCrud
Copyright © 2026