in web/src/shared/components/categories-picker/categories-picker.tsx [26:57]
function createCategoriesPagingCachedLoader<TItem, TId>(
cache: React.MutableRefObject<PagingCache<TItem>>,
fetcher: PagingFetcher<TItem>
) {
return useCallback(
async (request: LazyDataSourceApiRequest<TItem, TId, unknown>) => {
const { range, search = '' } = request;
const requestFrom = range?.from || 0;
const requestCount = range?.count || 0;
if (search !== cache.current.search) {
const response = await fetcher(1, pageSizes._100, search, [], {
field: 'name',
direction: SortingDirection.ASC
});
cache.current = { page: 1, cache: response.data, search };
return { items: response.data };
} else {
const nextPage = Math.floor((requestFrom + requestCount) / pageSizes._100) + 1;
if (nextPage !== cache.current.page) {
const response = await fetcher(nextPage, pageSizes._100, search, [], {
field: 'name',
direction: SortingDirection.ASC
});
cache.current = { page: nextPage, cache: response.data, search };
return { items: response.data };
}
return { items: cache.current.cache.slice(requestFrom, requestCount) };
}
},
[cache.current]
);
}