import { AnnotationsLayer } from "@thorium/components/AnnotationsLayer"; import "react-pdf/dist/Page/TextLayer.css"; import "react-pdf/dist/Page/AnnotationLayer.css"; import Button from "@thorium/ui/Button"; import { Icon } from "@thorium/ui/Icon"; import { useState } from "react"; import { pdfjs } from "react-pdf"; import { Document, Page } from "react-pdf"; import "./PDFViewer.css"; pdfjs.GlobalWorkerOptions.workerSrc = new URL( "pdfjs-dist/build/pdf.worker.min.mjs", import.meta.url, ).toString(); export function PDFViewer({ url, annotations, onNewAnnotation, onClearAnnotations, onUndoAnnotation, }: { url: string; annotations: [number, number, number][][][]; onNewAnnotation: (points: [number, number, number][], page: number) => Promise; onClearAnnotations: (page: number) => void; onUndoAnnotation: (page: number) => void; }) { const [numPages, setNumPages] = useState(); const [pageNumber, setPageNumber] = useState(1); function onDocumentLoadSuccess({ numPages }: { numPages: number }): void { setNumPages(numPages); } const [dims, setDims] = useState({ height: 0, left: 0, top: 0, }); return ( <> {annotations[pageNumber - 1] && annotations[pageNumber - 1].length > 0 ? ( <>
) : null}
{ const rect = node?.getBoundingClientRect(); if (!rect) return; if (rect.height !== dims.height || rect.left !== dims.left || rect.top !== dims.top) { const { height, left, top } = rect; setDims({ height, left, top }); } }} > {dims.height && ( )} { await onNewAnnotation(points, pageNumber - 1); }} />
Page {pageNumber} of {numPages}
); }