FesaComponents
DataTableReferencia de API

Hooks

useSmartTable, useTableSearchParams, useTableFilters y los hooks de soporte.

useSmartTable(config)

OpciónTipoDescripción
fetchPage *(params, filterValues) => Promise<DataTableFetchResult>Tu page action. filterValues es Record<string, string[]> con los filtros facetados vigentes.
filterDefinitionsFilterDefinition[]Los filtros del menú.
defaultPageSizenumber (20)Tamaño por defecto (no se escribe en la URL).
legacyFilterKeysRecord<string, string>Nombre nuevo → nombre viejo aceptado al leer.
navigateTostringPrefijo del detalle: doble clic → {navigateTo}/{row.id}.
liveRefresh(refresh) => cleanupSuscripción a eventos externos (SSE…).
paramPrefixstringPrefijo de las claves de URL (multi-tabla).

Devuelve: { smartProps, tableRef, filtersUI, filterValuesRef, searchTextRef, hasUrlParams, hasActiveFilters, clearFilters }.

useTableSearchParams(config?)

La pieza de bajo nivel (la usa useSmartTable). Config: defaultPageSize, filterKeys, legacyFilterKeys, paramPrefix.

Devuelve initialPageIndex/PageSize/Sorting/Filter, hasUrlParams, getFilter(key) y updateParams(fetchParams, filters?) — llamada dentro del fetchFn para mantener la URL al día.

useTableFilters(config)

Config: { definitions, tableRef, getFilter }. Estado + UI de los filtros facetados. Devuelve filtersUI (el menú), valuesRef, asSearchParams(), clearAll() y hasAny.

Los valores viven además en una ref porque el fetchFn se ejecuta antes del siguiente render.

useRowNavigate(prefix, idKey?)

const onRowDoubleClick = useRowNavigate<OrderRow>("/orders");
// fila → /orders/{row.id}   ·   idKey cambia el campo usado como id

useDataTableLiveRefresh(tableRef, subscribe)

useDataTableLiveRefresh(tableRef, (refresh) =>
  subscribeRealtime("order:updated", refresh));

Eventos en ráfaga se agrupan (debounce 300ms) y disparan silentRefetch(). La función de suscripción devuelve su cleanup.

useDataTableRefetch()

Para componentes dentro de la tabla (celdas, diálogos de una celda): devuelve una función que hace silentRefetch() de la tabla contenedora. Fuera de una tabla smart no hace nada.

En esta pagina