PdfPage.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import React from 'react';
  2. import Page from '../components/Page';
  3. import Annotation from './Annotation';
  4. import { getPdfPage } from '../helpers/pdf';
  5. import useStore from '../store';
  6. type Props = {
  7. index: number;
  8. renderingState: RenderingStateType;
  9. };
  10. const PdfPage: React.FC<Props> = ({ index, renderingState }: Props) => {
  11. const [
  12. { viewport, pdf, rotation, annotations, scale, watermark },
  13. ] = useStore();
  14. const getAnnotationWithPage = (
  15. arr: AnnotationType[],
  16. pageNum: number
  17. ): React.ReactNode[] => {
  18. const result: React.ReactNode[] = [];
  19. arr.forEach((ele: AnnotationType, i: number) => {
  20. const page = ele.obj_attr ? ele.obj_attr.page + 1 : -1;
  21. if (page === pageNum) {
  22. result.push(
  23. <Annotation
  24. key={`annotations_${pageNum + i}`}
  25. scale={scale}
  26. index={i}
  27. {...ele}
  28. />
  29. );
  30. }
  31. });
  32. return result;
  33. };
  34. return (
  35. <Page
  36. pageNum={index}
  37. renderingState={renderingState}
  38. viewport={viewport}
  39. scale={scale}
  40. getPage={(): Promise<any> => getPdfPage(pdf, index)}
  41. rotation={rotation}
  42. watermark={watermark}
  43. annotations={getAnnotationWithPage(annotations, index)}
  44. />
  45. );
  46. };
  47. export default PdfPage;