import React, { useEffect, useRef, } from 'react'; import Watermark from '../Watermark'; import { renderPdfPage } from '../../helpers/pdf'; import { RenderingStateType, ViewportType, WatermarkType, } from '../../constants/type'; import { PageWrapper, PdfCanvas, AnnotationLayer, TextLayer, WatermarkLayer, } from './styled'; type Props = { pageNum: number; renderingState?: RenderingStateType; getPage?: () => void; viewport: ViewportType; rotation?: number; scale: number; annotations?: React.ReactNode[]; drawing?: React.ReactNode[]; watermark?: WatermarkType; }; const PageView: React.FC = ({ pageNum, getPage, viewport, renderingState = 'PAUSED', rotation, scale, annotations = [], watermark = {}, }: Props) => { const rootEle = useRef(null); let pdfPage: any = null; const renderPage = async (): Promise => { if (getPage) { pdfPage = await getPage(); if (rootEle.current) { await renderPdfPage({ rootEle: rootEle.current, pdfPage, viewport, }); } } }; useEffect(() => { if (renderingState === 'RENDERING') { renderPage(); } else if (pdfPage && renderingState === 'LOADING') { pdfPage.cleanup(); } }, [renderingState, viewport]); useEffect(() => (): void => { if (pdfPage) pdfPage.cleanup(); }, []); return ( { renderingState === 'LOADING' ? ( <> ) : ( <> {watermark.text || watermark.imagepath ? ( ) : ''} {annotations} ) } ); }; export default PageView;