Table
useTableSort
Composable interno per ordinamento singolo e multi-colonna con dataType e icone configurabili.
Composable interno — utilizzato dal componente
DataTabledella 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
| Parametro | Tipo | Descrizione |
|---|---|---|
initialSortField | string | Campo iniziale di ordinamento |
initialSortOrder | SortOrder | Ordine iniziale (1=asc, -1=desc, null=nessuno) |
sortMode | 'single' | 'multiple' | Modalita ordinamento (default: 'single') |
removableSort | boolean | Permette di rimuovere l'ordinamento con terzo click |
Valore di Ritorno
| Proprietà | Tipo | Descrizione |
|---|---|---|
currentSortField | Ref<string> | Campo correntemente ordinato |
currentSortOrder | Ref<SortOrder> | Ordine corrente (1, -1, null) |
multiSortMeta | Ref<SortMeta[]> | Metadati per multi-sort |
handleSort | funzione | Gestisce click su header; cicla asc→desc→null (se removable) |
getSortIcon | (field) => string | Icona da mostrare nell'header (usa icone da ConfigPlugin) |
getSortIndex | (field) => number | null | Indice (1-based) del campo nel multi-sort |
sortData | funzione | Ordina un array di dati in base allo stato corrente |
resetSort | () => void | Ripristina 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
handleSortconmultiSortKey=true(Ctrl+click) aggiunge/modifica/rimuove il campo nel multi-sort senza resettare gli altri.sortDatasupportadataTypeper confronto tipizzato:number(numerico),date(Date o stringa parsabile),boolean,string(localeCompare).getSortIconlegge le icone daConfigPlugin(tabella icone sort:sortNeutral,sortAsc,sortDesc).- Factory
useTableSortWithSync(sortFieldProp, sortOrderProp, options)esportata per sync automatico con props v-model.