Package Exports
- react-select-async-paginate
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-select-async-paginate) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
react-select-async-paginate
Wrapper above react-select that supports pagination on menu scroll.
Installation
npm install react-select react-select-async-paginateor
yarn add react-select react-select-async-paginateUsage
AsyncPaginate is an alternative of Select.Async but supports loading page by page. It is wrapper above default react-select thus it accepts all props of default Select except isLoading. And there are some new props:
loadOptions
Required. Async function that take two arguments:
- Current value of search input.
- Loaded options for current search.
It should return next object:
{
options: [{ label: 'label', value: 'value' }, ...],
hasMore: true/false,
}It similar to loadOptions from Select.Async but there is some differences:
- Loaded options as 2nd argument.
- Not supports callback.
- Should return
hasMorefor detect end of options list for current search.
cacheUniq
Not required. Can take any value. When this prop changed, AsyncPaginate cleans all cached options.
selectRef
Ref for take react-select instance.
Example
import 'react-select/dist/react-select.css';
import AsyncPaginate from 'react-select-async-paginate';
...
/*
* assuming the API returns something like this:
* const json = {
* results: [
* {
* value: 1,
* label: 'Audi',
* },
* {
* value: 2,
* label: 'Mercedes',
* },
* {
* value: 3,
* label: 'BMW',
* },
* ],
* has_more: true,
* };
*/
async function loadOptions(search, loadedOptions) {
const response = await fetch(`/awesome-api-url/?search=${search}&offset=${loadedOptions.length}`);
const responseJSON = await response.json();
return {
options: responseJSON.results,
hasMore: responseJSON.has_more,
};
}
<AsyncPaginate
value={value}
loadOptions={loadOptions}
onChange={setValue}
/>