Web Removed react-pdf
This commit is contained in:
parent
68707b7489
commit
b18d641331
@ -50,7 +50,6 @@
|
||||
"react-colorful": "^5.6.1",
|
||||
"react-hotkeys-hook": "^3.4.7",
|
||||
"react-markdown": "^7.1.2",
|
||||
"react-pdf": "^6.2.2",
|
||||
"react-smartbanner": "^5.1.4",
|
||||
"react-string-format": "^0.1.4",
|
||||
"windows-iana": "^5.1.0"
|
||||
@ -64,7 +63,6 @@
|
||||
"@babel/preset-react": "^7.18.6",
|
||||
"@babel/preset-typescript": "^7.21.0",
|
||||
"@svgr/webpack": "^5.5.0",
|
||||
"@types/react-pdf": "^6.2.0",
|
||||
"babel-loader": "^8.3.0",
|
||||
"clean-webpack-plugin": "^4.0.0",
|
||||
"copy-webpack-plugin": "^9.1.0",
|
||||
|
@ -1,15 +0,0 @@
|
||||
import { DocumentProps } from "react-pdf";
|
||||
|
||||
interface PDFViewerProps {
|
||||
src?: string;
|
||||
handleChangeVersion: (arg: string) => void;
|
||||
}
|
||||
|
||||
export default PDFViewerProps;
|
||||
|
||||
export type FirstArgument<T extends ((...args: any) => any) | undefined> =
|
||||
T extends (arg: infer R, ...args: any) => any ? R : never;
|
||||
|
||||
export type LoadSuccessType = DocumentProps["onLoadSuccess"];
|
||||
export type PDFDocumentProxy = FirstArgument<LoadSuccessType>;
|
||||
export type PDFPageProxy = Awaited<ReturnType<PDFDocumentProxy["getPage"]>>;
|
@ -1,170 +0,0 @@
|
||||
import React, { useState, memo, useRef, useEffect, useCallback } from "react";
|
||||
import { Document, Page, pdfjs } from "react-pdf";
|
||||
import { FixedSizeList } from "react-window";
|
||||
|
||||
import PDFViewerProps, {
|
||||
LoadSuccessType,
|
||||
PDFDocumentProxy,
|
||||
PDFPageProxy,
|
||||
} from "./PDFViewer.props";
|
||||
|
||||
import CustomScrollbarsVirtualList from "@docspace/components/scrollbar/custom-scrollbars-virtual-list";
|
||||
|
||||
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
|
||||
|
||||
import "react-pdf/dist/esm/Page/AnnotationLayer.css";
|
||||
import "react-pdf/dist/esm/Page/TextLayer.css";
|
||||
|
||||
const PDFViewer = ({ src, handleChangeVersion }: PDFViewerProps) => {
|
||||
const listRef = useRef<FixedSizeList>(null);
|
||||
const pdfRef = useRef<PDFDocumentProxy>();
|
||||
const pageRef = useRef<PDFPageProxy>();
|
||||
|
||||
const [scale, setScale] = useState(1);
|
||||
const [numPages, setNumPages] = useState<number>(0);
|
||||
|
||||
const [viewport, setViewport] = useState({
|
||||
width: 0,
|
||||
height: 0,
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("resize", handleResize);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener("resize", handleResize);
|
||||
};
|
||||
}, [viewport]);
|
||||
|
||||
const handleResize = () => {
|
||||
if (!pdfRef.current) return;
|
||||
pdfRef.current.getPage(1).then((page) => {
|
||||
const { width: widthViewport, height: heightViewport } = page.getViewport(
|
||||
{ scale: 1.5 }
|
||||
);
|
||||
|
||||
let width = Math.min(widthViewport, window.innerWidth);
|
||||
let height = (width / widthViewport) * heightViewport;
|
||||
|
||||
setViewport({ width, height });
|
||||
});
|
||||
};
|
||||
|
||||
const setSize = (scale: number) => {
|
||||
if (!pageRef.current) return;
|
||||
|
||||
const { width, height } = pageRef.current.getViewport({ scale });
|
||||
setViewport({ width, height });
|
||||
};
|
||||
|
||||
const handleLoadSuccess: LoadSuccessType = (pdf) => {
|
||||
setNumPages(pdf.numPages);
|
||||
pdfRef.current = pdf;
|
||||
|
||||
pdf.getPage(1).then((page) => {
|
||||
pageRef.current = page;
|
||||
const { width: widthViewport, height: heightViewport } = page.getViewport(
|
||||
{ scale: 1.5 }
|
||||
);
|
||||
|
||||
let width = Math.min(widthViewport, window.innerWidth);
|
||||
let height = (width / widthViewport) * heightViewport;
|
||||
|
||||
setViewport({ width, height });
|
||||
});
|
||||
// loadThumbnailPages(getPage, numPages);
|
||||
};
|
||||
|
||||
const renderPage = useCallback(
|
||||
({ index, style }) => {
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
display: "grid",
|
||||
justifyItems: "center",
|
||||
...style,
|
||||
}}
|
||||
>
|
||||
<Page
|
||||
pageNumber={index + 1}
|
||||
width={viewport.width}
|
||||
// height={viewport.height}
|
||||
// viewport={viewport}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
[viewport.width]
|
||||
);
|
||||
|
||||
const onZoomIn = () => {
|
||||
setSize(scale + 0.1);
|
||||
setScale(scale + 0.1);
|
||||
};
|
||||
|
||||
const onZoomOut = () => {
|
||||
setSize(scale - 0.1);
|
||||
setScale(scale - 0.1);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div
|
||||
style={{
|
||||
position: "fixed",
|
||||
inset: 0,
|
||||
zIndex: 300,
|
||||
|
||||
paddingTop: "85px",
|
||||
background: "rgba(55, 55, 55, 0.6)",
|
||||
}}
|
||||
>
|
||||
<div>
|
||||
<Document
|
||||
file={src}
|
||||
onLoadSuccess={handleLoadSuccess}
|
||||
onItemClick={(e) => {
|
||||
listRef.current.scrollToItem(e.pageNumber);
|
||||
}}
|
||||
>
|
||||
<FixedSizeList
|
||||
ref={listRef}
|
||||
height={window.innerHeight}
|
||||
itemCount={numPages}
|
||||
itemSize={viewport.height}
|
||||
outerElementType={CustomScrollbarsVirtualList}
|
||||
>
|
||||
{renderPage}
|
||||
</FixedSizeList>
|
||||
</Document>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
style={{
|
||||
position: "fixed",
|
||||
bottom: 50,
|
||||
left: "50%",
|
||||
zIndex: 300,
|
||||
}}
|
||||
>
|
||||
<button onClick={onZoomIn}>Zoom In</button>
|
||||
<button onClick={onZoomOut}>Zoom Out</button>
|
||||
</div>
|
||||
|
||||
<div
|
||||
style={{
|
||||
position: "fixed",
|
||||
zIndex: 310,
|
||||
left: "50px",
|
||||
top: "50px",
|
||||
cursor: "pointer",
|
||||
}}
|
||||
>
|
||||
<button onClick={() => handleChangeVersion("1")}>Viewer V1</button>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default memo(PDFViewer);
|
Loading…
Reference in New Issue
Block a user