@atlaskit/media-document-viewer 0.6.10 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaskit/media-document-viewer
2
2
 
3
+ ## 0.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`34c40eb233aa4`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/34c40eb233aa4) -
8
+ isUxChange: true
9
+
10
+ Lazy-append document pages for MS Excel previews behind platform_media_excel_lazy_load gate to fix
11
+ initial-render freeze on very large documents
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies
16
+
17
+ ## 0.6.11
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies
22
+
3
23
  ## 0.6.10
4
24
 
5
25
  ### Patch Changes
@@ -20,7 +20,8 @@ var anchorStyles = {
20
20
  };
21
21
  var DocumentLink = function DocumentLink(_ref) {
22
22
  var link = _ref.link,
23
- dataTestId = _ref.dataTestId;
23
+ dataTestId = _ref.dataTestId,
24
+ appendUpTo = _ref.appendUpTo;
24
25
  return /*#__PURE__*/_react.default.createElement("foreignObject", {
25
26
  x: link.x,
26
27
  y: -link.y,
@@ -34,15 +35,20 @@ var DocumentLink = function DocumentLink(_ref) {
34
35
  style: anchorStyles
35
36
  })) : /*#__PURE__*/_react.default.createElement(_anchor.default, (0, _extends2.default)({}, foreignObjectProps, {
36
37
  href: "#page-".concat(link.p_num + 1),
37
- style: anchorStyles
38
+ style: anchorStyles,
39
+ onClick: appendUpTo ? function () {
40
+ return appendUpTo(link.p_num + 1);
41
+ } : undefined
38
42
  })));
39
43
  };
40
44
  var DocumentLinks = exports.DocumentLinks = function DocumentLinks(_ref2) {
41
- var links = _ref2.links;
45
+ var links = _ref2.links,
46
+ appendUpTo = _ref2.appendUpTo;
42
47
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, links.map(function (link, i) {
43
48
  return /*#__PURE__*/_react.default.createElement(DocumentLink, {
44
49
  link: link,
45
50
  dataTestId: "document-link-".concat(i),
51
+ appendUpTo: appendUpTo,
46
52
  key: i
47
53
  });
48
54
  }));
@@ -11,7 +11,9 @@ require("./documentViewer.compiled.css");
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var React = _react;
13
13
  var _runtime = require("@compiled/react/runtime");
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
15
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
16
+ var _browserApis = require("@atlaskit/browser-apis");
15
17
  var _mediaCommon = require("@atlaskit/media-common");
16
18
  var _page = require("./page");
17
19
  var _usePageContent2 = require("./usePageContent");
@@ -20,22 +22,178 @@ var _useCachedGetImage = require("./utils/useCachedGetImage");
20
22
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
21
23
  var documentViewerStyles = null;
22
24
  var DEFAULT_PAGINATION_SIZE = 50;
23
- var DEFAULT_MAX_PAGE_IMAGE_ZOOM = 6;
24
- var DocumentViewer = exports.DocumentViewer = function DocumentViewer(_ref) {
25
+ var INITIAL_PAGE_COUNT = 50;
26
+ var APPEND_STEP = 50;
27
+
28
+ /**
29
+ * TAIL-APPEND PATTERN FOR LAZY LOADING:
30
+ *
31
+ * The <Page> component has an `onVisible: () => void` prop that is called when the page
32
+ * enters the viewport (via useIntersectionObserver with a 300% rootMargin). This callback
33
+ * is currently used to load page content via `loadPageContent(i)`.
34
+ *
35
+ * For the LazyAppendPages feature (T2.3), the parent component can leverage this same
36
+ * mechanism by:
37
+ * 1. Rendering only a subset of pages (lazyPageCount instead of all documentMetadata.pageCount)
38
+ * 2. Passing onVisible={handleAppend} ONLY to the last rendered page (i === lazyPageCount - 1)
39
+ * 3. For all other pages, passing onVisible={() => loadPageContent(i)} as usual
40
+ *
41
+ * When the last page enters the viewport, handleAppend will be triggered, which can:
42
+ * - Fetch the next batch of pages
43
+ * - Append them to the rendered page list
44
+ * - This effectively creates a tail-append/infinite-scroll behavior without any changes to <Page>
45
+ *
46
+ * No changes to the <Page> signature are required. The onVisible callback is already
47
+ * properly wired and can be overridden by parent components for different behaviors.
48
+ */
49
+
50
+ var LegacyPages = function LegacyPages(_ref) {
25
51
  var _documentMetadata$pag;
26
- var onSuccess = _ref.onSuccess,
27
- getContent = _ref.getContent,
28
- getPageImageUrl = _ref.getPageImageUrl,
29
- _ref$paginationSize = _ref.paginationSize,
30
- paginationSize = _ref$paginationSize === void 0 ? DEFAULT_PAGINATION_SIZE : _ref$paginationSize,
31
- _ref$maxPageImageZoom = _ref.maxPageImageZoom,
32
- maxPageImageZoom = _ref$maxPageImageZoom === void 0 ? DEFAULT_MAX_PAGE_IMAGE_ZOOM : _ref$maxPageImageZoom,
33
- zoom = _ref.zoom;
52
+ var documentMetadata = _ref.documentMetadata,
53
+ getPageContent = _ref.getPageContent,
54
+ loadPageContent = _ref.loadPageContent,
55
+ getImageUrl = _ref.getImageUrl,
56
+ zoom = _ref.zoom,
57
+ onSuccess = _ref.onSuccess,
58
+ style = _ref.style,
59
+ onTouchStart = _ref.onTouchStart,
60
+ onTouchMove = _ref.onTouchMove,
61
+ onTouchEnd = _ref.onTouchEnd;
62
+ return /*#__PURE__*/React.createElement("div", {
63
+ "data-testid": "document-viewer",
64
+ style: style,
65
+ onTouchStart: onTouchStart,
66
+ onTouchMove: onTouchMove,
67
+ onTouchEnd: onTouchEnd,
68
+ className: (0, _runtime.ax)(["_zulputpp _1reo1wug _18m91wug _19pkxncg _1ul91osq _1e0c1txw _2lx21bp4 _1bsb1ris"])
69
+ }, (0, _toConsumableArray2.default)(Array((_documentMetadata$pag = documentMetadata.pageCount) !== null && _documentMetadata$pag !== void 0 ? _documentMetadata$pag : 4)).map(function (_, i) {
70
+ var _getPageContent = getPageContent(i),
71
+ page = _getPageContent.page,
72
+ fonts = _getPageContent.fonts;
73
+ return /*#__PURE__*/React.createElement(_page.Page, {
74
+ key: i,
75
+ getPageSrc: getImageUrl,
76
+ pageIndex: i,
77
+ zoom: zoom,
78
+ defaultDimensions: documentMetadata.defaultDimensions,
79
+ onVisible: loadPageContent,
80
+ onLoad: i === 0 ? onSuccess : undefined,
81
+ fonts: fonts,
82
+ content: page
83
+ });
84
+ }));
85
+ };
86
+ var LazyAppendPages = function LazyAppendPages(_ref2) {
87
+ var _documentMetadata$pag2;
88
+ var documentMetadata = _ref2.documentMetadata,
89
+ getPageContent = _ref2.getPageContent,
90
+ loadPageContent = _ref2.loadPageContent,
91
+ getImageUrl = _ref2.getImageUrl,
92
+ zoom = _ref2.zoom,
93
+ onSuccess = _ref2.onSuccess,
94
+ style = _ref2.style,
95
+ onTouchStart = _ref2.onTouchStart,
96
+ onTouchMove = _ref2.onTouchMove,
97
+ onTouchEnd = _ref2.onTouchEnd;
98
+ var totalPages = (_documentMetadata$pag2 = documentMetadata.pageCount) !== null && _documentMetadata$pag2 !== void 0 ? _documentMetadata$pag2 : 4;
99
+ var _useState = (0, _react.useState)(function () {
100
+ return Math.min(INITIAL_PAGE_COUNT, totalPages);
101
+ }),
102
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
103
+ lazyPageCount = _useState2[0],
104
+ setLazyPageCount = _useState2[1];
105
+
106
+ // lastAppendTriggerIndex deduplicates: only append when a strictly-larger
107
+ // tail page fires onVisible. This prevents double-append on scroll-up-then-down.
108
+ var lastAppendTriggerIndex = (0, _react.useRef)(-1);
109
+
110
+ // Handle #page-N URL hash on first load: fast-forward lazyPageCount to include the target page.
111
+ // Capture totalPages in a ref so the one-shot effect can read it without being re-run when
112
+ // totalPages changes (the effect must only fire once, on mount).
113
+ var totalPagesRef = (0, _react.useRef)(totalPages);
114
+ (0, _react.useEffect)(function () {
115
+ var total = totalPagesRef.current;
116
+ var hash = window.location.hash;
117
+ var match = hash.match(/^#page-(\d+)$/);
118
+ if (match) {
119
+ var targetPage = parseInt(match[1], 10);
120
+ if (targetPage >= 1 && targetPage <= total) {
121
+ // Update dedup ref BEFORE setLazyPageCount so handleAppend does not
122
+ // cascade when the new tail page enters the viewport via IntersectionObserver.
123
+ lastAppendTriggerIndex.current = targetPage - 1;
124
+ // Fast-forward lazyPageCount to include the target page
125
+ setLazyPageCount(function (prev) {
126
+ return Math.max(prev, targetPage);
127
+ });
128
+ // After the pages are mounted (next animation frame), scroll to the target
129
+ requestAnimationFrame(function () {
130
+ var _getDocument;
131
+ var el = (_getDocument = (0, _browserApis.getDocument)()) === null || _getDocument === void 0 ? void 0 : _getDocument.getElementById("page-".concat(targetPage));
132
+ if (el) {
133
+ el.scrollIntoView();
134
+ }
135
+ });
136
+ }
137
+ }
138
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps -- intentionally one-shot; totalPages read via ref
139
+
140
+ var handleAppendAndLoadPageContent = (0, _react.useCallback)(function (pageIndex) {
141
+ if (pageIndex > lastAppendTriggerIndex.current) {
142
+ lastAppendTriggerIndex.current = pageIndex;
143
+ setLazyPageCount(function (c) {
144
+ return Math.min(c + APPEND_STEP, totalPages);
145
+ });
146
+ }
147
+ loadPageContent(pageIndex);
148
+ }, [totalPages, loadPageContent]);
149
+ var appendUpTo = (0, _react.useCallback)(function (targetPage) {
150
+ var clamped = Math.min(Math.max(targetPage, 0), totalPages);
151
+ if (clamped > lastAppendTriggerIndex.current) {
152
+ lastAppendTriggerIndex.current = clamped - 1;
153
+ setLazyPageCount(function (prev) {
154
+ return Math.max(prev, clamped);
155
+ });
156
+ }
157
+ }, [totalPages]);
158
+ return /*#__PURE__*/React.createElement("div", {
159
+ "data-testid": "document-viewer",
160
+ style: style,
161
+ onTouchStart: onTouchStart,
162
+ onTouchMove: onTouchMove,
163
+ onTouchEnd: onTouchEnd,
164
+ className: (0, _runtime.ax)(["_zulputpp _1reo1wug _18m91wug _19pkxncg _1ul91osq _1e0c1txw _2lx21bp4 _1bsb1ris"])
165
+ }, (0, _toConsumableArray2.default)(Array(lazyPageCount)).map(function (_, i) {
166
+ var _getPageContent2 = getPageContent(i),
167
+ page = _getPageContent2.page,
168
+ fonts = _getPageContent2.fonts;
169
+ return /*#__PURE__*/React.createElement(_page.Page, {
170
+ key: i,
171
+ getPageSrc: getImageUrl,
172
+ pageIndex: i,
173
+ zoom: zoom,
174
+ defaultDimensions: documentMetadata.defaultDimensions,
175
+ onVisible: i === lazyPageCount - 1 ? handleAppendAndLoadPageContent : loadPageContent,
176
+ onLoad: i === 0 ? onSuccess : undefined,
177
+ fonts: fonts,
178
+ content: page,
179
+ appendUpTo: appendUpTo
180
+ });
181
+ }));
182
+ };
183
+ var DocumentViewer = exports.DocumentViewer = function DocumentViewer(_ref3) {
184
+ var onSuccess = _ref3.onSuccess,
185
+ getContent = _ref3.getContent,
186
+ getPageImageUrl = _ref3.getPageImageUrl,
187
+ _ref3$paginationSize = _ref3.paginationSize,
188
+ paginationSize = _ref3$paginationSize === void 0 ? DEFAULT_PAGINATION_SIZE : _ref3$paginationSize,
189
+ zoom = _ref3.zoom,
190
+ _ref3$enableLazyPageR = _ref3.enableLazyPageRendering,
191
+ enableLazyPageRendering = _ref3$enableLazyPageR === void 0 ? false : _ref3$enableLazyPageR;
34
192
  var _usePageContent = (0, _usePageContent2.usePageContent)(getContent, paginationSize),
35
193
  getPageContent = _usePageContent.getPageContent,
36
194
  loadPageContent = _usePageContent.loadPageContent,
37
195
  documentMetadata = _usePageContent.documentMetadata;
38
- var getImageUrl = (0, _useCachedGetImage.useCachedGetImage)(getPageImageUrl, maxPageImageZoom);
196
+ var getImageUrl = (0, _useCachedGetImage.useCachedGetImage)(getPageImageUrl);
39
197
  var style = {
40
198
  '--document-viewer-zoom': zoom
41
199
  };
@@ -105,30 +263,17 @@ var DocumentViewer = exports.DocumentViewer = function DocumentViewer(_ref) {
105
263
  var onTouchEnd = (0, _react.useCallback)(function () {
106
264
  touchStartRef.current = null;
107
265
  }, []);
108
- return /*#__PURE__*/React.createElement("div", {
109
- "data-testid": "document-viewer",
266
+ var sharedProps = {
267
+ documentMetadata: documentMetadata,
268
+ getPageContent: getPageContent,
269
+ loadPageContent: loadPageContent,
270
+ getImageUrl: getImageUrl,
271
+ zoom: zoom,
272
+ onSuccess: onSuccess,
110
273
  style: style,
111
274
  onTouchStart: onTouchStart,
112
275
  onTouchMove: onTouchMove,
113
- onTouchEnd: onTouchEnd,
114
- className: (0, _runtime.ax)(["_zulputpp _1reo1wug _18m91wug _19pkxncg _1ul91osq _1e0c1txw _2lx21bp4 _1bsb1ris"])
115
- }, (0, _toConsumableArray2.default)(Array((_documentMetadata$pag = documentMetadata.pageCount) !== null && _documentMetadata$pag !== void 0 ? _documentMetadata$pag : 4)).map(function (_, i) {
116
- var _getPageContent = getPageContent(i),
117
- page = _getPageContent.page,
118
- fonts = _getPageContent.fonts;
119
- return /*#__PURE__*/React.createElement(_page.Page, {
120
- key: i,
121
- getPageSrc: getImageUrl,
122
- maxPageImageZoom: maxPageImageZoom,
123
- pageIndex: i,
124
- zoom: zoom,
125
- defaultDimensions: documentMetadata.defaultDimensions,
126
- onVisible: function onVisible() {
127
- return loadPageContent(i);
128
- },
129
- onLoad: i === 0 ? onSuccess : undefined,
130
- fonts: fonts,
131
- content: page
132
- });
133
- }));
276
+ onTouchEnd: onTouchEnd
277
+ };
278
+ return enableLazyPageRendering ? /*#__PURE__*/React.createElement(LazyAppendPages, sharedProps) : /*#__PURE__*/React.createElement(LegacyPages, sharedProps);
134
279
  };
package/dist/cjs/page.js CHANGED
@@ -14,12 +14,10 @@ var _runtime = require("@compiled/react/runtime");
14
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
16
  var _mediaCommon = require("@atlaskit/media-common");
17
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
18
17
  var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
19
18
  var _annotations = require("./annotations");
20
19
  var _documentLinks = require("./documentLinks");
21
20
  var _getDocumentRoot = require("./utils/getDocumentRoot");
22
- var _useCachedGetImage = require("./utils/useCachedGetImage");
23
21
  var _useIntersectionObserver = require("./utils/useIntersectionObserver");
24
22
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
25
23
  var Span = function Span(_ref) {
@@ -83,7 +81,8 @@ var PageView = /*#__PURE__*/(0, _react.forwardRef)(function (_ref4, ref) {
83
81
  fonts = _ref4.fonts,
84
82
  pageIndex = _ref4.pageIndex,
85
83
  zoom = _ref4.zoom,
86
- onImageLoad = _ref4.onImageLoad;
84
+ onImageLoad = _ref4.onImageLoad,
85
+ appendUpTo = _ref4.appendUpTo;
87
86
  var style = {};
88
87
  if (dimensions) {
89
88
  // contents endpoint has loaded so dimensions are available
@@ -115,7 +114,7 @@ var PageView = /*#__PURE__*/(0, _react.forwardRef)(function (_ref4, ref) {
115
114
  src: imageSrc,
116
115
  alt: "",
117
116
  onLoad: onImageLoad,
118
- className: (0, _runtime.ax)(["_kqswstnw _154iidpf _1ltvidpf _uiztglyw", !(0, _platformFeatureFlags.fg)('media-document-viewer-clear-render') && "_1kemd8h4"])
117
+ className: (0, _runtime.ax)(["_kqswstnw _154iidpf _1ltvidpf _uiztglyw", "_1kemd8h4"])
119
118
  }), content && /*#__PURE__*/React.createElement("svg", {
120
119
  "data-testid": "page-".concat(pageIndex, "-text-layer"),
121
120
  style: style,
@@ -132,20 +131,21 @@ var PageView = /*#__PURE__*/(0, _react.forwardRef)(function (_ref4, ref) {
132
131
  }), content.annotations && /*#__PURE__*/React.createElement(_annotations.Annotations, {
133
132
  annotations: content.annotations
134
133
  }), content.links && /*#__PURE__*/React.createElement(_documentLinks.DocumentLinks, {
135
- links: content.links
134
+ links: content.links,
135
+ appendUpTo: appendUpTo
136
136
  })));
137
137
  });
138
138
  var Page = exports.Page = function Page(_ref5) {
139
139
  var _ref6;
140
140
  var getPageSrc = _ref5.getPageSrc,
141
- maxPageImageZoom = _ref5.maxPageImageZoom,
142
141
  content = _ref5.content,
143
142
  fonts = _ref5.fonts,
144
143
  pageIndex = _ref5.pageIndex,
145
144
  zoom = _ref5.zoom,
146
145
  defaultDimensions = _ref5.defaultDimensions,
147
146
  onVisible = _ref5.onVisible,
148
- onLoad = _ref5.onLoad;
147
+ onLoad = _ref5.onLoad,
148
+ appendUpTo = _ref5.appendUpTo;
149
149
  var _useState = (0, _react.useState)(),
150
150
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
151
151
  imageSrc = _useState2[0],
@@ -157,7 +157,7 @@ var Page = exports.Page = function Page(_ref5) {
157
157
  rootMargin: '300%',
158
158
  threshold: 0.1
159
159
  }, function () {
160
- onVisible();
160
+ onVisible(pageIndex);
161
161
  getPageSrc(pageIndex, zoom).then(setImageSrc);
162
162
  }),
163
163
  observedRef = _useIntersectionObser.observedRef,
@@ -171,7 +171,7 @@ var Page = exports.Page = function Page(_ref5) {
171
171
  onLoad === null || onLoad === void 0 || onLoad();
172
172
  if (!content) {
173
173
  var _zoom = image.dataset.zoom ? Number(image.dataset.zoom) : 1;
174
- var imageZoom = (0, _useCachedGetImage.getImageZoom)(_zoom, maxPageImageZoom);
174
+ var imageZoom = _zoom;
175
175
  var contentWidth = image.naturalWidth / imageZoom;
176
176
  var contentHeight = image.naturalHeight / imageZoom;
177
177
  setDimensions({
@@ -193,6 +193,7 @@ var Page = exports.Page = function Page(_ref5) {
193
193
  fonts: fonts,
194
194
  pageIndex: pageIndex,
195
195
  zoom: zoom,
196
- onImageLoad: onImageLoad
196
+ onImageLoad: onImageLoad,
197
+ appendUpTo: appendUpTo
197
198
  });
198
199
  };
@@ -4,14 +4,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getImageZoom = getImageZoom;
8
7
  exports.useCachedGetImage = void 0;
9
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
10
  var _react = require("react");
12
11
  var _mediaCommon = require("@atlaskit/media-common");
13
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
14
- var useCachedGetImage = exports.useCachedGetImage = function useCachedGetImage(getPageImageUrl, maxPageImageZoom) {
12
+ var useCachedGetImage = exports.useCachedGetImage = function useCachedGetImage(getPageImageUrl) {
15
13
  var imageUrlRefs = (0, _react.useRef)({});
16
14
  (0, _react.useEffect)(function () {
17
15
  return function () {
@@ -24,38 +22,37 @@ var useCachedGetImage = exports.useCachedGetImage = function useCachedGetImage(g
24
22
  }, []);
25
23
  var getImageUrl = (0, _mediaCommon.useStaticCallback)( /*#__PURE__*/function () {
26
24
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(pageNumber, zoom) {
27
- var imageZoom, key, url, isBlobUrl, blob;
25
+ var key, url, isBlobUrl, blob;
28
26
  return _regenerator.default.wrap(function _callee$(_context) {
29
27
  while (1) switch (_context.prev = _context.next) {
30
28
  case 0:
31
- imageZoom = getImageZoom(zoom, maxPageImageZoom);
32
- key = "".concat(pageNumber, "-").concat(imageZoom);
29
+ key = "".concat(pageNumber, "-").concat(zoom);
33
30
  if (!imageUrlRefs.current[key]) {
34
- _context.next = 4;
31
+ _context.next = 3;
35
32
  break;
36
33
  }
37
34
  return _context.abrupt("return", imageUrlRefs.current[key]);
38
- case 4:
39
- _context.next = 6;
40
- return getPageImageUrl(pageNumber, imageZoom);
41
- case 6:
35
+ case 3:
36
+ _context.next = 5;
37
+ return getPageImageUrl(pageNumber, zoom);
38
+ case 5:
42
39
  url = _context.sent;
43
40
  isBlobUrl = url.startsWith('blob:');
44
41
  if (isBlobUrl) {
45
- _context.next = 13;
42
+ _context.next = 12;
46
43
  break;
47
44
  }
48
- _context.next = 11;
45
+ _context.next = 10;
49
46
  return fetch(url).then(function (res) {
50
47
  return res.blob();
51
48
  });
52
- case 11:
49
+ case 10:
53
50
  blob = _context.sent;
54
51
  url = URL.createObjectURL(blob);
55
- case 13:
52
+ case 12:
56
53
  imageUrlRefs.current[key] = url;
57
54
  return _context.abrupt("return", url);
58
- case 15:
55
+ case 14:
59
56
  case "end":
60
57
  return _context.stop();
61
58
  }
@@ -66,21 +63,4 @@ var useCachedGetImage = exports.useCachedGetImage = function useCachedGetImage(g
66
63
  };
67
64
  }());
68
65
  return getImageUrl;
69
- };
70
-
71
- /**
72
- * The actual zoom that will be requested from the image service.
73
- *
74
- * This is different from the 'zoom' prop because it is adjusted for the device pixel ratio.
75
- * We're achieving the same result as a srcset, crisp images for high DPI screens.
76
- *
77
- * We also reduce impact of excessively slow rendering by setting a max zoom level.
78
- * If the user is zoomed past this level, the image will just be scaled-up client side.
79
- */
80
- function getImageZoom(zoom, maxPageImageZoom) {
81
- if (!(0, _platformFeatureFlags.fg)('media-document-viewer-clear-render')) {
82
- return zoom;
83
- }
84
- var dpiAdjustedZoom = zoom * (window.devicePixelRatio || 1);
85
- return Math.min(dpiAdjustedZoom, maxPageImageZoom);
86
- }
66
+ };
@@ -12,7 +12,8 @@ const anchorStyles = {
12
12
  };
13
13
  const DocumentLink = ({
14
14
  link,
15
- dataTestId
15
+ dataTestId,
16
+ appendUpTo
16
17
  }) => {
17
18
  return /*#__PURE__*/React.createElement("foreignObject", {
18
19
  x: link.x,
@@ -27,15 +28,18 @@ const DocumentLink = ({
27
28
  style: anchorStyles
28
29
  })) : /*#__PURE__*/React.createElement(Anchor, _extends({}, foreignObjectProps, {
29
30
  href: `#page-${link.p_num + 1}`,
30
- style: anchorStyles
31
+ style: anchorStyles,
32
+ onClick: appendUpTo ? () => appendUpTo(link.p_num + 1) : undefined
31
33
  })));
32
34
  };
33
35
  export const DocumentLinks = ({
34
- links
36
+ links,
37
+ appendUpTo
35
38
  }) => {
36
39
  return /*#__PURE__*/React.createElement(React.Fragment, null, links.map((link, i) => /*#__PURE__*/React.createElement(DocumentLink, {
37
40
  link: link,
38
41
  dataTestId: `document-link-${i}`,
42
+ appendUpTo: appendUpTo,
39
43
  key: i
40
44
  })));
41
45
  };