import { memo, useEffect, useRef } from 'react'; import { AreaHighlight, Highlight, IHighlight, PdfHighlighter, PdfLoader, Popup, } from 'react-pdf-highlighter'; import { useCatchDocumentError } from '@/components/pdf-previewer/hooks'; import { Spin } from '@/components/ui/spin'; import FileError from '@/pages/document-viewer/file-error'; import styles from './index.less'; export interface IProps { highlights: IHighlight[]; setWidthAndHeight: (width: number, height: number) => void; url: string; } const HighlightPopup = ({ comment, }: { comment: { text: string; emoji: string }; }) => comment.text ? (
{comment.emoji} {comment.text}
) : null; // TODO: merge with DocumentPreviewer const PdfPreview = ({ highlights: state, setWidthAndHeight, url }: IProps) => { // const url = useGetDocumentUrl(); const ref = useRef<(highlight: IHighlight) => void>(() => {}); const error = useCatchDocumentError(url); const resetHash = () => {}; useEffect(() => { if (state.length > 0) { ref?.current(state[0]); } }, [state]); return (
} workerSrc="/pdfjs-dist/pdf.worker.min.js" errorMessage={{error}} > {(pdfDocument) => { pdfDocument.getPage(1).then((page) => { const viewport = page.getViewport({ scale: 1 }); const width = viewport.width; const height = viewport.height; setWidthAndHeight(width, height); }); return ( event.altKey} onScrollChange={resetHash} scrollRef={(scrollTo) => { ref.current = scrollTo; }} onSelectionFinished={() => null} highlightTransform={( highlight, index, setTip, hideTip, viewportToScaled, screenshot, isScrolledTo, ) => { const isTextHighlight = !Boolean( highlight.content && highlight.content.image, ); const component = isTextHighlight ? ( ) : ( {}} /> ); return ( } onMouseOver={(popupContent) => setTip(highlight, () => popupContent) } onMouseOut={hideTip} key={index} > {component} ); }} highlights={state} /> ); }} ); }; export default memo(PdfPreview);