"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _makeEventProps = _interopRequireDefault(require("make-event-props")); var _makeCancellablePromise = _interopRequireDefault(require("make-cancellable-promise")); var _mergeClassNames = _interopRequireDefault(require("merge-class-names")); var _pdfjsDist = _interopRequireWildcard(require("pdfjs-dist")); var _DocumentContext = _interopRequireDefault(require("./DocumentContext")); var _Message = _interopRequireDefault(require("./Message")); var _LinkService = _interopRequireDefault(require("./LinkService")); var _PasswordResponses = _interopRequireDefault(require("./PasswordResponses")); var _utils = require("./shared/utils"); var _propTypes2 = require("./shared/propTypes"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } var Document = /*#__PURE__*/function (_PureComponent) { (0, _inherits2["default"])(Document, _PureComponent); var _super = _createSuper(Document); function Document() { var _this; (0, _classCallCheck2["default"])(this, Document); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", { pdf: null }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "viewer", { scrollPageIntoView: function scrollPageIntoView(_ref) { var pageNumber = _ref.pageNumber; // Handling jumping to internal links target var onItemClick = _this.props.onItemClick; // First, check if custom handling of onItemClick was provided if (onItemClick) { onItemClick({ pageNumber: pageNumber }); return; } // If not, try to look for target page within the . var page = _this.pages[pageNumber - 1]; if (page) { // Scroll to the page automatically page.scrollIntoView(); return; } (0, _utils.warnOnDev)("Warning: An internal link leading to page ".concat(pageNumber, " was clicked, but neither was provided with onItemClick nor it was able to find the page within itself. Either provide onItemClick to and handle navigating by yourself or ensure that all pages are rendered within .")); } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "linkService", new _LinkService["default"]()); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "loadDocument", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var source, _this$props, options, onLoadProgress, onPassword, cancellable, pdf; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: source = null; _context.prev = 1; _context.next = 4; return _this.findDocumentSource(); case 4: source = _context.sent; _this.onSourceSuccess(); _context.next = 11; break; case 8: _context.prev = 8; _context.t0 = _context["catch"](1); _this.onSourceError(_context.t0); case 11: if (source) { _context.next = 13; break; } return _context.abrupt("return"); case 13: _this.setState(function (prevState) { if (!prevState.pdf) { return null; } return { pdf: null }; }); _this$props = _this.props, options = _this$props.options, onLoadProgress = _this$props.onLoadProgress, onPassword = _this$props.onPassword; _context.prev = 15; // If another loading is in progress, let's cancel it (0, _utils.cancelRunningTask)(_this.runningTask); _this.loadingTask = _pdfjsDist["default"].getDocument(_objectSpread({}, source, {}, options)); _this.loadingTask.onPassword = onPassword; if (onLoadProgress) { _this.loadingTask.onProgress = onLoadProgress; } cancellable = (0, _makeCancellablePromise["default"])(_this.loadingTask.promise); _this.runningTask = cancellable; _context.next = 24; return cancellable.promise; case 24: pdf = _context.sent; _this.setState(function (prevState) { if (prevState.pdf && prevState.pdf.fingerprint === pdf.fingerprint) { return null; } return { pdf: pdf }; }, _this.onLoadSuccess); _context.next = 31; break; case 28: _context.prev = 28; _context.t1 = _context["catch"](15); _this.onLoadError(_context.t1); case 31: case "end": return _context.stop(); } } }, _callee, null, [[1, 8], [15, 28]]); }))); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setupLinkService", function () { _this.linkService.setViewer(_this.viewer); var documentInstance = (0, _assertThisInitialized2["default"])(_this); Object.defineProperty(_this.linkService, 'externalLinkTarget', { get: function get() { var externalLinkTarget = documentInstance.props.externalLinkTarget; switch (externalLinkTarget) { case '_self': return 1; case '_blank': return 2; case '_parent': return 3; case '_top': return 4; default: return 0; } } }); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onSourceSuccess", function () { var onSourceSuccess = _this.props.onSourceSuccess; if (onSourceSuccess) onSourceSuccess(); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onSourceError", function (error) { (0, _utils.errorOnDev)(error); var onSourceError = _this.props.onSourceError; if (onSourceError) onSourceError(error); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLoadSuccess", function () { var onLoadSuccess = _this.props.onLoadSuccess; var pdf = _this.state.pdf; if (onLoadSuccess) onLoadSuccess(pdf); _this.pages = new Array(pdf.numPages); _this.linkService.setDocument(pdf); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLoadError", function (error) { _this.setState({ pdf: false }); (0, _utils.errorOnDev)(error); var onLoadError = _this.props.onLoadError; if (onLoadError) onLoadError(error); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "findDocumentSource", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var file, fileUint8Array, url, otherParams, _fileUint8Array; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: file = _this.props.file; if (file) { _context2.next = 3; break; } return _context2.abrupt("return", null); case 3: if (!(typeof file === 'string')) { _context2.next = 9; break; } if (!(0, _utils.isDataURI)(file)) { _context2.next = 7; break; } fileUint8Array = (0, _utils.dataURItoUint8Array)(file); return _context2.abrupt("return", { data: fileUint8Array }); case 7: (0, _utils.displayCORSWarning)(); return _context2.abrupt("return", { url: file }); case 9: if (!(file instanceof _pdfjsDist.PDFDataRangeTransport)) { _context2.next = 11; break; } return _context2.abrupt("return", { range: file }); case 11: if (!(0, _utils.isArrayBuffer)(file)) { _context2.next = 13; break; } return _context2.abrupt("return", { data: file }); case 13: if (!_utils.isBrowser) { _context2.next = 19; break; } if (!((0, _utils.isBlob)(file) || (0, _utils.isFile)(file))) { _context2.next = 19; break; } _context2.next = 17; return (0, _utils.loadFromFile)(file); case 17: _context2.t0 = _context2.sent; return _context2.abrupt("return", { data: _context2.t0 }); case 19: if (!((0, _typeof2["default"])(file) !== 'object')) { _context2.next = 21; break; } throw new Error('Invalid parameter in file, need either Uint8Array, string or a parameter object'); case 21: if (!(!file.url && !file.data && !file.range)) { _context2.next = 23; break; } throw new Error('Invalid parameter object: need either .data, .range or .url'); case 23: if (!(typeof file.url === 'string')) { _context2.next = 29; break; } if (!(0, _utils.isDataURI)(file.url)) { _context2.next = 28; break; } url = file.url, otherParams = (0, _objectWithoutProperties2["default"])(file, ["url"]); _fileUint8Array = (0, _utils.dataURItoUint8Array)(url); return _context2.abrupt("return", _objectSpread({ data: _fileUint8Array }, otherParams)); case 28: (0, _utils.displayCORSWarning)(); case 29: return _context2.abrupt("return", file); case 30: case "end": return _context2.stop(); } } }, _callee2); }))); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "registerPage", function (pageIndex, ref) { _this.pages[pageIndex] = ref; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "unregisterPage", function (pageIndex) { delete _this.pages[pageIndex]; }); return _this; } (0, _createClass2["default"])(Document, [{ key: "componentDidMount", value: function componentDidMount() { this.loadDocument(); this.setupLinkService(); } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var file = this.props.file; if (file !== prevProps.file) { this.loadDocument(); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { if (this.loadingTask) this.loadingTask.destroy(); (0, _utils.cancelRunningTask)(this.runningTask); } }, { key: "renderChildren", value: function renderChildren() { var children = this.props.children; return /*#__PURE__*/_react["default"].createElement(_DocumentContext["default"].Provider, { value: this.childContext }, children); } }, { key: "renderContent", value: function renderContent() { var file = this.props.file; var pdf = this.state.pdf; if (!file) { var noData = this.props.noData; return /*#__PURE__*/_react["default"].createElement(_Message["default"], { type: "no-data" }, typeof noData === 'function' ? noData() : noData); } if (pdf === null) { var loading = this.props.loading; return /*#__PURE__*/_react["default"].createElement(_Message["default"], { type: "loading" }, typeof loading === 'function' ? loading() : loading); } if (pdf === false) { var error = this.props.error; return /*#__PURE__*/_react["default"].createElement(_Message["default"], { type: "error" }, typeof error === 'function' ? error() : error); } return this.renderChildren(); } }, { key: "render", value: function render() { var _this$props2 = this.props, className = _this$props2.className, inputRef = _this$props2.inputRef; return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({ className: (0, _mergeClassNames["default"])('react-pdf__Document', className), ref: inputRef }, this.eventProps), this.renderContent()); } }, { key: "childContext", get: function get() { var linkService = this.linkService, registerPage = this.registerPage, unregisterPage = this.unregisterPage; var _this$props3 = this.props, renderMode = _this$props3.renderMode, rotate = _this$props3.rotate; var pdf = this.state.pdf; return { linkService: linkService, pdf: pdf, registerPage: registerPage, renderMode: renderMode, rotate: rotate, unregisterPage: unregisterPage }; } }, { key: "eventProps", get: function get() { var _this2 = this; // eslint-disable-next-line react/destructuring-assignment return (0, _makeEventProps["default"])(this.props, function () { return _this2.state.pdf; }); } /** * Called when a document source is resolved correctly */ }]); return Document; }(_react.PureComponent); exports["default"] = Document; Document.defaultProps = { error: 'Failed to load PDF file.', loading: 'Loading PDF…', noData: 'No PDF file specified.', onPassword: function onPassword(callback, reason) { switch (reason) { case _PasswordResponses["default"].NEED_PASSWORD: { // eslint-disable-next-line no-alert var password = prompt('Enter the password to open this PDF file.'); callback(password); break; } case _PasswordResponses["default"].INCORRECT_PASSWORD: { // eslint-disable-next-line no-alert var _password = prompt('Invalid password. Please try again.'); callback(_password); break; } default: } } }; var isFunctionOrNode = _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].node]); Document.propTypes = _objectSpread({}, _propTypes2.eventProps, { children: _propTypes["default"].node, className: _propTypes2.isClassName, error: isFunctionOrNode, file: _utils.isFile, inputRef: _propTypes["default"].func, loading: isFunctionOrNode, noData: isFunctionOrNode, onItemClick: _propTypes["default"].func, onLoadError: _propTypes["default"].func, onLoadProgress: _propTypes["default"].func, onLoadSuccess: _propTypes["default"].func, onPassword: _propTypes["default"].func, onSourceError: _propTypes["default"].func, onSourceSuccess: _propTypes["default"].func, rotate: _propTypes["default"].number });