openmrs-esm-core

O3 Framework / useOpenmrsPagination

Function: useOpenmrsPagination()

useOpenmrsPagination<T>(url, pageSize, options): object

Defined in: packages/framework/esm-react-utils/src/useOpenmrsPagination.ts:59

Most OpenMRS REST endpoints that return a list of objects, such as getAll or search, are server-side paginated. The server limits the max number of results being returned, and multiple requests are needed to get the full data set if its size exceeds this limit. The max number of results per request is configurable server-side with the key “webservices.rest.maxResultsDefault”. See: https://openmrs.atlassian.net/wiki/spaces/docs/pages/25469882/REST+Module

For any UI that displays a paginated view of the full data set, we MUST handle the server-side pagination properly, or else the UI does not correctly display the full data set. This hook does that by providing callback functions for navigating to different pages of the results, and lazy-loads the data on each page as needed.

Note that this hook is not suitable for use for situations that require client-side sorting or filtering of the data set. In that case, all data must be loaded onto client-side first.

Type Parameters

T

T

Parameters

url

The URL of the paginated rest endpoint.
It should be populated with any needed GET params, except limit, startIndex or totalCount, which will be overridden and manipulated by the goTo* callbacks. Similar to useSWR, this param can be null to disable fetching.

string URL

pageSize

number

The number of results to return per page / fetch. Note that this value MUST NOT exceed “webservices.rest.maxResultsAbsolute”, which should be reasonably high by default (1000).

options

UseServerPaginationOptions<OpenMRSPaginatedResponse<T>> = {}

The options object

Returns

currentPage

currentPage: number

currentPageSize

currentPageSize: number = currentPageSize.current

data

data: undefined | T[]

error

error: any

The error object thrown by the fetcher function.

undefined when there’s no error or when a request is in progress.

goTo()

goTo: (page) => void

Parameters

page

number

Returns

void

goToNext()

goToNext: () => void

Returns

void

goToPrevious()

goToPrevious: () => void

Returns

void

isLoading

isLoading: boolean

Whether the request is in initial loading state.

true only during the initial load when there’s no cached data. Unlike isValidating, this becomes false once data is available.

isValidating

isValidating: boolean

Whether the request is currently being validated (loading fresh data).

true during initial load, revalidation, or when mutate is called with a promise or async function.

mutate

mutate: KeyedMutator<FetchResponse<OpenMRSPaginatedResponse<T>>>

Function to mutate the cached data for this specific key.

This is a bound version of the global mutate function that automatically uses the current key, providing type safety and convenience.

paginated

paginated: boolean

showNextButton

showNextButton: boolean

showPreviousButton

showPreviousButton: boolean

totalCount

totalCount: number = totalCount.current

totalPages

totalPages: number

See