import React, { useEffect, useState, useRef } from 'react'; import _ from 'lodash'; import Viewer from '../components/Viewer'; import PdfPage from './PdfPage'; import { watchScroll } from '../helpers/utility'; import useStore from '../store'; type Props = { scrollToUpdate: (state: ScrollStateType) => void; }; const PdfPages: React.FC = ({ scrollToUpdate }: Props) => { const [elements, setElement] = useState([]); const containerRef = useRef(null); const [ { totalPage, currentPage, viewport, rotation, displayMode, annotations }, ] = useStore(); const createPages = (): void => { const pagesContent: React.ReactNode[] = []; for (let i = 1; i <= totalPage; i += 1) { const key = `page-${i}`; const component = ( ); pagesContent.push(component); } setElement(pagesContent); }; const updatePages = (): void => { const renderingIndexQueue = _.range(currentPage - 1, currentPage + 2); let index = currentPage - 4; const end = currentPage + 3; while (currentPage) { if (elements[index]) { const pageNum = index + 1; const key = `page-${pageNum}`; elements[index] = ( ); } index += 1; if (index >= end) break; } if (elements.length) { setElement([...elements]); } }; useEffect(() => { createPages(); watchScroll(containerRef.current, scrollToUpdate); }, []); useEffect(() => { updatePages(); }, [currentPage, viewport, rotation, annotations]); return ( {elements} ); }; export default PdfPages;