LimitOffsetPaginator

Source
import { LimitOffsetPaginator } from "@prestojs/util";

Limit & offset based paginator

Expects a limit key in the response. See getPaginationState for how to customise this if your backend implementation differs.

API

new LimitOffsetPaginator(currentStatePair,internalStatePair)

Source
ParameterTypeDescription
*currentStatePairnull
*internalStatePairnull

Methods

Go to the first page.

void

Return the state for the first page

Does not transition state. To transition state call first instead.

LimitOffsetPaginationState
KeyTypeDescription
limitnumber|string
offsetnumber|string
ParameterTypeDescription
*props.optionsoptions
*props.queryany
PaginatorRequestOptions
KeyTypeDescription
headersHeadersInit|Record

Any headers to add to the request. You can unset default headers that might be specified in the default Endpoint.defaultConfig.requestInit by setting the value to undefined.

queryRecord

Any query request parameters

urlArgsRecord

Any arguments for the URL

Returns true if there's more results after the current page

boolean

Go to the last page.

If the last page is not yet known because results haven't been returned this function does nothing.

void

Return the state for the last page. If the last page isn't yet known (eg. results haven't yet been returned) then null will be returned.

Does not transition state. To transition state call last instead.

One of the following:

LimitOffsetPaginationState
KeyTypeDescription
limitnumber|string
offsetnumber|string

OR

null

Return the state for the specified limit

Does not transition state. To transition state call setLimit instead.

ParameterTypeDescription
*limitnumber|null
LimitOffsetPaginationState
KeyTypeDescription
limitnumber|string
offsetnumber|string

Go to the next page

void

Return the state for the next page

Does not transition state. To transition state call next instead.

One of the following:

LimitOffsetPaginationState
KeyTypeDescription
limitnumber|string
offsetnumber|string

OR

null

Return the state for the specified offset

Does not transition state. To transition state call offsetState instead.

ParameterTypeDescription
*offsetnumber|null
LimitOffsetPaginationState
KeyTypeDescription
limitnumber|string
offsetnumber|string

Go to the previous page.

void

Return the state for the previous page

Does not transition state. To transition state call previous instead.

One of the following:

LimitOffsetPaginationState
KeyTypeDescription
limitnumber|string
offsetnumber|string

OR

null

Set the limit

ParameterTypeDescription
*limitnumber|null
void
ParameterTypeDescription
*offsetnumber|null
void

Sets the internal data based on response. Expects limit to be in response data.

See getPaginationState for how to customise this if your backend implementation differs.

ParameterTypeDescription
*props.limitany
*props.totalany
void

Static Methods

ParameterTypeDescription
requestDetails.decodedBodyany

The value returned by decodedBody. See Endpoint.execute.

This may be a sub-key of the data returned by Endpoint.execute, eg. if the path option is used in paginationMiddleware. eg. If decodedBody from the Endpoint was

{
users: {
count: 10,
results: [...],
}
extraDetails: {...}
}

and paginationMiddleware was used with path: 'users' then decodedBody would be:

{
count: 10,
results: [...]
}
requestDetails.queryRecord

Any query string parameters

requestDetails.responseResponse

The Response object, if available

*requestDetails.urlstring

Resolved URL

requestDetails.urlArgsRecord

Any arguments used to resolve URL

One of the following:

Record

OR

false

Properties

The current limit

The current offset

The total number of records available. This will be null before the first response is received.

Inherited Methods

Paginator 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).

ParameterTypeDescription
*currentStatePairany

The state object and setter (eg. from useState) that is used to store and transition pagination state. Using this you can do things like easily store state in the URL (eg. using useUrlQueryState) or other data sources.

*internalStatePairany

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 useState here is fine.

void

Inherited Properties

True once setResponse has been called and pagination state is known.