Table

useTableSort

Composable interno per ordinamento singolo e multi-colonna con dataType e icone configurabili.

Composable interno — utilizzato dal componente DataTable della libreria.

Firma TypeScript

export function useTableSort(options?: UseTableSortOptions): UseTableSortResult

interface UseTableSortOptions {
  initialSortField?: string;
  initialSortOrder?: SortOrder;    // 1 | -1 | null
  sortMode?: 'single' | 'multiple';
  removableSort?: boolean;         // default: false
}

export interface UseTableSortResult {
  currentSortField: Ref<string>;
  currentSortOrder: Ref<SortOrder>;
  multiSortMeta: Ref<SortMeta[]>;
  handleSort: (field: string, dataType?: ColumnDataType, multiSortKey?: boolean) => { field, order, multiSortMeta };
  getSortIcon: (field: string) => string;
  getSortOrder: (field: string) => SortOrder;
  getSortIndex: (field: string) => number | null;
  sortData: <T>(data: T[], getValueFn: (item: T, field: string) => unknown, getDataTypeFn?: (field: string) => ColumnDataType | undefined) => T[];
  resetSort: () => void;
  setSort: (field: string, order: SortOrder, dataType?: ColumnDataType) => void;
  setMultiSort: (sortMeta: SortMeta[]) => void;
}

export type SortOrder = 1 | -1 | null
export type ColumnDataType = 'string' | 'number' | 'date' | 'boolean'

Parametri

ParametroTipoDescrizione
initialSortFieldstringCampo iniziale di ordinamento
initialSortOrderSortOrderOrdine iniziale (1=asc, -1=desc, null=nessuno)
sortMode'single' | 'multiple'Modalita ordinamento (default: 'single')
removableSortbooleanPermette di rimuovere l'ordinamento con terzo click

Valore di Ritorno

ProprietàTipoDescrizione
currentSortFieldRef<string>Campo correntemente ordinato
currentSortOrderRef<SortOrder>Ordine corrente (1, -1, null)
multiSortMetaRef<SortMeta[]>Metadati per multi-sort
handleSortfunzioneGestisce click su header; cicla asc→desc→null (se removable)
getSortIcon(field) => stringIcona da mostrare nell'header (usa icone da ConfigPlugin)
getSortIndex(field) => number | nullIndice (1-based) del campo nel multi-sort
sortDatafunzioneOrdina un array di dati in base allo stato corrente
resetSort() => voidRipristina all'ordinamento iniziale

Esempio

const { currentSortField, handleSort, getSortIcon, sortData } = useTableSort({
  initialSortField: 'name',
  initialSortOrder: 1,
  removableSort: true
})

// Click su header colonna
const onHeaderClick = (field: string, event: MouseEvent) => {
  const result = handleSort(field, 'string', event.ctrlKey)
  emit('sort', result)
}

// Ordina i dati lato client
const sorted = sortData(rows, (item, field) => item[field])

Note

  • handleSort con multiSortKey=true (Ctrl+click) aggiunge/modifica/rimuove il campo nel multi-sort senza resettare gli altri.
  • sortData supporta dataType per confronto tipizzato: number (numerico), date (Date o stringa parsabile), boolean, string (localeCompare).
  • getSortIcon legge le icone da ConfigPlugin (tabella icone sort: sortNeutral, sortAsc, sortDesc).
  • Factory useTableSortWithSync(sortFieldProp, sortOrderProp, options) esportata per sync automatico con props v-model.