@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 +20 -0
- package/dist/cjs/documentLinks.js +9 -3
- package/dist/cjs/documentViewer.js +179 -34
- package/dist/cjs/page.js +11 -10
- package/dist/cjs/utils/useCachedGetImage.js +14 -34
- package/dist/es2019/documentLinks.js +7 -3
- package/dist/es2019/documentViewer.js +169 -31
- package/dist/es2019/page.js +11 -10
- package/dist/es2019/utils/useCachedGetImage.js +4 -23
- package/dist/esm/documentLinks.js +9 -3
- package/dist/esm/documentViewer.js +180 -35
- package/dist/esm/page.js +11 -10
- package/dist/esm/utils/useCachedGetImage.js +14 -33
- package/dist/types/documentLinks.d.ts +2 -1
- package/dist/types/documentViewer.d.ts +7 -1
- package/dist/types/page.d.ts +9 -3
- package/dist/types/utils/useCachedGetImage.d.ts +1 -11
- package/dist/types-ts4.5/documentLinks.d.ts +2 -1
- package/dist/types-ts4.5/documentViewer.d.ts +7 -1
- package/dist/types-ts4.5/page.d.ts +9 -3
- package/dist/types-ts4.5/utils/useCachedGetImage.d.ts +1 -11
- package/package.json +4 -10
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
|
|
24
|
-
var
|
|
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
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
|
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
|
-
|
|
109
|
-
|
|
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
|
-
|
|
115
|
-
|
|
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",
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
|
|
32
|
-
key = "".concat(pageNumber, "-").concat(imageZoom);
|
|
29
|
+
key = "".concat(pageNumber, "-").concat(zoom);
|
|
33
30
|
if (!imageUrlRefs.current[key]) {
|
|
34
|
-
_context.next =
|
|
31
|
+
_context.next = 3;
|
|
35
32
|
break;
|
|
36
33
|
}
|
|
37
34
|
return _context.abrupt("return", imageUrlRefs.current[key]);
|
|
38
|
-
case
|
|
39
|
-
_context.next =
|
|
40
|
-
return getPageImageUrl(pageNumber,
|
|
41
|
-
case
|
|
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 =
|
|
42
|
+
_context.next = 12;
|
|
46
43
|
break;
|
|
47
44
|
}
|
|
48
|
-
_context.next =
|
|
45
|
+
_context.next = 10;
|
|
49
46
|
return fetch(url).then(function (res) {
|
|
50
47
|
return res.blob();
|
|
51
48
|
});
|
|
52
|
-
case
|
|
49
|
+
case 10:
|
|
53
50
|
blob = _context.sent;
|
|
54
51
|
url = URL.createObjectURL(blob);
|
|
55
|
-
case
|
|
52
|
+
case 12:
|
|
56
53
|
imageUrlRefs.current[key] = url;
|
|
57
54
|
return _context.abrupt("return", url);
|
|
58
|
-
case
|
|
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
|
};
|