in frontend/src/js/components/viewer/PageViewer/PageViewer.tsx [33:52]
async function onScroll() {
if (viewport !== null && state.doc && state.doc.pages.length > 0) {
const viewportTop = viewport.scrollTop;
const viewportBottom = viewportTop + viewport.clientHeight;
const sortedPages = sortBy(state.doc.pages, 'page');
const firstPageInViewport = sortedPages.find(p => p.dimensions.top < viewportBottom && p.dimensions.bottom > viewportTop);
const lastPageInViewport = sortedPages.reverse().find(p => p.dimensions.top < viewportBottom && p.dimensions.bottom > viewportTop);
// if you scroll fast
const nothingInViewport = firstPageInViewport === undefined && lastPageInViewport === undefined;
const spaceAboveFirstPage = firstPageInViewport ? firstPageInViewport.dimensions.top > viewportTop : false;
const spaceBelowLastPage = lastPageInViewport ? lastPageInViewport.dimensions.bottom < viewportBottom : false;
if(nothingInViewport || spaceAboveFirstPage || spaceBelowLastPage) {
dispatch(loadPages(uri, q, viewportTop, viewportBottom));
}
}
}