| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | 
							- import {
 -   useGetChunkHighlights,
 -   useGetDocumentUrl,
 - } from '@/hooks/documentHooks';
 - import { IChunk } from '@/interfaces/database/knowledge';
 - import { Skeleton } from 'antd';
 - import { useEffect, useRef, useState } from 'react';
 - import {
 -   AreaHighlight,
 -   Highlight,
 -   IHighlight,
 -   PdfHighlighter,
 -   PdfLoader,
 -   Popup,
 - } from 'react-pdf-highlighter';
 - 
 - import styles from './index.less';
 - 
 - interface IProps {
 -   chunk: IChunk;
 -   documentId: string;
 -   visible: boolean;
 - }
 - 
 - const HighlightPopup = ({
 -   comment,
 - }: {
 -   comment: { text: string; emoji: string };
 - }) =>
 -   comment.text ? (
 -     <div className="Highlight__popup">
 -       {comment.emoji} {comment.text}
 -     </div>
 -   ) : null;
 - 
 - const DocumentPreviewer = ({ chunk, documentId, visible }: IProps) => {
 -   const url = useGetDocumentUrl(documentId);
 -   const state = useGetChunkHighlights(chunk);
 -   const ref = useRef<(highlight: IHighlight) => void>(() => {});
 -   const [loaded, setLoaded] = useState(false);
 - 
 -   const resetHash = () => {};
 - 
 -   useEffect(() => {
 -     setLoaded(visible);
 -   }, [visible]);
 - 
 -   useEffect(() => {
 -     if (state.length > 0 && loaded) {
 -       setLoaded(false);
 -       ref.current(state[0]);
 -     }
 -   }, [state, loaded]);
 - 
 -   return (
 -     <div className={styles.documentContainer}>
 -       <PdfLoader
 -         url={url}
 -         beforeLoad={<Skeleton active />}
 -         workerSrc="/pdfjs-dist/pdf.worker.min.js"
 -       >
 -         {(pdfDocument) => (
 -           <PdfHighlighter
 -             pdfDocument={pdfDocument}
 -             enableAreaSelection={(event) => event.altKey}
 -             onScrollChange={resetHash}
 -             scrollRef={(scrollTo) => {
 -               ref.current = scrollTo;
 -               setLoaded(true);
 -             }}
 -             onSelectionFinished={() => null}
 -             highlightTransform={(
 -               highlight,
 -               index,
 -               setTip,
 -               hideTip,
 -               viewportToScaled,
 -               screenshot,
 -               isScrolledTo,
 -             ) => {
 -               const isTextHighlight = !Boolean(
 -                 highlight.content && highlight.content.image,
 -               );
 - 
 -               const component = isTextHighlight ? (
 -                 <Highlight
 -                   isScrolledTo={isScrolledTo}
 -                   position={highlight.position}
 -                   comment={highlight.comment}
 -                 />
 -               ) : (
 -                 <AreaHighlight
 -                   isScrolledTo={isScrolledTo}
 -                   highlight={highlight}
 -                   onChange={() => {}}
 -                 />
 -               );
 - 
 -               return (
 -                 <Popup
 -                   popupContent={<HighlightPopup {...highlight} />}
 -                   onMouseOver={(popupContent) =>
 -                     setTip(highlight, () => popupContent)
 -                   }
 -                   onMouseOut={hideTip}
 -                   key={index}
 -                 >
 -                   {component}
 -                 </Popup>
 -               );
 -             }}
 -             highlights={state}
 -           />
 -         )}
 -       </PdfLoader>
 -     </div>
 -   );
 - };
 - 
 - export default DocumentPreviewer;
 
 
  |