APIs de filtrado global
Puede filtrar
La capacidad de una columna para ser filtrada globalmente se determina por lo siguiente:
- La columna fue definida con un
accessorKey/accessorFnválido. - Si se proporciona,
options.getColumnCanGlobalFilterdevuelvetruepara la columna dada. Si no se proporciona, se asume que la columna es filtrable globalmente si el valor en la primera fila es de tipostringonumber. column.enableColumnFilterno está establecido enfalseoptions.enableColumnFiltersno está establecido enfalseoptions.enableFiltersno está establecido enfalse
Estado
El estado del filtro se almacena en la tabla usando la siguiente forma:
export interface GlobalFilterTableState {
globalFilter: any;
}
Funciones de filtro
Puede usar las mismas funciones de filtro que están disponibles para el filtrado de columnas para el filtrado global. Consulte el Filtrado de columnas para obtener más información sobre las funciones de filtro.
Uso de las funciones de filtro
Las funciones de filtro se pueden usar/referenciar/definir pasando lo siguiente a options.globalFilterFn:
- Una
stringque referencia una función de filtro incorporada - Una función proporcionada directamente a la opción
options.globalFilterFn
La lista final de funciones de filtro disponibles para las opciones tableOptions.globalFilterFn usa el siguiente tipo:
export type FilterFnOption<TData extends AnyData> =
| "auto"
| BuiltInFilterFn
| FilterFn<TData>;
Metadatos del filtro
El filtrado de datos a menudo puede exponer información adicional sobre los datos que se puede usar para ayudar en otras operaciones futuras sobre los mismos datos. Un buen ejemplo de este concepto es un sistema de clasificación como el de match-sorter que simultáneamente clasifica, filtra y ordena los datos. Si bien utilidades como match-sorter tienen mucho sentido para tareas de filtro+ordenación unidimensionales, la arquitectura desacoplada de filtrado/ordenación al construir una tabla las hace muy difíciles y lentas de usar.
Para que un sistema de clasificación/filtrado/ordenación funcione con tablas, las filterFn pueden opcionalmente marcar los resultados con un valor de metadato de filtro que se puede usar más tarde para ordenar/agrupar/etc. los datos a su gusto. Esto se hace llamando a la función addMeta proporcionada a su filterFn personalizado.
A continuación se muestra un ejemplo usando nuestro propio paquete match-sorter-utils (una bifurcación de utilidad de match-sorter) para clasificar, filtrar y ordenar los datos
import { sortingFns } from "@tanstack/[adapter]-table";
import { rankItem, compareItems } from "@tanstack/match-sorter-utils";
const fuzzyFilter = (row, columnId, value, addMeta) => {
// Clasificar el elemento
const itemRank = rankItem(row.getValue(columnId), value);
// Almacenar la información de clasificación
addMeta(itemRank);
// Devolver si el elemento debe ser filtrado (dentro/fuera)
return itemRank.passed;
};
const fuzzySort = (rowA, rowB, columnId) => {
let dir = 0;
// Solo ordenar por clasificación si la columna tiene información de clasificación
if (rowA.columnFiltersMeta[columnId]) {
dir = compareItems(
rowA.columnFiltersMeta[columnId]!,
rowB.columnFiltersMeta[columnId]!,
);
}
// Proporcionar una alternativa alfanumérica para cuando las clasificaciones de los elementos son iguales
return dir === 0 ? sortingFns.alphanumeric(rowA, rowB, columnId) : dir;
};
Opciones de definición de columna
enableGlobalFilter
enableGlobalFilter?: boolean
Habilita/deshabilita el filtro global para esta columna.
API de columna
getCanGlobalFilter
getCanGlobalFilter: () => boolean;
Devuelve si la columna puede ser filtrada globalmente o no. Se establece en false para deshabilitar que una columna sea escaneada durante el filtrado global.
API de fila
columnFiltersMeta
columnFiltersMeta: Record<string, any>;
El mapa de metadatos de los filtros de columna para la fila. Este objeto rastrea cualquier metadato de filtro para una fila según se proporcione opcionalmente durante el proceso de filtrado.
Opciones de tabla
filterFns
filterFns?: Record<string, FilterFn>
Esta opción le permite definir funciones de filtro personalizadas que pueden ser referenciadas en la opción filterFn de una columna por su clave.
Ejemplo:
declare module "@tanstack/table-core" {
interface FilterFns {
myCustomFilter: FilterFn<unknown>;
}
}
const column = columnHelper.data("key", {
filterFn: "myCustomFilter",
});
const table = useReactTable({
columns: [column],
filterFns: {
myCustomFilter: (rows, columnIds, filterValue) => {
// devolver las filas filtradas
},
},
});
filterFromLeafRows
filterFromLeafRows?: boolean
Por defecto, el filtrado se realiza desde las filas padre hacia abajo (por lo que si una fila padre es filtrada, todos sus hijos también lo serán). Establecer esta opción en true hará que el filtrado se realice desde las filas hoja hacia arriba (lo que significa que las filas padre se incluirán siempre y cuando una de sus filas hijas o nietas también esté incluida).
maxLeafRowFilterDepth
maxLeafRowFilterDepth?: number
Por defecto, el filtrado se realiza para todas las filas (profundidad máxima de 100), sin importar si son filas padre de nivel raíz o filas hoja hijas de una fila padre. Establecer esta opción en 0 hará que el filtrado solo se aplique a las filas padre de nivel raíz, permaneciendo todas las sub-filas sin filtrar. De manera similar, establecer esta opción en 1 hará que el filtrado solo se aplique a las filas hoja hijas de 1 nivel de profundidad, y así sucesivamente.
Esto es útil para situaciones en las que desea que toda la jerarquía de hijos de una fila sea visible independientemente del filtro aplicado.
enableFilters
enableFilters?: boolean
Habilita/deshabilita todos los filtros para la tabla.
manualFiltering
manualFiltering?: boolean
Deshabilita el uso de getFilteredRowModel para filtrar datos. Esto puede ser útil si su tabla necesita soportar dinámicamente el filtrado tanto del lado del cliente como del lado del servidor.
getFilteredRowModel
getFilteredRowModel?: (
table: Table<TData>
) => () => RowModel<TData>
Si se proporciona, esta función se llama una vez por tabla y debe devolver una nueva función que calculará y devolverá el modelo de fila para la tabla cuando esta sea filtrada.
- Para el filtrado del lado del servidor, esta función es innecesaria y puede ignorarse, ya que el servidor ya debería devolver el modelo de fila filtrado.
- Para el filtrado del lado del cliente, esta función es obligatoria. Se proporciona una implementación predeterminada a través de la exportación
{ getFilteredRowModel }de cualquier adaptador de tabla.
Ejemplo:
import { getFilteredRowModel } from '@tanstack/[adapter]-table'
getFilteredRowModel: getFilteredRowModel(),
})
globalFilterFn
globalFilterFn?: FilterFn | keyof FilterFns | keyof BuiltInFilterFns
La función de filtro a usar para el filtrado global.
Opciones:
- Una
stringque referencia una función de filtro incorporada) - Una
stringque referencia funciones de filtro personalizadas proporcionadas a través de la opcióntableOptions.filterFns - Una función de filtro personalizada
onGlobalFilterChange
onGlobalFilterChange?: OnChangeFn<GlobalFilterState>
Si se proporciona, esta función se llamará con una updaterFn cuando state.globalFilter cambie. Esto anula la gestión de estado interno predeterminada, por lo que deberá persistir el cambio de estado, ya sea total o parcialmente, fuera de la tabla.
enableGlobalFilter
enableGlobalFilter?: boolean
Habilita/deshabilita el filtro global para la tabla.
getColumnCanGlobalFilter
getColumnCanGlobalFilter?: (column: Column<TData>) => boolean
Si se proporciona, esta función se llamará con la columna y debería devolver true o false para indicar si esta columna debe usarse para el filtrado global.
Esto es útil si la columna puede contener datos que no son string o number (es decir, undefined).
API de tabla
getPreFilteredRowModel
getPreFilteredRowModel: () => RowModel<TData>;
Devuelve el modelo de fila para la tabla antes de que se haya aplicado cualquier filtrado de columna.
getFilteredRowModel
getFilteredRowModel: () => RowModel<TData>;
Devuelve el modelo de fila para la tabla después de que se haya aplicado el filtrado de columna.
setGlobalFilter
setGlobalFilter: (updater: Updater<any>) => void
Establece o actualiza el estado state.globalFilter.
resetGlobalFilter
resetGlobalFilter: (defaultState?: boolean) => void
Restablece el estado de globalFilter a initialState.globalFilter, o se puede pasar true para forzar un restablecimiento a un estado en blanco predeterminado (undefined).
getGlobalAutoFilterFn
getGlobalAutoFilterFn: (columnId: string) => FilterFn<TData> | undefined;
Actualmente, esta función devuelve la función de filtro includesString incorporada. En futuras versiones, puede devolver funciones de filtro más dinámicas basadas en la naturaleza de los datos proporcionados.
getGlobalFilterFn
getGlobalFilterFn: (columnId: string) => FilterFn<TData> | undefined;
Devuelve la función de filtro global (definida por el usuario o automática, según la configuración) para la tabla.