@atlaskit/media-viewer 48.2.14 → 48.3.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 +16 -0
- package/dist/cjs/analytics/events/screen/passwordPdf.js +14 -0
- package/dist/cjs/analytics/events/screen/pdfPasswordInput.js +14 -0
- package/dist/cjs/analytics/index.js +1 -1
- package/dist/cjs/analytics/ufoExperiences.js +1 -1
- package/dist/cjs/domain/outcome.js +5 -22
- package/dist/cjs/item-viewer.js +23 -17
- package/dist/cjs/media-viewer.js +2 -1
- package/dist/cjs/navigation.js +4 -2
- package/dist/cjs/v2/item-viewer-v2.js +10 -10
- package/dist/cjs/viewers/doc/index.js +50 -67
- package/dist/cjs/viewers/doc/pdfPasswordInput.js +100 -0
- package/dist/cjs/viewers/doc/pdfRenderer.js +114 -21
- package/dist/cjs/viewers/image/index.js +17 -17
- package/dist/es2019/analytics/events/screen/passwordPdf.js +6 -0
- package/dist/es2019/analytics/events/screen/pdfPasswordInput.js +6 -0
- package/dist/es2019/analytics/index.js +1 -1
- package/dist/es2019/analytics/ufoExperiences.js +1 -1
- package/dist/es2019/domain/outcome.js +5 -18
- package/dist/es2019/item-viewer.js +14 -9
- package/dist/es2019/media-viewer.js +2 -1
- package/dist/es2019/navigation.js +4 -2
- package/dist/es2019/v2/item-viewer-v2.js +10 -10
- package/dist/es2019/viewers/doc/index.js +20 -17
- package/dist/es2019/viewers/doc/pdfPasswordInput.js +85 -0
- package/dist/es2019/viewers/doc/pdfRenderer.js +98 -75
- package/dist/es2019/viewers/image/index.js +4 -4
- package/dist/esm/analytics/events/screen/passwordPdf.js +8 -0
- package/dist/esm/analytics/events/screen/pdfPasswordInput.js +8 -0
- package/dist/esm/analytics/index.js +1 -1
- package/dist/esm/analytics/ufoExperiences.js +1 -1
- package/dist/esm/domain/outcome.js +5 -22
- package/dist/esm/item-viewer.js +23 -17
- package/dist/esm/media-viewer.js +2 -1
- package/dist/esm/navigation.js +4 -2
- package/dist/esm/v2/item-viewer-v2.js +10 -10
- package/dist/esm/viewers/doc/index.js +50 -62
- package/dist/esm/viewers/doc/pdfPasswordInput.js +90 -0
- package/dist/esm/viewers/doc/pdfRenderer.js +115 -22
- package/dist/esm/viewers/image/index.js +18 -18
- package/dist/types/analytics/events/index.d.ts +3 -1
- package/dist/types/analytics/events/screen/passwordPdf.d.ts +3 -0
- package/dist/types/analytics/events/screen/pdfPasswordInput.d.ts +3 -0
- package/dist/types/domain/outcome.d.ts +5 -6
- package/dist/types/viewers/doc/index.d.ts +0 -3
- package/dist/types/viewers/doc/pdfPasswordInput.d.ts +11 -0
- package/dist/types/viewers/doc/pdfRenderer.d.ts +4 -3
- package/dist/types-ts4.5/analytics/events/index.d.ts +3 -1
- package/dist/types-ts4.5/analytics/events/screen/passwordPdf.d.ts +3 -0
- package/dist/types-ts4.5/analytics/events/screen/pdfPasswordInput.d.ts +3 -0
- package/dist/types-ts4.5/domain/outcome.d.ts +5 -6
- package/dist/types-ts4.5/viewers/doc/index.d.ts +0 -3
- package/dist/types-ts4.5/viewers/doc/pdfPasswordInput.d.ts +11 -0
- package/dist/types-ts4.5/viewers/doc/pdfRenderer.d.ts +4 -3
- package/package.json +16 -7
|
@@ -11,10 +11,11 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
11
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
12
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
13
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
14
|
-
var
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
15
|
var _react = _interopRequireWildcard(require("react"));
|
|
16
16
|
var _pdf_viewer = require("pdfjs-dist/legacy/web/pdf_viewer");
|
|
17
17
|
var _pdf = require("pdfjs-dist/legacy/build/pdf");
|
|
18
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
18
19
|
var _cmaps = require("./cmaps");
|
|
19
20
|
var _react2 = require("@emotion/react");
|
|
20
21
|
var _zoomControls = require("../../zoomControls");
|
|
@@ -27,7 +28,10 @@ var _zoomLevel = require("../../domain/zoomLevel");
|
|
|
27
28
|
var _processError = require("./processError");
|
|
28
29
|
var _pdfJs = require("./pdfJs");
|
|
29
30
|
var _extractCompressedBase = require("./extractCompressedBase64");
|
|
30
|
-
var
|
|
31
|
+
var _pdfPasswordInput = require("./pdfPasswordInput");
|
|
32
|
+
var _analytics = require("../../analytics");
|
|
33
|
+
var _pdfPasswordInput2 = require("../../analytics/events/screen/pdfPasswordInput");
|
|
34
|
+
var _passwordPdf = require("../../analytics/events/screen/passwordPdf");
|
|
31
35
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
32
36
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
33
37
|
var pdfViewerClassName = exports.pdfViewerClassName = 'pdfViewer';
|
|
@@ -35,9 +39,58 @@ var pdfViewerClassName = exports.pdfViewerClassName = 'pdfViewer';
|
|
|
35
39
|
// Styles are partially copied from https://github.com/mozilla/pdfjs-dist/blob/v2.9.359/web/pdf_viewer.css
|
|
36
40
|
/* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
|
|
37
41
|
/* eslint-disable @atlaskit/design-system/ensure-design-token-usage/preview */
|
|
38
|
-
var globalStyles = (0, _react2.css)(
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
var globalStyles = (0, _react2.css)((0, _defineProperty2.default)({}, ".".concat(pdfViewerClassName), {
|
|
43
|
+
marginTop: "var(--ds-space-800, 64px)",
|
|
44
|
+
marginBottom: "var(--ds-space-800, 64px)",
|
|
45
|
+
'.page': {
|
|
46
|
+
margin: "1px auto ".concat("var(--ds-space-negative-100, -8px)", " auto"),
|
|
47
|
+
border: '9px solid transparent',
|
|
48
|
+
position: 'relative'
|
|
49
|
+
},
|
|
50
|
+
'.canvasWrapper': {
|
|
51
|
+
overflow: 'hidden'
|
|
52
|
+
},
|
|
53
|
+
'.textLayer': {
|
|
54
|
+
position: 'absolute',
|
|
55
|
+
left: 0,
|
|
56
|
+
top: 0,
|
|
57
|
+
right: 0,
|
|
58
|
+
bottom: 0,
|
|
59
|
+
overflow: 'hidden',
|
|
60
|
+
opacity: 0.2,
|
|
61
|
+
lineHeight: 1
|
|
62
|
+
},
|
|
63
|
+
'.textLayer span, .textLayer br': {
|
|
64
|
+
color: 'transparent',
|
|
65
|
+
position: 'absolute',
|
|
66
|
+
whiteSpace: 'pre',
|
|
67
|
+
cursor: 'text',
|
|
68
|
+
transformOrigin: '0% 0%'
|
|
69
|
+
},
|
|
70
|
+
'.textLayer ::-moz-selection': {
|
|
71
|
+
background: 'rgba(0, 0, 255, 1)'
|
|
72
|
+
},
|
|
73
|
+
'.textLayer ::selection': {
|
|
74
|
+
background: 'rgba(0, 0, 255, 1)'
|
|
75
|
+
},
|
|
76
|
+
'.annotationLayer section': {
|
|
77
|
+
position: 'absolute',
|
|
78
|
+
textAlign: 'initial'
|
|
79
|
+
},
|
|
80
|
+
'.annotationLayer .linkAnnotation > a, .annotationLayer .buttonWidgetAnnotation.pushButton > a': {
|
|
81
|
+
position: 'absolute',
|
|
82
|
+
fontSize: '1em',
|
|
83
|
+
top: 0,
|
|
84
|
+
left: 0,
|
|
85
|
+
width: '100%',
|
|
86
|
+
height: '100%'
|
|
87
|
+
},
|
|
88
|
+
'.annotationLayer .linkAnnotation > a:hover, .annotationLayer .buttonWidgetAnnotation.pushButton > a:hover': {
|
|
89
|
+
opacity: 0.2,
|
|
90
|
+
background: 'rgba(255, 255, 0, 1)',
|
|
91
|
+
boxShadow: '0 2px 10px rgba(255, 255, 0, 1)'
|
|
92
|
+
}
|
|
93
|
+
}));
|
|
41
94
|
var CmapFacotry = /*#__PURE__*/function () {
|
|
42
95
|
function CmapFacotry() {
|
|
43
96
|
(0, _classCallCheck2.default)(this, CmapFacotry);
|
|
@@ -79,13 +132,14 @@ var CmapFacotry = /*#__PURE__*/function () {
|
|
|
79
132
|
return CmapFacotry;
|
|
80
133
|
}();
|
|
81
134
|
var defaultWorkerUrl = '';
|
|
82
|
-
var
|
|
135
|
+
var PDFRendererBase = function PDFRendererBase(_ref2) {
|
|
83
136
|
var src = _ref2.src,
|
|
84
137
|
onClose = _ref2.onClose,
|
|
85
138
|
onSuccess = _ref2.onSuccess,
|
|
86
139
|
onError = _ref2.onError,
|
|
87
140
|
workerUrl = _ref2.workerUrl,
|
|
88
|
-
item = _ref2.item
|
|
141
|
+
item = _ref2.item,
|
|
142
|
+
createAnalyticsEvent = _ref2.createAnalyticsEvent;
|
|
89
143
|
var _useState = (0, _react.useState)(new _zoomLevel.ZoomLevel(1)),
|
|
90
144
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
91
145
|
zoomLevel = _useState2[0],
|
|
@@ -94,18 +148,28 @@ var PDFRenderer = exports.PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
94
148
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
95
149
|
docOutcome = _useState4[0],
|
|
96
150
|
setDocOutcome = _useState4[1];
|
|
151
|
+
var isPasswordPdfRef = (0, _react.useRef)(false);
|
|
152
|
+
var _useState5 = (0, _react.useState)(false),
|
|
153
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
154
|
+
passwordProtected = _useState6[0],
|
|
155
|
+
setPasswordProtected = _useState6[1];
|
|
156
|
+
var _useState7 = (0, _react.useState)(false),
|
|
157
|
+
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
158
|
+
hasPasswordError = _useState8[0],
|
|
159
|
+
setHasPasswordError = _useState8[1];
|
|
97
160
|
var pdfWrapperRef = (0, _react.useRef)();
|
|
98
161
|
var docRef = (0, _react.useRef)();
|
|
99
162
|
var pdfViewerRef = (0, _react.useRef)();
|
|
100
163
|
var onSuccessRef = (0, _react.useRef)(onSuccess);
|
|
101
164
|
onSuccessRef.current = onSuccess;
|
|
165
|
+
var updatePasswordRef = (0, _react.useRef)(undefined);
|
|
102
166
|
var onErrorRef = (0, _react.useRef)(onError);
|
|
103
167
|
onErrorRef.current = onError;
|
|
104
168
|
(0, _react.useEffect)(function () {
|
|
105
169
|
var isSubscribed = true;
|
|
106
170
|
var fetchDoc = /*#__PURE__*/function () {
|
|
107
171
|
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
108
|
-
var blob, pdfError;
|
|
172
|
+
var blob, getDocumentTask, pdfError;
|
|
109
173
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
110
174
|
while (1) switch (_context2.prev = _context2.next) {
|
|
111
175
|
case 0:
|
|
@@ -121,29 +185,39 @@ var PDFRenderer = exports.PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
121
185
|
defaultWorkerUrl = URL.createObjectURL(blob);
|
|
122
186
|
case 6:
|
|
123
187
|
_pdf.GlobalWorkerOptions.workerSrc = workerUrl !== null && workerUrl !== void 0 ? workerUrl : defaultWorkerUrl;
|
|
124
|
-
|
|
125
|
-
return (0, _pdf.getDocument)({
|
|
188
|
+
getDocumentTask = (0, _pdf.getDocument)({
|
|
126
189
|
url: src,
|
|
127
190
|
CMapReaderFactory: CmapFacotry
|
|
128
|
-
})
|
|
129
|
-
|
|
191
|
+
});
|
|
192
|
+
getDocumentTask.onPassword = function (updatePassword, e) {
|
|
193
|
+
updatePasswordRef.current = updatePassword;
|
|
194
|
+
if (e === _pdf.PasswordResponses.NEED_PASSWORD) {
|
|
195
|
+
isPasswordPdfRef.current = true;
|
|
196
|
+
setPasswordProtected(true);
|
|
197
|
+
} else {
|
|
198
|
+
setHasPasswordError(true);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
_context2.next = 11;
|
|
202
|
+
return getDocumentTask.promise;
|
|
203
|
+
case 11:
|
|
130
204
|
docRef.current = _context2.sent;
|
|
131
205
|
isSubscribed && setDocOutcome(_domain.Outcome.successful(docRef.current));
|
|
132
|
-
_context2.next =
|
|
206
|
+
_context2.next = 20;
|
|
133
207
|
break;
|
|
134
|
-
case
|
|
135
|
-
_context2.prev =
|
|
208
|
+
case 15:
|
|
209
|
+
_context2.prev = 15;
|
|
136
210
|
_context2.t0 = _context2["catch"](0);
|
|
137
211
|
pdfError = (0, _processError.processError)(_context2.t0);
|
|
138
212
|
isSubscribed && setDocOutcome(_domain.Outcome.failed(pdfError));
|
|
139
213
|
if (onErrorRef.current) {
|
|
140
214
|
onErrorRef.current(pdfError);
|
|
141
215
|
}
|
|
142
|
-
case
|
|
216
|
+
case 20:
|
|
143
217
|
case "end":
|
|
144
218
|
return _context2.stop();
|
|
145
219
|
}
|
|
146
|
-
}, _callee2, null, [[0,
|
|
220
|
+
}, _callee2, null, [[0, 15]]);
|
|
147
221
|
}));
|
|
148
222
|
return function fetchDoc() {
|
|
149
223
|
return _ref3.apply(this, arguments);
|
|
@@ -175,10 +249,13 @@ var PDFRenderer = exports.PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
175
249
|
pdfViewerRef.current.setDocument(docRef.current);
|
|
176
250
|
pdfLinkService.setDocument(docRef.current, null);
|
|
177
251
|
pdfViewerRef.current.firstPagePromise.then(scaleToFit);
|
|
252
|
+
if (isPasswordPdfRef.current) {
|
|
253
|
+
(0, _analytics.fireAnalytics)((0, _passwordPdf.createPasswordPdfScreenEvent)(), createAnalyticsEvent);
|
|
254
|
+
}
|
|
178
255
|
if (onSuccessRef.current) {
|
|
179
256
|
onSuccessRef.current();
|
|
180
257
|
}
|
|
181
|
-
}, [docOutcome]);
|
|
258
|
+
}, [createAnalyticsEvent, docOutcome]);
|
|
182
259
|
var savePdfElement = function savePdfElement(el) {
|
|
183
260
|
pdfWrapperRef.current = el;
|
|
184
261
|
};
|
|
@@ -194,7 +271,18 @@ var PDFRenderer = exports.PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
194
271
|
};
|
|
195
272
|
return docOutcome.match({
|
|
196
273
|
pending: function pending() {
|
|
197
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
274
|
+
return passwordProtected ? /*#__PURE__*/_react.default.createElement(_pdfPasswordInput.PDFPasswordInput, {
|
|
275
|
+
onRender: function onRender() {
|
|
276
|
+
return (0, _analytics.fireAnalytics)((0, _pdfPasswordInput2.createPdfPasswordInputScreenEvent)(), createAnalyticsEvent);
|
|
277
|
+
},
|
|
278
|
+
onSubmit: function onSubmit(data) {
|
|
279
|
+
var _updatePasswordRef$cu;
|
|
280
|
+
// Reset hasPasswordError on each submission
|
|
281
|
+
hasPasswordError && setHasPasswordError(false);
|
|
282
|
+
(_updatePasswordRef$cu = updatePasswordRef.current) === null || _updatePasswordRef$cu === void 0 || _updatePasswordRef$cu.call(updatePasswordRef, data.password);
|
|
283
|
+
},
|
|
284
|
+
hasPasswordError: hasPasswordError
|
|
285
|
+
}) : /*#__PURE__*/_react.default.createElement(_loading.Spinner, null);
|
|
198
286
|
},
|
|
199
287
|
successful: function successful() {
|
|
200
288
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_react2.Global, {
|
|
@@ -202,7 +290,10 @@ var PDFRenderer = exports.PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
202
290
|
}), /*#__PURE__*/_react.default.createElement(_styleWrappers.PDFWrapper, {
|
|
203
291
|
"data-testid": "media-viewer-pdf-content",
|
|
204
292
|
ref: savePdfElement
|
|
205
|
-
},
|
|
293
|
+
},
|
|
294
|
+
/*#__PURE__*/
|
|
295
|
+
// eslint-disable-next-line @atlaskit/design-system/prefer-primitives
|
|
296
|
+
_react.default.createElement("div", {
|
|
206
297
|
className: pdfViewerClassName,
|
|
207
298
|
onClick: (0, _closeOnDirectClick.closeOnDirectClick)(onClose)
|
|
208
299
|
}), /*#__PURE__*/_react.default.createElement(_zoomControls.ZoomControls, {
|
|
@@ -219,4 +310,6 @@ var PDFRenderer = exports.PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
219
310
|
});
|
|
220
311
|
}
|
|
221
312
|
});
|
|
222
|
-
};
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
var PDFRenderer = exports.PDFRenderer = (0, _analyticsNext.withAnalyticsEvents)()(PDFRendererBase);
|
|
@@ -62,7 +62,7 @@ var ImageViewer = exports.ImageViewer = /*#__PURE__*/function (_BaseViewer) {
|
|
|
62
62
|
key: "init",
|
|
63
63
|
value: function () {
|
|
64
64
|
var _init = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
65
|
-
var _this$props, fileState, mediaClient, collectionName, traceContext, orientation, objectUrl, originalBinaryImageUrl, isLocalFileReference, preview, _yield$preview, value, origin, item,
|
|
65
|
+
var _this$props, fileState, mediaClient, collectionName, traceContext, controller, orientation, objectUrl, originalBinaryImageUrl, isLocalFileReference, preview, _yield$preview, value, origin, item, response, imgError;
|
|
66
66
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
67
67
|
while (1) switch (_context.prev = _context.next) {
|
|
68
68
|
case 0:
|
|
@@ -73,50 +73,50 @@ var ImageViewer = exports.ImageViewer = /*#__PURE__*/function (_BaseViewer) {
|
|
|
73
73
|
}
|
|
74
74
|
return _context.abrupt("return");
|
|
75
75
|
case 3:
|
|
76
|
-
|
|
76
|
+
controller = typeof AbortController !== 'undefined' ? new AbortController() : undefined;
|
|
77
|
+
_context.prev = 4;
|
|
77
78
|
orientation = 1;
|
|
78
79
|
isLocalFileReference = false;
|
|
79
80
|
preview = fileState.preview;
|
|
80
81
|
if (!preview) {
|
|
81
|
-
_context.next =
|
|
82
|
+
_context.next = 25;
|
|
82
83
|
break;
|
|
83
84
|
}
|
|
84
|
-
_context.next =
|
|
85
|
+
_context.next = 11;
|
|
85
86
|
return preview;
|
|
86
|
-
case
|
|
87
|
+
case 11:
|
|
87
88
|
_yield$preview = _context.sent;
|
|
88
89
|
value = _yield$preview.value;
|
|
89
90
|
origin = _yield$preview.origin;
|
|
90
91
|
if (!(value instanceof Blob)) {
|
|
91
|
-
_context.next =
|
|
92
|
+
_context.next = 22;
|
|
92
93
|
break;
|
|
93
94
|
}
|
|
94
|
-
_context.next =
|
|
95
|
+
_context.next = 17;
|
|
95
96
|
return (0, _mediaUi.getOrientation)(value);
|
|
96
|
-
case
|
|
97
|
+
case 17:
|
|
97
98
|
orientation = _context.sent;
|
|
98
99
|
objectUrl = URL.createObjectURL(value);
|
|
99
100
|
isLocalFileReference = origin === 'local';
|
|
100
|
-
_context.next =
|
|
101
|
+
_context.next = 23;
|
|
101
102
|
break;
|
|
102
|
-
case 21:
|
|
103
|
-
objectUrl = value;
|
|
104
103
|
case 22:
|
|
104
|
+
objectUrl = value;
|
|
105
|
+
case 23:
|
|
105
106
|
_context.next = 38;
|
|
106
107
|
break;
|
|
107
|
-
case
|
|
108
|
+
case 25:
|
|
108
109
|
if (!(0, _mediaClient.isImageRepresentationReady)(fileState)) {
|
|
109
110
|
_context.next = 36;
|
|
110
111
|
break;
|
|
111
112
|
}
|
|
112
113
|
item = processedFileStateToMediaItem(fileState);
|
|
113
|
-
controller = typeof AbortController !== 'undefined' ? new AbortController() : undefined;
|
|
114
114
|
response = mediaClient.getImage(item.details.id, {
|
|
115
115
|
collection: collectionName,
|
|
116
116
|
mode: 'fit'
|
|
117
117
|
}, controller, true, traceContext);
|
|
118
118
|
this.cancelImageFetch = function () {
|
|
119
|
-
return controller
|
|
119
|
+
return controller === null || controller === void 0 ? void 0 : controller.abort();
|
|
120
120
|
};
|
|
121
121
|
_context.t0 = URL;
|
|
122
122
|
_context.next = 32;
|
|
@@ -154,9 +154,9 @@ var ImageViewer = exports.ImageViewer = /*#__PURE__*/function (_BaseViewer) {
|
|
|
154
154
|
break;
|
|
155
155
|
case 45:
|
|
156
156
|
_context.prev = 45;
|
|
157
|
-
_context.t2 = _context["catch"](
|
|
157
|
+
_context.t2 = _context["catch"](4);
|
|
158
158
|
// TODO : properly handle aborted requests (MS-2843)
|
|
159
|
-
if (!(0
|
|
159
|
+
if (!(controller !== null && controller !== void 0 && controller.signal.aborted)) {
|
|
160
160
|
imgError = new _errors.MediaViewerError('imageviewer-fetch-url', _context.t2 instanceof Error ? _context.t2 : undefined);
|
|
161
161
|
this.setState({
|
|
162
162
|
content: _domain.Outcome.failed(imgError)
|
|
@@ -167,7 +167,7 @@ var ImageViewer = exports.ImageViewer = /*#__PURE__*/function (_BaseViewer) {
|
|
|
167
167
|
case "end":
|
|
168
168
|
return _context.stop();
|
|
169
169
|
}
|
|
170
|
-
}, _callee, this, [[
|
|
170
|
+
}, _callee, this, [[4, 45]]);
|
|
171
171
|
}));
|
|
172
172
|
function init() {
|
|
173
173
|
return _init.apply(this, arguments);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ANALYTICS_MEDIA_CHANNEL } from '@atlaskit/media-common';
|
|
2
2
|
const componentName = 'mediaViewer';
|
|
3
3
|
const packageName = "@atlaskit/media-viewer";
|
|
4
|
-
const packageVersion = "48.
|
|
4
|
+
const packageVersion = "48.3.0";
|
|
5
5
|
export { packageName, packageVersion, componentName, componentName as component };
|
|
6
6
|
export function getFileAttributes(fileState) {
|
|
7
7
|
if (!fileState) {
|
|
@@ -2,7 +2,7 @@ import { UFOExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atl
|
|
|
2
2
|
import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
|
|
3
3
|
import { getFeatureFlagKeysAllProducts } from '@atlaskit/media-common';
|
|
4
4
|
const packageName = "@atlaskit/media-viewer";
|
|
5
|
-
const packageVersion = "48.
|
|
5
|
+
const packageVersion = "48.3.0";
|
|
6
6
|
let ufoExperience;
|
|
7
7
|
const getExperience = () => {
|
|
8
8
|
if (!ufoExperience) {
|
|
@@ -13,17 +13,18 @@ export class Outcome {
|
|
|
13
13
|
status: 'PENDING'
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
static failed(err) {
|
|
16
|
+
static failed(err, data) {
|
|
17
17
|
return new Outcome({
|
|
18
18
|
status: 'FAILED',
|
|
19
|
-
err
|
|
19
|
+
err,
|
|
20
|
+
data
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
get status() {
|
|
23
24
|
return this.state.status;
|
|
24
25
|
}
|
|
25
26
|
get data() {
|
|
26
|
-
if (this.state.status === 'SUCCESSFUL') {
|
|
27
|
+
if (this.state.status === 'SUCCESSFUL' || this.state.status === 'FAILED') {
|
|
27
28
|
return this.state.data;
|
|
28
29
|
} else {
|
|
29
30
|
return;
|
|
@@ -62,21 +63,7 @@ export class Outcome {
|
|
|
62
63
|
case 'PENDING':
|
|
63
64
|
return pending();
|
|
64
65
|
case 'FAILED':
|
|
65
|
-
return failed(this.state.err);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
mapSuccessful(map) {
|
|
69
|
-
if (this.state.status === 'SUCCESSFUL') {
|
|
70
|
-
return Outcome.successful(map(this.state.data));
|
|
71
|
-
} else {
|
|
72
|
-
return new Outcome(this.state);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
mapFailed(map) {
|
|
76
|
-
if (this.state.status === 'FAILED') {
|
|
77
|
-
return Outcome.failed(map(this.state.err));
|
|
78
|
-
} else {
|
|
79
|
-
return new Outcome(this.state);
|
|
66
|
+
return failed(this.state.err, this.state.data);
|
|
80
67
|
}
|
|
81
68
|
}
|
|
82
69
|
}
|
|
@@ -3,6 +3,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import Loadable from 'react-loadable';
|
|
5
5
|
import { isExternalImageIdentifier, isFileIdentifier } from '@atlaskit/media-client';
|
|
6
|
+
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
6
7
|
import { FormattedMessage } from 'react-intl-next';
|
|
7
8
|
import { messages } from '@atlaskit/media-ui';
|
|
8
9
|
import { isCodeViewerItem } from '@atlaskit/media-ui/codeViewer';
|
|
@@ -78,9 +79,9 @@ export class ItemViewerBase extends React.Component {
|
|
|
78
79
|
}
|
|
79
80
|
});
|
|
80
81
|
});
|
|
81
|
-
_defineProperty(this, "onLoadFail", mediaViewerError => {
|
|
82
|
+
_defineProperty(this, "onLoadFail", (mediaViewerError, data) => {
|
|
82
83
|
this.safeSetState({
|
|
83
|
-
item: Outcome.failed(mediaViewerError)
|
|
84
|
+
item: Outcome.failed(mediaViewerError, data)
|
|
84
85
|
});
|
|
85
86
|
});
|
|
86
87
|
_defineProperty(this, "onExternalImgSuccess", () => {
|
|
@@ -170,7 +171,9 @@ export class ItemViewerBase extends React.Component {
|
|
|
170
171
|
case 'doc':
|
|
171
172
|
return /*#__PURE__*/React.createElement(DocViewer, _extends({
|
|
172
173
|
onSuccess: this.onSuccess,
|
|
173
|
-
onError:
|
|
174
|
+
onError: err => {
|
|
175
|
+
this.onLoadFail(err, fileState);
|
|
176
|
+
}
|
|
174
177
|
}, viewerProps));
|
|
175
178
|
case 'archive':
|
|
176
179
|
return /*#__PURE__*/React.createElement(ArchiveViewerLoader, _extends({
|
|
@@ -232,21 +235,23 @@ export class ItemViewerBase extends React.Component {
|
|
|
232
235
|
});
|
|
233
236
|
} else {
|
|
234
237
|
// render a FileState fetched through media-client
|
|
235
|
-
|
|
236
|
-
switch (fileState.status) {
|
|
238
|
+
switch (fileItem.status) {
|
|
237
239
|
case 'processed':
|
|
238
240
|
case 'uploading':
|
|
239
241
|
case 'processing':
|
|
240
|
-
return this.renderItem(
|
|
242
|
+
return this.renderItem(fileItem);
|
|
241
243
|
case 'failed-processing':
|
|
242
|
-
|
|
244
|
+
if (getBooleanFF('platform.corex.password-protected-pdf_ht8re') && fileItem.mediaType === 'doc' && fileItem.mimeType === 'application/pdf') {
|
|
245
|
+
return this.renderItem(fileItem);
|
|
246
|
+
}
|
|
247
|
+
return this.renderError(new MediaViewerError('itemviewer-file-failed-processing-status'), fileItem);
|
|
243
248
|
case 'error':
|
|
244
|
-
return this.renderError(new MediaViewerError('itemviewer-file-error-status'),
|
|
249
|
+
return this.renderError(new MediaViewerError('itemviewer-file-error-status'), fileItem);
|
|
245
250
|
}
|
|
246
251
|
}
|
|
247
252
|
},
|
|
248
253
|
pending: () => /*#__PURE__*/React.createElement(Spinner, null),
|
|
249
|
-
failed: error => this.renderError(error,
|
|
254
|
+
failed: (error, data) => this.renderError(error, data)
|
|
250
255
|
});
|
|
251
256
|
}
|
|
252
257
|
renderDownloadButton(fileState, error) {
|
|
@@ -103,7 +103,8 @@ export class MediaViewerComponent extends React.Component {
|
|
|
103
103
|
className: mediaViewerPopupClass
|
|
104
104
|
}, /*#__PURE__*/React.createElement(Shortcut, {
|
|
105
105
|
code: 'Escape',
|
|
106
|
-
handler: this.onShortcutClosed
|
|
106
|
+
handler: this.onShortcutClosed,
|
|
107
|
+
eventType: 'keyup'
|
|
107
108
|
}), /*#__PURE__*/React.createElement(Content, {
|
|
108
109
|
isSidebarVisible: isSidebarVisible,
|
|
109
110
|
onClose: this.onContentClose
|
|
@@ -59,7 +59,8 @@ export class NavigationBase extends Component {
|
|
|
59
59
|
className: hideControlsClassName
|
|
60
60
|
}, /*#__PURE__*/React.createElement(Shortcut, {
|
|
61
61
|
code: 'ArrowLeft',
|
|
62
|
-
handler: prev('keyboard')
|
|
62
|
+
handler: prev('keyboard'),
|
|
63
|
+
eventType: 'keyup'
|
|
63
64
|
}), /*#__PURE__*/React.createElement(Button, {
|
|
64
65
|
testId: prevNavButtonId,
|
|
65
66
|
onClick: prev('mouse'),
|
|
@@ -77,7 +78,8 @@ export class NavigationBase extends Component {
|
|
|
77
78
|
className: hideControlsClassName
|
|
78
79
|
}, /*#__PURE__*/React.createElement(Shortcut, {
|
|
79
80
|
code: 'ArrowRight',
|
|
80
|
-
handler: next('keyboard')
|
|
81
|
+
handler: next('keyboard'),
|
|
82
|
+
eventType: 'keyup'
|
|
81
83
|
}), /*#__PURE__*/React.createElement(Button, {
|
|
82
84
|
testId: nextNavButtonId,
|
|
83
85
|
onClick: next('mouse'),
|
|
@@ -19,23 +19,23 @@ import { InteractiveImg } from '../viewers/image/interactive-img';
|
|
|
19
19
|
import ArchiveViewerLoader from '../viewers/archiveSidebar/archiveViewerLoader';
|
|
20
20
|
import { getRandomHex } from '@atlaskit/media-common';
|
|
21
21
|
import { startMediaFileUfoExperience, succeedMediaFileUfoExperience } from '../analytics/ufoExperiences';
|
|
22
|
-
const
|
|
22
|
+
const ImageViewerV2 = Loadable({
|
|
23
23
|
loader: () => import( /* webpackChunkName: "@atlaskit-internal_imageViewer" */'../viewers/image').then(mod => mod.ImageViewer),
|
|
24
24
|
loading: () => /*#__PURE__*/React.createElement(Spinner, null)
|
|
25
25
|
});
|
|
26
|
-
const
|
|
26
|
+
const VideoViewerV2 = Loadable({
|
|
27
27
|
loader: () => import( /* webpackChunkName: "@atlaskit-internal_videoViewer" */'../viewers/video').then(mod => mod.VideoViewer),
|
|
28
28
|
loading: () => /*#__PURE__*/React.createElement(Spinner, null)
|
|
29
29
|
});
|
|
30
|
-
const
|
|
30
|
+
const AudioViewerV2 = Loadable({
|
|
31
31
|
loader: () => import( /* webpackChunkName: "@atlaskit-internal_audioViewer" */'../viewers/audio').then(mod => mod.AudioViewer),
|
|
32
32
|
loading: () => /*#__PURE__*/React.createElement(Spinner, null)
|
|
33
33
|
});
|
|
34
|
-
const
|
|
34
|
+
const DocViewerV2 = Loadable({
|
|
35
35
|
loader: () => import( /* webpackChunkName: "@atlaskit-internal_docViewer" */'../viewers/doc').then(mod => mod.DocViewer),
|
|
36
36
|
loading: () => /*#__PURE__*/React.createElement(Spinner, null)
|
|
37
37
|
});
|
|
38
|
-
const
|
|
38
|
+
const CodeViewerV2 = Loadable({
|
|
39
39
|
loader: () => import( /* webpackChunkName: "@atlaskit-internal_codeViewer" */'../viewers/codeViewer').then(mod => mod.CodeViewer),
|
|
40
40
|
loading: () => /*#__PURE__*/React.createElement(Spinner, null)
|
|
41
41
|
});
|
|
@@ -206,7 +206,7 @@ export const ItemViewerV2Base = ({
|
|
|
206
206
|
if (fileItem.size > MAX_FILE_SIZE_SUPPORTED_BY_CODEVIEWER) {
|
|
207
207
|
return renderError(new MediaViewerError('codeviewer-file-size-exceeds'), fileItem);
|
|
208
208
|
}
|
|
209
|
-
return /*#__PURE__*/React.createElement(
|
|
209
|
+
return /*#__PURE__*/React.createElement(CodeViewerV2, _extends({
|
|
210
210
|
onSuccess: onSuccess,
|
|
211
211
|
onError: onLoadFail
|
|
212
212
|
}, viewerProps));
|
|
@@ -216,26 +216,26 @@ export const ItemViewerV2Base = ({
|
|
|
216
216
|
} = fileItem;
|
|
217
217
|
switch (mediaType) {
|
|
218
218
|
case 'image':
|
|
219
|
-
return /*#__PURE__*/React.createElement(
|
|
219
|
+
return /*#__PURE__*/React.createElement(ImageViewerV2, _extends({
|
|
220
220
|
onLoad: onSuccess,
|
|
221
221
|
onError: onLoadFail,
|
|
222
222
|
contextId: contextId,
|
|
223
223
|
traceContext: traceContext.current
|
|
224
224
|
}, viewerProps));
|
|
225
225
|
case 'audio':
|
|
226
|
-
return /*#__PURE__*/React.createElement(
|
|
226
|
+
return /*#__PURE__*/React.createElement(AudioViewerV2, _extends({
|
|
227
227
|
showControls: showControls,
|
|
228
228
|
onCanPlay: onSuccess,
|
|
229
229
|
onError: onLoadFail
|
|
230
230
|
}, viewerProps));
|
|
231
231
|
case 'video':
|
|
232
|
-
return /*#__PURE__*/React.createElement(
|
|
232
|
+
return /*#__PURE__*/React.createElement(VideoViewerV2, _extends({
|
|
233
233
|
showControls: showControls,
|
|
234
234
|
onCanPlay: onSuccess,
|
|
235
235
|
onError: onLoadFail
|
|
236
236
|
}, viewerProps));
|
|
237
237
|
case 'doc':
|
|
238
|
-
return /*#__PURE__*/React.createElement(
|
|
238
|
+
return /*#__PURE__*/React.createElement(DocViewerV2, _extends({
|
|
239
239
|
onSuccess: onSuccess,
|
|
240
240
|
onError: onLoadFail
|
|
241
241
|
}, viewerProps));
|
|
@@ -2,11 +2,9 @@ import React from 'react';
|
|
|
2
2
|
import { isPreviewableFileState } from '@atlaskit/media-client';
|
|
3
3
|
import { Outcome } from '../../domain';
|
|
4
4
|
import { MediaViewerError } from '../../errors';
|
|
5
|
-
import {
|
|
5
|
+
import { PDFRenderer } from './pdfRenderer';
|
|
6
6
|
import { BaseViewer } from '../base-viewer';
|
|
7
7
|
import { getObjectUrlFromFileState } from '../../utils/getObjectUrlFromFileState';
|
|
8
|
-
const moduleLoader = () => import( /* webpackChunkName: "@atlaskit-internal_media-pdf-viewer" */'./pdfRenderer');
|
|
9
|
-
const componentLoader = () => moduleLoader().then(module => module.PDFRenderer);
|
|
10
8
|
export class DocViewer extends BaseViewer {
|
|
11
9
|
get initialState() {
|
|
12
10
|
return {
|
|
@@ -14,9 +12,6 @@ export class DocViewer extends BaseViewer {
|
|
|
14
12
|
};
|
|
15
13
|
}
|
|
16
14
|
async init() {
|
|
17
|
-
if (!DocViewer.PDFComponent) {
|
|
18
|
-
await this.loadDocViewer();
|
|
19
|
-
}
|
|
20
15
|
const {
|
|
21
16
|
item,
|
|
22
17
|
mediaClient,
|
|
@@ -37,6 +32,24 @@ export class DocViewer extends BaseViewer {
|
|
|
37
32
|
} else if (item.status === 'processed') {
|
|
38
33
|
try {
|
|
39
34
|
const src = await mediaClient.file.getArtifactURL(item.artifacts, 'document.pdf', collectionName);
|
|
35
|
+
this.onMediaDisplayed();
|
|
36
|
+
this.setState({
|
|
37
|
+
content: Outcome.successful(src)
|
|
38
|
+
});
|
|
39
|
+
} catch (error) {
|
|
40
|
+
const docError = new MediaViewerError('docviewer-fetch-url', error instanceof Error ? error : undefined);
|
|
41
|
+
this.setState({
|
|
42
|
+
content: Outcome.failed(docError)
|
|
43
|
+
});
|
|
44
|
+
if (onError) {
|
|
45
|
+
onError(docError);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
} else if (item.status === 'failed-processing') {
|
|
49
|
+
try {
|
|
50
|
+
const src = await mediaClient.file.getFileBinaryURL(item.id, collectionName, 2940 // 2940 seconds ~= 50 mins
|
|
51
|
+
);
|
|
52
|
+
|
|
40
53
|
this.onMediaDisplayed();
|
|
41
54
|
this.setState({
|
|
42
55
|
content: Outcome.successful(src)
|
|
@@ -52,10 +65,6 @@ export class DocViewer extends BaseViewer {
|
|
|
52
65
|
}
|
|
53
66
|
}
|
|
54
67
|
}
|
|
55
|
-
async loadDocViewer() {
|
|
56
|
-
DocViewer.PDFComponent = await componentLoader();
|
|
57
|
-
this.forceUpdate();
|
|
58
|
-
}
|
|
59
68
|
release() {
|
|
60
69
|
const {
|
|
61
70
|
content
|
|
@@ -72,13 +81,7 @@ export class DocViewer extends BaseViewer {
|
|
|
72
81
|
onSuccess,
|
|
73
82
|
onError
|
|
74
83
|
} = this.props;
|
|
75
|
-
|
|
76
|
-
PDFComponent
|
|
77
|
-
} = DocViewer;
|
|
78
|
-
if (!PDFComponent) {
|
|
79
|
-
return /*#__PURE__*/React.createElement(Spinner, null);
|
|
80
|
-
}
|
|
81
|
-
return /*#__PURE__*/React.createElement(PDFComponent, {
|
|
84
|
+
return /*#__PURE__*/React.createElement(PDFRenderer, {
|
|
82
85
|
item: item,
|
|
83
86
|
src: content,
|
|
84
87
|
onSuccess: onSuccess,
|