UNPKG

react-pdf

Version:

Display PDFs in your React app as easily as if they were images.

230 lines (171 loc) 6.49 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _mergeClassNames = require('merge-class-names'); var _mergeClassNames2 = _interopRequireDefault(_mergeClassNames); var _OutlineItem = require('./OutlineItem'); var _OutlineItem2 = _interopRequireDefault(_OutlineItem); var _utils = require('./shared/utils'); var _events = require('./shared/events'); var _propTypes3 = require('./shared/propTypes'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Outline = function (_Component) { (0, _inherits3.default)(Outline, _Component); function Outline() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, Outline); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Outline.__proto__ || (0, _getPrototypeOf2.default)(Outline)).call.apply(_ref, [this].concat(args))), _this), _this.state = { outline: null }, _this.onLoadSuccess = function (outline) { _this.setState({ outline: outline }, function () { (0, _utils.callIfDefined)(_this.props.onLoadSuccess, outline); }); }, _this.onLoadError = function (error) { if (error.name === 'RenderingCancelledException' || error.name === 'PromiseCancelledException') { return; } (0, _utils.errorOnDev)(error.message, error); (0, _utils.callIfDefined)(_this.props.onLoadError, error); _this.setState({ outline: false }); }, _this.onItemClick = function (_ref2) { var pageIndex = _ref2.pageIndex, pageNumber = _ref2.pageNumber; (0, _utils.callIfDefined)(_this.props.onItemClick, { pageIndex: pageIndex, pageNumber: pageNumber }); }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(Outline, [{ key: 'componentDidMount', value: function componentDidMount() { this.loadOutline(); } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps, nextContext) { if (this.getPdf(nextProps, nextContext) !== this.getPdf()) { this.loadOutline(nextProps, nextContext); } } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { (0, _utils.cancelRunningTask)(this.runningTask); } }, { key: 'getPdf', value: function getPdf() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props; var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context; return props.pdf || context.pdf; } }, { key: 'getChildContext', value: function getChildContext() { return { pdf: this.getPdf(), onClick: this.onItemClick }; } }, { key: 'loadOutline', value: function loadOutline() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props; var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context; var pdf = this.getPdf(props, context); if (!pdf) { throw new Error('Attempted to load an outline, but no document was specified.'); } if (this.state.outline !== null) { this.setState({ outline: null }); } this.runningTask = (0, _utils.makeCancellable)(pdf.getOutline()); return this.runningTask.promise.then(this.onLoadSuccess).catch(this.onLoadError); } }, { key: 'renderOutline', value: function renderOutline() { var outline = this.state.outline; return _react2.default.createElement( 'ul', null, outline.map(function (item, itemIndex) { return _react2.default.createElement(_OutlineItem2.default, { key: typeof item.destination === 'string' ? item.destination : itemIndex, item: item }); }) ); } }, { key: 'render', value: function render() { var pdf = this.getPdf(); var outline = this.state.outline; if (!pdf || !outline) { return null; } var className = this.props.className; return _react2.default.createElement( 'div', (0, _extends3.default)({ className: (0, _mergeClassNames2.default)('react-pdf__Outline', className), ref: this.props.inputRef }, this.eventProps), this.renderOutline() ); } }, { key: 'eventProps', get: function get() { var _this2 = this; return (0, _events.makeEventProps)(this.props, function () { return _this2.state.outline; }); } /** * Called when an outline is read successfully */ /** * Called when an outline failed to read successfully */ }]); return Outline; }(_react.Component); exports.default = Outline; Outline.childContextTypes = { onClick: _propTypes2.default.func, pdf: _propTypes3.isPdf }; Outline.contextTypes = { pdf: _propTypes3.isPdf }; Outline.propTypes = (0, _extends3.default)({ className: _propTypes3.isClassName, inputRef: _propTypes2.default.func, onItemClick: _propTypes2.default.func, onLoadError: _propTypes2.default.func, onLoadSuccess: _propTypes2.default.func }, (0, _propTypes3.eventsProps)());