Table

useTableSelection

Composable interno per selezione righe singola, multipla e checkbox con eventi di selezione tipizzati.

Composable interno — utilizzato dal componente DataTable della libreria.

Firma TypeScript

export function useTableSelection<T = unknown>(
  options?: UseTableSelectionOptions<T>
): UseTableSelectionResult<T>

interface UseTableSelectionOptions<T> {
  selectionMode?: 'single' | 'multiple' | 'checkbox';
  initialSelection?: T[];
  dataKey?: string;   // default: 'id'
}

export interface UseTableSelectionResult<T> {
  selectedRows: Ref<T[]>;
  isRowSelected: (row: T) => boolean;
  isPartiallySelected: ComputedRef<boolean>;
  isAllSelected: ComputedRef<boolean>;
  toggleRowSelection: (row: T, event?: MouseEvent) => RowSelectEvent<T> | null;
  toggleAllSelection: (rows: T[]) => void;
  clearSelection: () => void;
  selectRows: (rows: T[]) => void;
  setSelection: (rows: T[]) => void;
}

export interface RowSelectEvent<T> {
  originalEvent?: MouseEvent;
  data: T;
  type: 'row-select' | 'row-unselect';
}

Parametri

ParametroTipoDefaultDescrizione
selectionMode'single' | 'multiple' | 'checkbox''single'Modalita di selezione
initialSelectionT[][]Selezione iniziale
dataKeystring'id'Campo usato per confrontare le righe per identita

Valore di Ritorno

ProprietàTipoDescrizione
selectedRowsRef<T[]>Array delle righe correntemente selezionate
isRowSelected(row: T) => booleanVerifica se una riga e selezionata
isPartiallySelectedComputedRef<boolean>True se alcune (non tutte) le righe sono selezionate — per checkbox header indeterminate
isAllSelectedComputedRef<boolean>True se tutte le righe visibili sono selezionate
toggleRowSelection(row, event?) => RowSelectEvent | nullSeleziona/deseleziona una riga; ritorna l'evento o null se nessuna variazione
toggleAllSelection(rows: T[]) => voidSeleziona tutte o deseleziona tutte le righe passate
clearSelection() => voidAzzera la selezione
selectRows(rows: T[]) => voidAggiunge righe alla selezione corrente
setSelection(rows: T[]) => voidSostituisce completamente la selezione

Esempio

const { selectedRows, isRowSelected, toggleRowSelection, toggleAllSelection, isPartiallySelected } =
  useTableSelection<User>({
    selectionMode: 'checkbox',
    dataKey: 'id',
  })

// Click su checkbox riga
const onRowCheckboxClick = (row: User, event: MouseEvent) => {
  const selEvent = toggleRowSelection(row, event)
  if (selEvent) emit('row-select', selEvent)
}

// Click su checkbox header
const onHeaderCheckboxClick = () => {
  toggleAllSelection(allRows.value)
}

Note

  • Il confronto delle righe usa dataKey quando disponibile; altrimenti confronto per riferimento (===).
  • toggleRowSelection in modalita single deseleziona sempre la riga precedente prima di selezionare quella nuova.
  • isPartiallySelected e isAllSelected dipendono dalle righe passate a toggleAllSelection; devono riflettere le righe visibili/filtrate, non il dataset completo.
  • In modalita multiple, Ctrl+click aggiunge/rimuove dalla selezione; click semplice sostituisce la selezione.
  • toggleRowSelection ritorna null quando la selezione non cambia (click su riga gia selezionata in single mode senza deselect).