Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

541 linhas
19 KiB

  1. "use strict";
  2. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports["default"] = void 0;
  8. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  9. var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
  10. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  11. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  12. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
  13. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  14. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  15. var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
  16. var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
  17. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  18. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  19. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  20. var _react = _interopRequireWildcard(require("react"));
  21. var _propTypes = _interopRequireDefault(require("prop-types"));
  22. var _makeEventProps = _interopRequireDefault(require("make-event-props"));
  23. var _makeCancellablePromise = _interopRequireDefault(require("make-cancellable-promise"));
  24. var _mergeClassNames = _interopRequireDefault(require("merge-class-names"));
  25. var _pdfjsDist = _interopRequireWildcard(require("pdfjs-dist"));
  26. var _DocumentContext = _interopRequireDefault(require("./DocumentContext"));
  27. var _Message = _interopRequireDefault(require("./Message"));
  28. var _LinkService = _interopRequireDefault(require("./LinkService"));
  29. var _PasswordResponses = _interopRequireDefault(require("./PasswordResponses"));
  30. var _utils = require("./shared/utils");
  31. var _propTypes2 = require("./shared/propTypes");
  32. 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; }
  33. 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; }
  34. 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); }; }
  35. 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; } }
  36. var Document = /*#__PURE__*/function (_PureComponent) {
  37. (0, _inherits2["default"])(Document, _PureComponent);
  38. var _super = _createSuper(Document);
  39. function Document() {
  40. var _this;
  41. (0, _classCallCheck2["default"])(this, Document);
  42. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  43. args[_key] = arguments[_key];
  44. }
  45. _this = _super.call.apply(_super, [this].concat(args));
  46. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
  47. pdf: null
  48. });
  49. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "viewer", {
  50. scrollPageIntoView: function scrollPageIntoView(_ref) {
  51. var pageNumber = _ref.pageNumber;
  52. // Handling jumping to internal links target
  53. var onItemClick = _this.props.onItemClick; // First, check if custom handling of onItemClick was provided
  54. if (onItemClick) {
  55. onItemClick({
  56. pageNumber: pageNumber
  57. });
  58. return;
  59. } // If not, try to look for target page within the <Document>.
  60. var page = _this.pages[pageNumber - 1];
  61. if (page) {
  62. // Scroll to the page automatically
  63. page.scrollIntoView();
  64. return;
  65. }
  66. (0, _utils.warnOnDev)("Warning: An internal link leading to page ".concat(pageNumber, " was clicked, but neither <Document> was provided with onItemClick nor it was able to find the page within itself. Either provide onItemClick to <Document> and handle navigating by yourself or ensure that all pages are rendered within <Document>."));
  67. }
  68. });
  69. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "linkService", new _LinkService["default"]());
  70. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "loadDocument", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
  71. var source, _this$props, options, onLoadProgress, onPassword, cancellable, pdf;
  72. return _regenerator["default"].wrap(function _callee$(_context) {
  73. while (1) {
  74. switch (_context.prev = _context.next) {
  75. case 0:
  76. source = null;
  77. _context.prev = 1;
  78. _context.next = 4;
  79. return _this.findDocumentSource();
  80. case 4:
  81. source = _context.sent;
  82. _this.onSourceSuccess();
  83. _context.next = 11;
  84. break;
  85. case 8:
  86. _context.prev = 8;
  87. _context.t0 = _context["catch"](1);
  88. _this.onSourceError(_context.t0);
  89. case 11:
  90. if (source) {
  91. _context.next = 13;
  92. break;
  93. }
  94. return _context.abrupt("return");
  95. case 13:
  96. _this.setState(function (prevState) {
  97. if (!prevState.pdf) {
  98. return null;
  99. }
  100. return {
  101. pdf: null
  102. };
  103. });
  104. _this$props = _this.props, options = _this$props.options, onLoadProgress = _this$props.onLoadProgress, onPassword = _this$props.onPassword;
  105. _context.prev = 15;
  106. // If another loading is in progress, let's cancel it
  107. (0, _utils.cancelRunningTask)(_this.runningTask);
  108. _this.loadingTask = _pdfjsDist["default"].getDocument(_objectSpread({}, source, {}, options));
  109. _this.loadingTask.onPassword = onPassword;
  110. if (onLoadProgress) {
  111. _this.loadingTask.onProgress = onLoadProgress;
  112. }
  113. cancellable = (0, _makeCancellablePromise["default"])(_this.loadingTask.promise);
  114. _this.runningTask = cancellable;
  115. _context.next = 24;
  116. return cancellable.promise;
  117. case 24:
  118. pdf = _context.sent;
  119. _this.setState(function (prevState) {
  120. if (prevState.pdf && prevState.pdf.fingerprint === pdf.fingerprint) {
  121. return null;
  122. }
  123. return {
  124. pdf: pdf
  125. };
  126. }, _this.onLoadSuccess);
  127. _context.next = 31;
  128. break;
  129. case 28:
  130. _context.prev = 28;
  131. _context.t1 = _context["catch"](15);
  132. _this.onLoadError(_context.t1);
  133. case 31:
  134. case "end":
  135. return _context.stop();
  136. }
  137. }
  138. }, _callee, null, [[1, 8], [15, 28]]);
  139. })));
  140. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setupLinkService", function () {
  141. _this.linkService.setViewer(_this.viewer);
  142. var documentInstance = (0, _assertThisInitialized2["default"])(_this);
  143. Object.defineProperty(_this.linkService, 'externalLinkTarget', {
  144. get: function get() {
  145. var externalLinkTarget = documentInstance.props.externalLinkTarget;
  146. switch (externalLinkTarget) {
  147. case '_self':
  148. return 1;
  149. case '_blank':
  150. return 2;
  151. case '_parent':
  152. return 3;
  153. case '_top':
  154. return 4;
  155. default:
  156. return 0;
  157. }
  158. }
  159. });
  160. });
  161. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onSourceSuccess", function () {
  162. var onSourceSuccess = _this.props.onSourceSuccess;
  163. if (onSourceSuccess) onSourceSuccess();
  164. });
  165. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onSourceError", function (error) {
  166. (0, _utils.errorOnDev)(error);
  167. var onSourceError = _this.props.onSourceError;
  168. if (onSourceError) onSourceError(error);
  169. });
  170. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLoadSuccess", function () {
  171. var onLoadSuccess = _this.props.onLoadSuccess;
  172. var pdf = _this.state.pdf;
  173. if (onLoadSuccess) onLoadSuccess(pdf);
  174. _this.pages = new Array(pdf.numPages);
  175. _this.linkService.setDocument(pdf);
  176. });
  177. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLoadError", function (error) {
  178. _this.setState({
  179. pdf: false
  180. });
  181. (0, _utils.errorOnDev)(error);
  182. var onLoadError = _this.props.onLoadError;
  183. if (onLoadError) onLoadError(error);
  184. });
  185. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "findDocumentSource", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
  186. var file, fileUint8Array, url, otherParams, _fileUint8Array;
  187. return _regenerator["default"].wrap(function _callee2$(_context2) {
  188. while (1) {
  189. switch (_context2.prev = _context2.next) {
  190. case 0:
  191. file = _this.props.file;
  192. if (file) {
  193. _context2.next = 3;
  194. break;
  195. }
  196. return _context2.abrupt("return", null);
  197. case 3:
  198. if (!(typeof file === 'string')) {
  199. _context2.next = 9;
  200. break;
  201. }
  202. if (!(0, _utils.isDataURI)(file)) {
  203. _context2.next = 7;
  204. break;
  205. }
  206. fileUint8Array = (0, _utils.dataURItoUint8Array)(file);
  207. return _context2.abrupt("return", {
  208. data: fileUint8Array
  209. });
  210. case 7:
  211. (0, _utils.displayCORSWarning)();
  212. return _context2.abrupt("return", {
  213. url: file
  214. });
  215. case 9:
  216. if (!(file instanceof _pdfjsDist.PDFDataRangeTransport)) {
  217. _context2.next = 11;
  218. break;
  219. }
  220. return _context2.abrupt("return", {
  221. range: file
  222. });
  223. case 11:
  224. if (!(0, _utils.isArrayBuffer)(file)) {
  225. _context2.next = 13;
  226. break;
  227. }
  228. return _context2.abrupt("return", {
  229. data: file
  230. });
  231. case 13:
  232. if (!_utils.isBrowser) {
  233. _context2.next = 19;
  234. break;
  235. }
  236. if (!((0, _utils.isBlob)(file) || (0, _utils.isFile)(file))) {
  237. _context2.next = 19;
  238. break;
  239. }
  240. _context2.next = 17;
  241. return (0, _utils.loadFromFile)(file);
  242. case 17:
  243. _context2.t0 = _context2.sent;
  244. return _context2.abrupt("return", {
  245. data: _context2.t0
  246. });
  247. case 19:
  248. if (!((0, _typeof2["default"])(file) !== 'object')) {
  249. _context2.next = 21;
  250. break;
  251. }
  252. throw new Error('Invalid parameter in file, need either Uint8Array, string or a parameter object');
  253. case 21:
  254. if (!(!file.url && !file.data && !file.range)) {
  255. _context2.next = 23;
  256. break;
  257. }
  258. throw new Error('Invalid parameter object: need either .data, .range or .url');
  259. case 23:
  260. if (!(typeof file.url === 'string')) {
  261. _context2.next = 29;
  262. break;
  263. }
  264. if (!(0, _utils.isDataURI)(file.url)) {
  265. _context2.next = 28;
  266. break;
  267. }
  268. url = file.url, otherParams = (0, _objectWithoutProperties2["default"])(file, ["url"]);
  269. _fileUint8Array = (0, _utils.dataURItoUint8Array)(url);
  270. return _context2.abrupt("return", _objectSpread({
  271. data: _fileUint8Array
  272. }, otherParams));
  273. case 28:
  274. (0, _utils.displayCORSWarning)();
  275. case 29:
  276. return _context2.abrupt("return", file);
  277. case 30:
  278. case "end":
  279. return _context2.stop();
  280. }
  281. }
  282. }, _callee2);
  283. })));
  284. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "registerPage", function (pageIndex, ref) {
  285. _this.pages[pageIndex] = ref;
  286. });
  287. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "unregisterPage", function (pageIndex) {
  288. delete _this.pages[pageIndex];
  289. });
  290. return _this;
  291. }
  292. (0, _createClass2["default"])(Document, [{
  293. key: "componentDidMount",
  294. value: function componentDidMount() {
  295. this.loadDocument();
  296. this.setupLinkService();
  297. }
  298. }, {
  299. key: "componentDidUpdate",
  300. value: function componentDidUpdate(prevProps) {
  301. var file = this.props.file;
  302. if (file !== prevProps.file) {
  303. this.loadDocument();
  304. }
  305. }
  306. }, {
  307. key: "componentWillUnmount",
  308. value: function componentWillUnmount() {
  309. if (this.loadingTask) this.loadingTask.destroy();
  310. (0, _utils.cancelRunningTask)(this.runningTask);
  311. }
  312. }, {
  313. key: "renderChildren",
  314. value: function renderChildren() {
  315. var children = this.props.children;
  316. return /*#__PURE__*/_react["default"].createElement(_DocumentContext["default"].Provider, {
  317. value: this.childContext
  318. }, children);
  319. }
  320. }, {
  321. key: "renderContent",
  322. value: function renderContent() {
  323. var file = this.props.file;
  324. var pdf = this.state.pdf;
  325. if (!file) {
  326. var noData = this.props.noData;
  327. return /*#__PURE__*/_react["default"].createElement(_Message["default"], {
  328. type: "no-data"
  329. }, typeof noData === 'function' ? noData() : noData);
  330. }
  331. if (pdf === null) {
  332. var loading = this.props.loading;
  333. return /*#__PURE__*/_react["default"].createElement(_Message["default"], {
  334. type: "loading"
  335. }, typeof loading === 'function' ? loading() : loading);
  336. }
  337. if (pdf === false) {
  338. var error = this.props.error;
  339. return /*#__PURE__*/_react["default"].createElement(_Message["default"], {
  340. type: "error"
  341. }, typeof error === 'function' ? error() : error);
  342. }
  343. return this.renderChildren();
  344. }
  345. }, {
  346. key: "render",
  347. value: function render() {
  348. var _this$props2 = this.props,
  349. className = _this$props2.className,
  350. inputRef = _this$props2.inputRef;
  351. return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
  352. className: (0, _mergeClassNames["default"])('react-pdf__Document', className),
  353. ref: inputRef
  354. }, this.eventProps), this.renderContent());
  355. }
  356. }, {
  357. key: "childContext",
  358. get: function get() {
  359. var linkService = this.linkService,
  360. registerPage = this.registerPage,
  361. unregisterPage = this.unregisterPage;
  362. var _this$props3 = this.props,
  363. renderMode = _this$props3.renderMode,
  364. rotate = _this$props3.rotate;
  365. var pdf = this.state.pdf;
  366. return {
  367. linkService: linkService,
  368. pdf: pdf,
  369. registerPage: registerPage,
  370. renderMode: renderMode,
  371. rotate: rotate,
  372. unregisterPage: unregisterPage
  373. };
  374. }
  375. }, {
  376. key: "eventProps",
  377. get: function get() {
  378. var _this2 = this;
  379. // eslint-disable-next-line react/destructuring-assignment
  380. return (0, _makeEventProps["default"])(this.props, function () {
  381. return _this2.state.pdf;
  382. });
  383. }
  384. /**
  385. * Called when a document source is resolved correctly
  386. */
  387. }]);
  388. return Document;
  389. }(_react.PureComponent);
  390. exports["default"] = Document;
  391. Document.defaultProps = {
  392. error: 'Failed to load PDF file.',
  393. loading: 'Loading PDF…',
  394. noData: 'No PDF file specified.',
  395. onPassword: function onPassword(callback, reason) {
  396. switch (reason) {
  397. case _PasswordResponses["default"].NEED_PASSWORD:
  398. {
  399. // eslint-disable-next-line no-alert
  400. var password = prompt('Enter the password to open this PDF file.');
  401. callback(password);
  402. break;
  403. }
  404. case _PasswordResponses["default"].INCORRECT_PASSWORD:
  405. {
  406. // eslint-disable-next-line no-alert
  407. var _password = prompt('Invalid password. Please try again.');
  408. callback(_password);
  409. break;
  410. }
  411. default:
  412. }
  413. }
  414. };
  415. var isFunctionOrNode = _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].node]);
  416. Document.propTypes = _objectSpread({}, _propTypes2.eventProps, {
  417. children: _propTypes["default"].node,
  418. className: _propTypes2.isClassName,
  419. error: isFunctionOrNode,
  420. file: _utils.isFile,
  421. inputRef: _propTypes["default"].func,
  422. loading: isFunctionOrNode,
  423. noData: isFunctionOrNode,
  424. onItemClick: _propTypes["default"].func,
  425. onLoadError: _propTypes["default"].func,
  426. onLoadProgress: _propTypes["default"].func,
  427. onLoadSuccess: _propTypes["default"].func,
  428. onPassword: _propTypes["default"].func,
  429. onSourceError: _propTypes["default"].func,
  430. onSourceSuccess: _propTypes["default"].func,
  431. rotate: _propTypes["default"].number
  432. });