UNPKG

react-pdf-annotations

Version:
149 lines (125 loc) 3.67 kB
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } import React, { Component } from "react"; class PdfLoader extends Component { constructor(...args) { super(...args); _defineProperty(this, "containerNode", void 0); _defineProperty(this, "eventBus", void 0); _defineProperty(this, "linkService", void 0); _defineProperty(this, "pdfDocument", void 0); _defineProperty(this, "state", { pdfDocument: null, error: null }); _defineProperty(this, "documentRef", /*#__PURE__*/React.createRef()); _defineProperty(this, "attachRef", ref => { this.containerNode = ref; this.init(); }); } // componentDidMount() { // this.init(); // } componentWillUnmount() { const { pdfDocument: discardedDocument } = this.state; if (discardedDocument) { discardedDocument.destroy(); } } componentDidUpdate({ url }) { if (this.props.url !== url) { this.init(); } } componentDidCatch(error, info) { const { onError } = this.props; if (onError) { onError(error); } this.setState({ pdfDocument: null, error }); } init() { const { url, cMapUrl, cMapPacked, headers: httpHeaders = {} } = this.props; this.setState({ pdfDocument: null, error: null }); Promise.resolve().then(() => this.pdfDocument && this.pdfDocument.destroy()).then(async () => { if (url) { const pdfjsViewer = await import('pdfjs-dist/web/pdf_viewer'); this.eventBus = new pdfjsViewer.EventBus(); this.linkService = new pdfjsViewer.PDFLinkService(); // @ts-ignore this.viewer = new pdfjsViewer.PDFViewer({ container: this.containerNode, eventBus: this.eventBus, linkService: this.linkService, enhanceTextSelection: true, removePageBorders: true }); } const pdfJS = await import('pdfjs-dist/build/pdf'); pdfJS.GlobalWorkerOptions.workerSrc = window.location.origin + '/pdf.worker.min.js'; await pdfJS.getDocument({ url, ownerDocument, cMapUrl, cMapPacked, httpHeaders, withCredentials: true }).promise.then(pdfDocument => { this.pdfDocument = pdfDocument; this.viewer.setDocument(pdfDocument); }); // getDocument({ url, ownerDocument, cMapUrl, cMapPacked, httpHeaders, withCredentials: true }).promise.then( // pdfDocument => { // this.setState({ pdfDocument }); // } // ) }).catch(e => this.componentDidCatch(e)); } render() { // const { children, beforeLoad } = this.props; // const { pdfDocument, error } = this.state; return /*#__PURE__*/React.createElement("div", { ref: this.attachRef, className: "PdfHighlighter", onContextMenu: e => e.preventDefault() }, /*#__PURE__*/React.createElement("div", { className: "pdfViewer" })); // return ( // <> // <span ref={this.documentRef} /> // {error // ? this.renderError() // : !pdfDocument || !children // ? beforeLoad // : children(pdfDocument)} // </> // ); } renderError() { const { errorMessage } = this.props; if (errorMessage) { return /*#__PURE__*/React.cloneElement(errorMessage, { error: this.state.error }); } return null; } } export default PdfLoader;