async function onScroll()

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));
            }
        }
    }