Table

useTablePagination

Composable interno per la paginazione client-side delle tabelle con navigazione e cambio rows-per-page.

Composable interno — utilizzato dal componente DataTable della libreria.

Firma TypeScript

export function useTablePagination(options?: UseTablePaginationOptions): UseTablePaginationResult

interface UseTablePaginationOptions {
  initialFirst?: number;  // default: 0
  initialRows?: number;   // default: 10
}

export interface UseTablePaginationResult {
  currentFirst: Ref<number>;
  currentRows: Ref<number>;
  paginateData: <T>(data: T[]) => T[];
  handlePageChange: (first: number, rows: number) => PageEvent;
  pageInfo: (totalRecords: number) => PageInfo;
  goToFirstPage: () => void;
  goToLastPage: (totalRecords: number) => void;
  goToPage: (page: number, totalRecords: number) => void;
  setRows: (rows: number) => void;
}

export interface PageInfo {
  first: number;
  rows: number;
  page: number;      // 0-indexed
  pageCount: number;
}

Parametri

ParametroTipoDefaultDescrizione
initialFirstnumber0Indice del primo record
initialRowsnumber10Righe per pagina iniziale

Valore di Ritorno

ProprietàTipoDescrizione
currentFirstRef<number>Indice del primo record della pagina corrente
currentRowsRef<number>Righe per pagina
paginateData<T>(data: T[]) => T[]Esegue lo slice dei dati per la pagina corrente
handlePageChange(first, rows) => PageEventAggiorna first/rows e ritorna l'evento pagina
pageInfo(totalRecords) => PageInfoCalcola page e pageCount dato il totale
goToFirstPage() => voidTorna alla prima pagina
goToLastPage(totalRecords) => voidVa all'ultima pagina
goToPage(page, totalRecords) => voidVa a una pagina specifica (0-indexed, clampato ai limiti)
setRows(rows) => voidCambia rows-per-page e resetta a prima pagina

Esempio

const { currentFirst, currentRows, paginateData, handlePageChange } = useTablePagination({
  initialFirst: 0,
  initialRows: 25
})

// Applica paginazione lato client
const paginatedRows = computed(() => paginateData(sortedRows.value))

// Handler del Paginator component
const onPageChange = (event: { first: number; rows: number }) => {
  const pageEvent = handlePageChange(event.first, event.rows)
  emit('page', pageEvent)
}

Note

  • paginateData usa semplicemente Array.slice(first, first + rows).
  • setRows resetta currentFirst a 0 per evitare di trovarsi su una pagina inesistente.
  • goToPage usa Math.max(0, Math.min(page, pageCount - 1)) per il clamping.
  • Factory useTablePaginationWithSync(firstProp, rowsProp, options) esportata per sync automatico con props v-model.
  • pageInfo.page e 0-indexed (la prima pagina e la pagina 0).