Skip to main content

APIs de Ordenación

Estado

El estado de ordenación se almacena en la tabla usando la siguiente estructura:

export type SortDirection = "asc" | "desc";

export type ColumnSort = {
id: string;
desc: boolean;
};

export type SortingState = ColumnSort[];

export type SortingTableState = {
sorting: SortingState;
};

Funciones de Ordenación

Las siguientes funciones de ordenación están integradas en el núcleo de la tabla:

  • alphanumeric
    • Ordena por valores alfanuméricos mixtos sin distinguir entre mayúsculas y minúsculas. Más lento, pero más preciso si tus cadenas contienen números que necesitan ser ordenados naturalmente.
  • alphanumericCaseSensitive
    • Ordena por valores alfanuméricos mixtos con distinción entre mayúsculas y minúsculas. Más lento, pero más preciso si tus cadenas contienen números que necesitan ser ordenados naturalmente.
  • text
    • Ordena por valores de texto/cadena sin distinguir entre mayúsculas y minúsculas. Más rápido, pero menos preciso si tus cadenas contienen números que necesitan ser ordenados naturalmente.
  • textCaseSensitive
    • Ordena por valores de texto/cadena con distinción entre mayúsculas y minúsculas. Más rápido, pero menos preciso si tus cadenas contienen números que necesitan ser ordenados naturalmente.
  • datetime
    • Ordena por tiempo, usa esto si tus valores son objetos Date.
  • basic
    • Ordena usando una comparación básica/estándar a > b ? 1 : a < b ? -1 : 0. Esta es la función de ordenación más rápida, pero puede no ser la más precisa.

Cada función de ordenación recibe 2 filas y un ID de columna y se espera que compare las dos filas usando el ID de columna para devolver -1, 0 o 1 en orden ascendente. Aquí tienes una guía rápida:

RetornoOrden Ascendente
-1a < b
0a === b
1a > b

Esta es la firma de tipo para cada función de ordenación:

export type SortingFn<TData extends AnyData> = {
(rowA: Row<TData>, rowB: Row<TData>, columnId: string): number;
};

Usando Funciones de Ordenación

Las funciones de ordenación pueden ser usadas/referenciadas/definidas pasando lo siguiente a columnDefinition.sortingFn:

  • Una string que referencia una función de ordenación integrada
  • Una string que referencia una función de ordenación personalizada proporcionada a través de la opción tableOptions.sortingFns
  • Una función proporcionada directamente a la opción columnDefinition.sortingFn

La lista final de funciones de ordenación disponibles para el columnDef.sortingFn usa el siguiente tipo:

export type SortingFnOption<TData extends AnyData> =
| "auto"
| SortingFns
| BuiltInSortingFns
| SortingFn<TData>;

Opciones de Definición de Columna

sortingFn

sortingFn?: SortingFn | keyof SortingFns | keyof BuiltInSortingFns

La función de ordenación a usar con esta columna.

Opciones:

sortDescFirst

sortDescFirst?: boolean

Establecer a true para que los conmutadores de ordenación de esta columna comiencen en dirección descendente.

enableSorting

enableSorting?: boolean

Habilita/Deshabilita la ordenación para esta columna.

enableMultiSort

enableMultiSort?: boolean

Habilita/Deshabilita la ordenación múltiple para esta columna.

invertSorting

invertSorting?: boolean

Invierte el orden de la ordenación para esta columna. Esto es útil para valores que tienen una escala invertida de mejor/peor donde los números más bajos son mejores, por ejemplo, una clasificación (1º, 2º, 3º) o una puntuación tipo golf.

sortUndefined

sortUndefined?: 'first' | 'last' | false | -1 | 1 // defaults to 1
  • 'first'
    • Los valores indefinidos se moverán al principio de la lista
  • 'last'
    • Los valores indefinidos se moverán al final de la lista
  • false
    • Los valores indefinidos se considerarán empatados y deberán ser ordenados por el siguiente filtro de columna o el índice original (el que aplique)
  • -1
    • Los valores indefinidos se ordenarán con mayor prioridad (ascendente) (si es ascendente, los indefinidos aparecerán al principio de la lista)
  • 1
    • Los valores indefinidos se ordenarán con menor prioridad (descendente) (si es ascendente, los indefinidos aparecerán al final de la lista)

NOTA: Las opciones 'first' y 'last' son nuevas en la v8.16.0

API de Columna

getAutoSortingFn

getAutoSortingFn: () => SortingFn<TData>;

Devuelve una función de ordenación inferida automáticamente basándose en los valores de las columnas.

getAutoSortDir

getAutoSortDir: () => SortDirection;

Devuelve una dirección de ordenación inferida automáticamente basándose en los valores de las columnas.

getSortingFn

getSortingFn: () => SortingFn<TData>;

Devuelve la función de ordenación resuelta a utilizar para esta columna

getNextSortingOrder

getNextSortingOrder: () => SortDirection | false;

Devuelve el siguiente orden de ordenación.

getCanSort

getCanSort: () => boolean;

Devuelve si esta columna puede ser ordenada.

getCanMultiSort

getCanMultiSort: () => boolean;

Devuelve si esta columna puede ser multi-ordenada.

getSortIndex

getSortIndex: () => number;

Devuelve la posición del índice de ordenación de esta columna dentro del estado de ordenación

getIsSorted

getIsSorted: () => false | SortDirection;

Devuelve si esta columna está ordenada.

getFirstSortDir

getFirstSortDir: () => SortDirection;

Devuelve la primera dirección que debe usarse al ordenar esta columna.

clearSorting

clearSorting: () => void

Elimina esta columna del estado de ordenación de la tabla

toggleSorting

toggleSorting: (desc?: boolean, isMulti?: boolean) => void

Alterna el estado de ordenación de esta columna. Si se proporciona desc, forzará la dirección de ordenación a ese valor. Si se proporciona isMulti, realizará una ordenación múltiple aditiva en la columna (o la alternará si ya está ordenada).

getToggleSortingHandler

getToggleSortingHandler: () => undefined | ((event: unknown) => void)

Devuelve una función que se puede usar para alternar el estado de ordenación de esta columna. Esto es útil para adjuntar un manejador de clic al encabezado de la columna.

Opciones de Tabla

sortingFns

sortingFns?: Record<string, SortingFn>

Esta opción te permite definir funciones de ordenación personalizadas que pueden ser referenciadas en la opción sortingFn de una columna por su clave. Ejemplo:

declare module "@tanstack/table-core" {
interface SortingFns {
myCustomSorting: SortingFn<unknown>;
}
}

const column = columnHelper.data("key", {
sortingFn: "myCustomSorting",
});

const table = useReactTable({
columns: [column],
sortingFns: {
myCustomSorting: (rowA: any, rowB: any, columnId: any): number =>
rowA.getValue(columnId).value < rowB.getValue(columnId).value ? 1 : -1,
},
});

manualSorting

manualSorting?: boolean

Habilita la ordenación manual para la tabla. Si esto es true, se espera que ordenes tus datos antes de pasarlos a la tabla. Esto es útil si estás realizando una ordenación en el lado del servidor.

onSortingChange

onSortingChange?: OnChangeFn<SortingState>

Si se proporciona, esta función será llamada con una updaterFn cuando state.sorting cambie. Esto anula la gestión de estado interna predeterminada, por lo que deberás persistir el cambio de estado de forma total o parcial fuera de la tabla.

enableSorting

enableSorting?: boolean

Habilita/Deshabilita la ordenación para la tabla.

enableSortingRemoval

enableSortingRemoval?: boolean

Habilita/Deshabilita la capacidad de eliminar la ordenación de la tabla.

  • Si es true, cambiar el orden de ordenación circulará como: 'ninguno' -> 'desc' -> 'asc' -> 'ninguno' -> ...
  • Si es false, cambiar el orden de ordenación circulará como: 'ninguno' -> 'desc' -> 'asc' -> 'desc' -> 'asc' -> ...

enableMultiRemove

enableMultiRemove?: boolean

Habilita/deshabilita la capacidad de eliminar ordenaciones múltiples

enableMultiSort

enableMultiSort?: boolean

Habilita/Deshabilita la ordenación múltiple para la tabla.

sortDescFirst

sortDescFirst?: boolean

Si es true, todas las ordenaciones se establecerán por defecto en descendente como su primer estado de alternancia.

getSortedRowModel

getSortedRowModel?: (table: Table<TData>) => () => RowModel<TData>

Esta función se utiliza para recuperar el modelo de fila ordenado. Si se utiliza la ordenación en el lado del servidor, esta función no es necesaria. Para utilizar la ordenación en el lado del cliente, pasa la función getSortedRowModel() exportada desde tu adaptador a tu tabla o implementa la tuya propia.

maxMultiSortColCount

maxMultiSortColCount?: number

Establece un número máximo de columnas que pueden ser multi-ordenadas.

isMultiSortEvent

isMultiSortEvent?: (e: unknown) => boolean

Pasa una función personalizada que se utilizará para determinar si se debe activar un evento de ordenación múltiple. Se le pasa el evento desde el manejador de alternancia de ordenación y debe devolver true si el evento debe activar una ordenación múltiple.

API de Tabla

setSorting

setSorting: (updater: Updater<SortingState>) => void

Establece o actualiza el estado state.sorting.

resetSorting

resetSorting: (defaultState?: boolean) => void

Restablece el estado de ordenación a initialState.sorting, o se puede pasar true para forzar un restablecimiento a un estado vacío predeterminado [].

getPreSortedRowModel

getPreSortedRowModel: () => RowModel<TData>;

Devuelve el modelo de fila para la tabla antes de que se haya aplicado cualquier ordenación.

getSortedRowModel

getSortedRowModel: () => RowModel<TData>;

Devuelve el modelo de fila para la tabla después de que se haya aplicado la ordenación.