12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import React, {
- useEffect, useRef,
- } from 'react';
- import { renderPdfPage } from '../../helpers/pdf';
- import { TypeRenderingStates, ViewportType } from '../../constants/type';
- import {
- PageWrapper, PdfCanvas, AnnotationLayer, TextLayer, DrawingLayer, LoadingLayer,
- } from './styled';
- type Props = {
- pageNum: number;
- renderingState?: TypeRenderingStates;
- getPage?: () => void;
- viewport: ViewportType;
- rotation?: number;
- annotations?: React.ReactElement[];
- };
- const PageView: React.FunctionComponent<Props> = ({
- pageNum,
- getPage,
- viewport,
- renderingState = 'PAUSED',
- rotation,
- annotations = [],
- }: Props) => {
- const rootEle = useRef<HTMLDivElement | null>(null);
- let pdfPage: any = null;
- const renderPage = async (): Promise<any> => {
- 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 (
- <PageWrapper
- ref={rootEle}
- id={`page_${pageNum}`}
- data-page-num={pageNum}
- width={viewport.width}
- height={viewport.height}
- rotation={rotation}
- >
- {
- renderingState === 'LOADING' ? (
- <>
- <LoadingLayer />
- <TextLayer data-id="text-layer" />
- </>
- ) : (
- <>
- <PdfCanvas />
- <DrawingLayer data-id="drawing-layer" />
- <TextLayer data-id="text-layer" />
- <AnnotationLayer data-id="annotation-layer">
- {annotations}
- </AnnotationLayer>
- </>
- )
- }
- </PageWrapper>
- );
- };
- export default PageView;
|