@awsui/components-react
Version:
AWS UI is a collection of [React](https://reactjs.org/) components that help create intuitive, responsive, and accessible user experiences for web applications. It is developed by Amazon Web Services (AWS). This work is available under the terms of the [A
42 lines (41 loc) • 1.82 kB
JavaScript
import { useRef, useCallback } from 'react';
import { fireNonCancelableEvent } from '../../internal/events';
import debounce from '../../internal/debounce';
export var useLoadItems = function (_a) {
var onLoadItems = _a.onLoadItems, options = _a.options, statusType = _a.statusType;
var prevFilteringText = useRef(undefined);
var fireLoadItems = useCallback(function (_a) {
var firstPage = _a.firstPage, samePage = _a.samePage, filteringText = _a.filteringText;
if (prevFilteringText.current === filteringText) {
return;
}
prevFilteringText.current = filteringText;
fireNonCancelableEvent(onLoadItems, { filteringText: filteringText, firstPage: firstPage, samePage: samePage });
}, [onLoadItems]);
var fireDelayedInput = useCallback(debounce(function (_a) {
var value = _a.detail.value;
return fireLoadItems({ firstPage: true, samePage: false, filteringText: value });
}), [fireLoadItems]);
var handleLoadMore = useCallback(function () {
var firstPage = options.length === 0;
statusType === 'pending' &&
fireNonCancelableEvent(onLoadItems, {
firstPage: firstPage,
samePage: false,
filteringText: prevFilteringText.current || ''
});
}, [fireLoadItems, options, statusType]);
var handleRecoveryClick = useCallback(function () {
return fireNonCancelableEvent(onLoadItems, {
firstPage: false,
samePage: true,
filteringText: prevFilteringText.current || ''
});
}, [fireLoadItems]);
return {
fireLoadItems: fireLoadItems,
fireDelayedInput: fireDelayedInput,
handleLoadMore: handleLoadMore,
handleRecoveryClick: handleRecoveryClick
};
};