PageNumberPaginator
SourcePage number based paginator
Expects a total or count key and optional pageSize key in the response. total or count should be the total
number of records available.
If your backend differs from this (for example by storing the values in different named keys or in headers instead of
the response body) you can handle that by extending this class and implementing getPaginationState or
by passing getPaginationState to usePaginator.
API
Constructor
new PageNumberPaginator(currentStatePair,internalStatePair)
Source| Parameter | Type | Description | |
|---|---|---|---|
| * | currentStatePair | null | |
| * | internalStatePair | null |
Methods
firstState()
SourceReturn the state for the first page
Does not transition state. To transition state call first instead.
| Key | Type | Description |
|---|---|---|
| page | string|number | |
| pageSize | string|number |
getRequestInit(props)
SourceAdds page and pageSize into query options passed through to the endpoint
| Parameter | Type | Description | |
|---|---|---|---|
| * | props.options | options | |
| * | props.query | any |
| Key | Type | Description |
|---|---|---|
| headers | HeadersInit|Record | Any headers to add to the request. You can unset default headers that might be specified in the default
|
| query | Record | Any query request parameters |
| urlArgs | Record | Any arguments for the URL |
last()
SourceGo to the last page. If the last page isn't yet known (eg. results haven't yet been returned) then null will be returned.
If the last page is not yet known because results haven't been returned this function does nothing.
lastState()
SourceReturn the state for the first page
Does not transition state. To transition state call last instead.
One of the following:
PageNumberPaginationState| Key | Type | Description |
|---|---|---|
| page | string|number | |
| pageSize | string|number |
OR
nullnextState()
SourceReturn the state for the next page
Does not transition state. To transition state call next instead.
| Key | Type | Description |
|---|---|---|
| page | string|number | |
| pageSize | string|number |
pageSizeState(pageSize)
SourceReturn the state for the specified page size
Does not transition state. To transition state call setPageSize instead.
| Parameter | Type | Description | |
|---|---|---|---|
| * | pageSize | null|number |
| Key | Type | Description |
|---|---|---|
| page | string|number | |
| pageSize | string|number |
pageState(page)
SourceReturn the state for the specified page number
Does not transition state. To transition state call setPage instead.
| Parameter | Type | Description | |
|---|---|---|---|
| * | page | number |
| Key | Type | Description |
|---|---|---|
| page | string|number | |
| pageSize | string|number |
previousState()
SourceReturn the state for the previous page
Does not transition state. To transition state call previous instead.
| Key | Type | Description |
|---|---|---|
| page | string|number | |
| pageSize | string|number |
setPageSize(pageSize)
SourceChange to the specified page size
| Parameter | Type | Description | |
|---|---|---|---|
| * | pageSize | null|number |
setResponse(props)
SourceSets the internal data based on response. Expects total and optionally pageSize to be in
response data.
See getPaginationState for how to customise this if your backend implementation differs.
| Parameter | Type | Description | |
|---|---|---|---|
| * | props.pageSize | number | |
| * | props.total | number |
Static Methods
getPaginationState(requestDetails)
SourceExpects decodedBody to include a key results which should be an array of return records and a variable
count or total that contains the total number of records available.
| Parameter | Type | Description | |
|---|---|---|---|
| requestDetails.decodedBody | any | The value returned by This may be a sub-key of the data returned by
and
| |
| requestDetails.query | Record | Any query string parameters | |
| requestDetails.response | Response | The | |
| * | requestDetails.url | string | Resolved URL |
| requestDetails.urlArgs | Record | Any arguments used to resolve URL |
One of the following:
RecordOR
falseProperties
page: number|null
The current page
pageSize: number|null
The current page size (if known).
total: number|null
The total number of results available on the backend
totalPages: number|null
The total number of pages
Inherited Methods
replaceStateControllers(currentStatePair,internalStatePair)
SourcePaginator receives 2 tuples of a state and state setter pair. This is expected to
match the same interface as useState in React. The following is a valid simple usage:
const paginator = new Paginator(useState(), useState());
Note that we can also pass the state controllers in via replaceStateControllers rather
than in the constructor. This is so we can memoize the Paginator instance which is desirable
when using the paginator as a dependency to React hooks.
As state is passed in and managed external to the class be aware that any data stored
on the class instance will be lost unless written with setCurrentState or setInternalState.
This design is a compromise between allowing a clear interface for how paginators should
be defined and allowing the state to be managed externally (eg. using React state).
| Parameter | Type | Description | |
|---|---|---|---|
| * | currentStatePair | any | The state object and setter (eg. from |
| * | internalStatePair | any | The state object and setter that is used for internal state. Internal state
is stored separately as it does not need to be restored (eg. if you refresh the page). It is used
to store things like the total number of results or the current cursor. Passing |
Inherited Properties
currentState: PageNumberPaginationState
internalState:
responseIsSet: boolean
True once setResponse has been called and pagination state is known.