@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
|
@@ -20,7 +20,7 @@ import { InteractiveImg } from '../viewers/image/interactive-img';
|
|
|
20
20
|
import ArchiveViewerLoader from '../viewers/archiveSidebar/archiveViewerLoader';
|
|
21
21
|
import { getRandomHex } from '@atlaskit/media-common';
|
|
22
22
|
import { startMediaFileUfoExperience, succeedMediaFileUfoExperience } from '../analytics/ufoExperiences';
|
|
23
|
-
var
|
|
23
|
+
var ImageViewerV2 = Loadable({
|
|
24
24
|
loader: function loader() {
|
|
25
25
|
return import( /* webpackChunkName: "@atlaskit-internal_imageViewer" */'../viewers/image').then(function (mod) {
|
|
26
26
|
return mod.ImageViewer;
|
|
@@ -30,7 +30,7 @@ var ImageViewer = Loadable({
|
|
|
30
30
|
return /*#__PURE__*/React.createElement(Spinner, null);
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
|
-
var
|
|
33
|
+
var VideoViewerV2 = Loadable({
|
|
34
34
|
loader: function loader() {
|
|
35
35
|
return import( /* webpackChunkName: "@atlaskit-internal_videoViewer" */'../viewers/video').then(function (mod) {
|
|
36
36
|
return mod.VideoViewer;
|
|
@@ -40,7 +40,7 @@ var VideoViewer = Loadable({
|
|
|
40
40
|
return /*#__PURE__*/React.createElement(Spinner, null);
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
|
-
var
|
|
43
|
+
var AudioViewerV2 = Loadable({
|
|
44
44
|
loader: function loader() {
|
|
45
45
|
return import( /* webpackChunkName: "@atlaskit-internal_audioViewer" */'../viewers/audio').then(function (mod) {
|
|
46
46
|
return mod.AudioViewer;
|
|
@@ -50,7 +50,7 @@ var AudioViewer = Loadable({
|
|
|
50
50
|
return /*#__PURE__*/React.createElement(Spinner, null);
|
|
51
51
|
}
|
|
52
52
|
});
|
|
53
|
-
var
|
|
53
|
+
var DocViewerV2 = Loadable({
|
|
54
54
|
loader: function loader() {
|
|
55
55
|
return import( /* webpackChunkName: "@atlaskit-internal_docViewer" */'../viewers/doc').then(function (mod) {
|
|
56
56
|
return mod.DocViewer;
|
|
@@ -60,7 +60,7 @@ var DocViewer = Loadable({
|
|
|
60
60
|
return /*#__PURE__*/React.createElement(Spinner, null);
|
|
61
61
|
}
|
|
62
62
|
});
|
|
63
|
-
var
|
|
63
|
+
var CodeViewerV2 = Loadable({
|
|
64
64
|
loader: function loader() {
|
|
65
65
|
return import( /* webpackChunkName: "@atlaskit-internal_codeViewer" */'../viewers/codeViewer').then(function (mod) {
|
|
66
66
|
return mod.CodeViewer;
|
|
@@ -239,7 +239,7 @@ export var ItemViewerV2Base = function ItemViewerV2Base(_ref) {
|
|
|
239
239
|
if (fileItem.size > MAX_FILE_SIZE_SUPPORTED_BY_CODEVIEWER) {
|
|
240
240
|
return renderError(new MediaViewerError('codeviewer-file-size-exceeds'), fileItem);
|
|
241
241
|
}
|
|
242
|
-
return /*#__PURE__*/React.createElement(
|
|
242
|
+
return /*#__PURE__*/React.createElement(CodeViewerV2, _extends({
|
|
243
243
|
onSuccess: onSuccess,
|
|
244
244
|
onError: onLoadFail
|
|
245
245
|
}, viewerProps));
|
|
@@ -247,26 +247,26 @@ export var ItemViewerV2Base = function ItemViewerV2Base(_ref) {
|
|
|
247
247
|
var mediaType = fileItem.mediaType;
|
|
248
248
|
switch (mediaType) {
|
|
249
249
|
case 'image':
|
|
250
|
-
return /*#__PURE__*/React.createElement(
|
|
250
|
+
return /*#__PURE__*/React.createElement(ImageViewerV2, _extends({
|
|
251
251
|
onLoad: onSuccess,
|
|
252
252
|
onError: onLoadFail,
|
|
253
253
|
contextId: contextId,
|
|
254
254
|
traceContext: traceContext.current
|
|
255
255
|
}, viewerProps));
|
|
256
256
|
case 'audio':
|
|
257
|
-
return /*#__PURE__*/React.createElement(
|
|
257
|
+
return /*#__PURE__*/React.createElement(AudioViewerV2, _extends({
|
|
258
258
|
showControls: showControls,
|
|
259
259
|
onCanPlay: onSuccess,
|
|
260
260
|
onError: onLoadFail
|
|
261
261
|
}, viewerProps));
|
|
262
262
|
case 'video':
|
|
263
|
-
return /*#__PURE__*/React.createElement(
|
|
263
|
+
return /*#__PURE__*/React.createElement(VideoViewerV2, _extends({
|
|
264
264
|
showControls: showControls,
|
|
265
265
|
onCanPlay: onSuccess,
|
|
266
266
|
onError: onLoadFail
|
|
267
267
|
}, viewerProps));
|
|
268
268
|
case 'doc':
|
|
269
|
-
return /*#__PURE__*/React.createElement(
|
|
269
|
+
return /*#__PURE__*/React.createElement(DocViewerV2, _extends({
|
|
270
270
|
onSuccess: onSuccess,
|
|
271
271
|
onError: onLoadFail
|
|
272
272
|
}, viewerProps));
|
|
@@ -11,17 +11,9 @@ import React from 'react';
|
|
|
11
11
|
import { isPreviewableFileState } from '@atlaskit/media-client';
|
|
12
12
|
import { Outcome } from '../../domain';
|
|
13
13
|
import { MediaViewerError } from '../../errors';
|
|
14
|
-
import {
|
|
14
|
+
import { PDFRenderer } from './pdfRenderer';
|
|
15
15
|
import { BaseViewer } from '../base-viewer';
|
|
16
16
|
import { getObjectUrlFromFileState } from '../../utils/getObjectUrlFromFileState';
|
|
17
|
-
var moduleLoader = function moduleLoader() {
|
|
18
|
-
return import( /* webpackChunkName: "@atlaskit-internal_media-pdf-viewer" */'./pdfRenderer');
|
|
19
|
-
};
|
|
20
|
-
var componentLoader = function componentLoader() {
|
|
21
|
-
return moduleLoader().then(function (module) {
|
|
22
|
-
return module.PDFRenderer;
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
17
|
export var DocViewer = /*#__PURE__*/function (_BaseViewer) {
|
|
26
18
|
_inherits(DocViewer, _BaseViewer);
|
|
27
19
|
var _super = _createSuper(DocViewer);
|
|
@@ -40,59 +32,52 @@ export var DocViewer = /*#__PURE__*/function (_BaseViewer) {
|
|
|
40
32
|
key: "init",
|
|
41
33
|
value: function () {
|
|
42
34
|
var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
43
|
-
var _this$props, item, mediaClient, collectionName, onError, src, _src, docError;
|
|
35
|
+
var _this$props, item, mediaClient, collectionName, onError, src, _src, docError, _src2, _docError;
|
|
44
36
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
45
37
|
while (1) switch (_context.prev = _context.next) {
|
|
46
38
|
case 0:
|
|
47
|
-
if (DocViewer.PDFComponent) {
|
|
48
|
-
_context.next = 3;
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
_context.next = 3;
|
|
52
|
-
return this.loadDocViewer();
|
|
53
|
-
case 3:
|
|
54
39
|
_this$props = this.props, item = _this$props.item, mediaClient = _this$props.mediaClient, collectionName = _this$props.collectionName, onError = _this$props.onError;
|
|
55
40
|
if (!isPreviewableFileState(item)) {
|
|
56
|
-
_context.next =
|
|
41
|
+
_context.next = 11;
|
|
57
42
|
break;
|
|
58
43
|
}
|
|
59
|
-
_context.next =
|
|
44
|
+
_context.next = 4;
|
|
60
45
|
return getObjectUrlFromFileState(item);
|
|
61
|
-
case
|
|
46
|
+
case 4:
|
|
62
47
|
src = _context.sent;
|
|
63
48
|
if (src) {
|
|
64
|
-
_context.next =
|
|
49
|
+
_context.next = 8;
|
|
65
50
|
break;
|
|
66
51
|
}
|
|
67
52
|
this.setState({
|
|
68
53
|
content: Outcome.pending()
|
|
69
54
|
});
|
|
70
55
|
return _context.abrupt("return");
|
|
71
|
-
case
|
|
56
|
+
case 8:
|
|
72
57
|
this.setState({
|
|
73
58
|
content: Outcome.successful(src)
|
|
74
59
|
});
|
|
75
|
-
_context.next =
|
|
60
|
+
_context.next = 41;
|
|
76
61
|
break;
|
|
77
|
-
case
|
|
62
|
+
case 11:
|
|
78
63
|
if (!(item.status === 'processed')) {
|
|
79
|
-
_context.next =
|
|
64
|
+
_context.next = 27;
|
|
80
65
|
break;
|
|
81
66
|
}
|
|
82
|
-
_context.prev =
|
|
83
|
-
_context.next =
|
|
67
|
+
_context.prev = 12;
|
|
68
|
+
_context.next = 15;
|
|
84
69
|
return mediaClient.file.getArtifactURL(item.artifacts, 'document.pdf', collectionName);
|
|
85
|
-
case
|
|
70
|
+
case 15:
|
|
86
71
|
_src = _context.sent;
|
|
87
72
|
this.onMediaDisplayed();
|
|
88
73
|
this.setState({
|
|
89
74
|
content: Outcome.successful(_src)
|
|
90
75
|
});
|
|
91
|
-
_context.next =
|
|
76
|
+
_context.next = 25;
|
|
92
77
|
break;
|
|
93
|
-
case
|
|
94
|
-
_context.prev =
|
|
95
|
-
_context.t0 = _context["catch"](
|
|
78
|
+
case 20:
|
|
79
|
+
_context.prev = 20;
|
|
80
|
+
_context.t0 = _context["catch"](12);
|
|
96
81
|
docError = new MediaViewerError('docviewer-fetch-url', _context.t0 instanceof Error ? _context.t0 : undefined);
|
|
97
82
|
this.setState({
|
|
98
83
|
content: Outcome.failed(docError)
|
|
@@ -100,40 +85,47 @@ export var DocViewer = /*#__PURE__*/function (_BaseViewer) {
|
|
|
100
85
|
if (onError) {
|
|
101
86
|
onError(docError);
|
|
102
87
|
}
|
|
103
|
-
case
|
|
88
|
+
case 25:
|
|
89
|
+
_context.next = 41;
|
|
90
|
+
break;
|
|
91
|
+
case 27:
|
|
92
|
+
if (!(item.status === 'failed-processing')) {
|
|
93
|
+
_context.next = 41;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
_context.prev = 28;
|
|
97
|
+
_context.next = 31;
|
|
98
|
+
return mediaClient.file.getFileBinaryURL(item.id, collectionName, 2940 // 2940 seconds ~= 50 mins
|
|
99
|
+
);
|
|
100
|
+
case 31:
|
|
101
|
+
_src2 = _context.sent;
|
|
102
|
+
this.onMediaDisplayed();
|
|
103
|
+
this.setState({
|
|
104
|
+
content: Outcome.successful(_src2)
|
|
105
|
+
});
|
|
106
|
+
_context.next = 41;
|
|
107
|
+
break;
|
|
108
|
+
case 36:
|
|
109
|
+
_context.prev = 36;
|
|
110
|
+
_context.t1 = _context["catch"](28);
|
|
111
|
+
_docError = new MediaViewerError('docviewer-fetch-url', _context.t1 instanceof Error ? _context.t1 : undefined);
|
|
112
|
+
this.setState({
|
|
113
|
+
content: Outcome.failed(_docError)
|
|
114
|
+
});
|
|
115
|
+
if (onError) {
|
|
116
|
+
onError(_docError);
|
|
117
|
+
}
|
|
118
|
+
case 41:
|
|
104
119
|
case "end":
|
|
105
120
|
return _context.stop();
|
|
106
121
|
}
|
|
107
|
-
}, _callee, this, [[
|
|
122
|
+
}, _callee, this, [[12, 20], [28, 36]]);
|
|
108
123
|
}));
|
|
109
124
|
function init() {
|
|
110
125
|
return _init.apply(this, arguments);
|
|
111
126
|
}
|
|
112
127
|
return init;
|
|
113
128
|
}()
|
|
114
|
-
}, {
|
|
115
|
-
key: "loadDocViewer",
|
|
116
|
-
value: function () {
|
|
117
|
-
var _loadDocViewer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
118
|
-
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
119
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
120
|
-
case 0:
|
|
121
|
-
_context2.next = 2;
|
|
122
|
-
return componentLoader();
|
|
123
|
-
case 2:
|
|
124
|
-
DocViewer.PDFComponent = _context2.sent;
|
|
125
|
-
this.forceUpdate();
|
|
126
|
-
case 4:
|
|
127
|
-
case "end":
|
|
128
|
-
return _context2.stop();
|
|
129
|
-
}
|
|
130
|
-
}, _callee2, this);
|
|
131
|
-
}));
|
|
132
|
-
function loadDocViewer() {
|
|
133
|
-
return _loadDocViewer.apply(this, arguments);
|
|
134
|
-
}
|
|
135
|
-
return loadDocViewer;
|
|
136
|
-
}()
|
|
137
129
|
}, {
|
|
138
130
|
key: "release",
|
|
139
131
|
value: function release() {
|
|
@@ -151,11 +143,7 @@ export var DocViewer = /*#__PURE__*/function (_BaseViewer) {
|
|
|
151
143
|
onClose = _this$props2.onClose,
|
|
152
144
|
onSuccess = _this$props2.onSuccess,
|
|
153
145
|
onError = _this$props2.onError;
|
|
154
|
-
|
|
155
|
-
if (!PDFComponent) {
|
|
156
|
-
return /*#__PURE__*/React.createElement(Spinner, null);
|
|
157
|
-
}
|
|
158
|
-
return /*#__PURE__*/React.createElement(PDFComponent, {
|
|
146
|
+
return /*#__PURE__*/React.createElement(PDFRenderer, {
|
|
159
147
|
item: item,
|
|
160
148
|
src: content,
|
|
161
149
|
onSuccess: onSuccess,
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
4
|
+
import LoadingButton from '@atlaskit/button/loading-button';
|
|
5
|
+
import TextField from '@atlaskit/textfield';
|
|
6
|
+
import LockIcon from '@atlaskit/icon/glyph/lock';
|
|
7
|
+
import Form, { ErrorMessage, Field } from '@atlaskit/form';
|
|
8
|
+
import { FormattedMessage, useIntl } from 'react-intl-next';
|
|
9
|
+
import { messages } from '@atlaskit/media-ui';
|
|
10
|
+
import Heading from '@atlaskit/heading';
|
|
11
|
+
import { xcss, Box, Flex } from '@atlaskit/primitives';
|
|
12
|
+
var headerStyles = xcss({
|
|
13
|
+
textAlign: 'center',
|
|
14
|
+
marginTop: 'space.300',
|
|
15
|
+
marginBottom: 'space.100'
|
|
16
|
+
});
|
|
17
|
+
var inputStyle = xcss({
|
|
18
|
+
width: '330px'
|
|
19
|
+
});
|
|
20
|
+
var footerStyles = xcss({
|
|
21
|
+
marginTop: 'space.200',
|
|
22
|
+
display: 'flex',
|
|
23
|
+
justifyContent: 'center'
|
|
24
|
+
});
|
|
25
|
+
export var PDFPasswordInput = function PDFPasswordInput(_ref) {
|
|
26
|
+
var onSubmit = _ref.onSubmit,
|
|
27
|
+
hasPasswordError = _ref.hasPasswordError,
|
|
28
|
+
onRender = _ref.onRender;
|
|
29
|
+
var passwordInputRef = useRef(null);
|
|
30
|
+
var onRenderRef = useRef(onRender);
|
|
31
|
+
var _useState = useState(hasPasswordError),
|
|
32
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
33
|
+
formError = _useState2[0],
|
|
34
|
+
setFormError = _useState2[1];
|
|
35
|
+
var intl = useIntl();
|
|
36
|
+
useEffect(function () {
|
|
37
|
+
var _onRenderRef$current;
|
|
38
|
+
(_onRenderRef$current = onRenderRef.current) === null || _onRenderRef$current === void 0 || _onRenderRef$current.call(onRenderRef);
|
|
39
|
+
}, []);
|
|
40
|
+
useEffect(function () {
|
|
41
|
+
if (hasPasswordError) {
|
|
42
|
+
var _passwordInputRef$cur;
|
|
43
|
+
setFormError(true);
|
|
44
|
+
(_passwordInputRef$cur = passwordInputRef.current) === null || _passwordInputRef$cur === void 0 || _passwordInputRef$cur.focus();
|
|
45
|
+
}
|
|
46
|
+
}, [hasPasswordError]);
|
|
47
|
+
return /*#__PURE__*/React.createElement(Form, {
|
|
48
|
+
onSubmit: onSubmit
|
|
49
|
+
}, function (_ref2) {
|
|
50
|
+
var formProps = _ref2.formProps,
|
|
51
|
+
submitting = _ref2.submitting;
|
|
52
|
+
return /*#__PURE__*/React.createElement("form", formProps, /*#__PURE__*/React.createElement(Flex, {
|
|
53
|
+
justifyContent: "center",
|
|
54
|
+
"aria-hidden": true
|
|
55
|
+
}, /*#__PURE__*/React.createElement(LockIcon, {
|
|
56
|
+
label: "forbidden-lock-icon",
|
|
57
|
+
size: "xlarge",
|
|
58
|
+
primaryColor: "var(--ds-text, #c7d1db)"
|
|
59
|
+
})), /*#__PURE__*/React.createElement(Box, {
|
|
60
|
+
xcss: headerStyles
|
|
61
|
+
}, /*#__PURE__*/React.createElement(Heading, {
|
|
62
|
+
as: "h1",
|
|
63
|
+
level: "h200"
|
|
64
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.password_protected_pdf))), /*#__PURE__*/React.createElement(Field, {
|
|
65
|
+
"aria-required": true,
|
|
66
|
+
name: "password",
|
|
67
|
+
label: "Password",
|
|
68
|
+
isRequired: true
|
|
69
|
+
}, function (_ref3) {
|
|
70
|
+
var fieldProps = _ref3.fieldProps;
|
|
71
|
+
return /*#__PURE__*/React.createElement(Box, {
|
|
72
|
+
xcss: inputStyle
|
|
73
|
+
}, /*#__PURE__*/React.createElement(TextField, _extends({}, fieldProps, {
|
|
74
|
+
type: "password",
|
|
75
|
+
placeholder: intl.formatMessage(messages.enter_password),
|
|
76
|
+
ref: passwordInputRef,
|
|
77
|
+
onChange: function onChange(value) {
|
|
78
|
+
fieldProps.onChange(value);
|
|
79
|
+
setFormError(false);
|
|
80
|
+
}
|
|
81
|
+
})), formError && /*#__PURE__*/React.createElement(ErrorMessage, null, /*#__PURE__*/React.createElement(FormattedMessage, messages.incorrect_password)));
|
|
82
|
+
}), /*#__PURE__*/React.createElement(Box, {
|
|
83
|
+
xcss: footerStyles
|
|
84
|
+
}, /*#__PURE__*/React.createElement(LoadingButton, {
|
|
85
|
+
appearance: "primary",
|
|
86
|
+
type: "submit",
|
|
87
|
+
isLoading: submitting
|
|
88
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.submit))));
|
|
89
|
+
});
|
|
90
|
+
};
|
|
@@ -2,12 +2,12 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
2
2
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
3
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
4
4
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
5
|
-
import
|
|
6
|
-
var _templateObject;
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
7
6
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
8
7
|
import React, { useEffect, useRef, useState } from 'react';
|
|
9
8
|
import { PDFViewer, EventBus, PDFLinkService, NullL10n } from 'pdfjs-dist/legacy/web/pdf_viewer';
|
|
10
|
-
import { getDocument, GlobalWorkerOptions, CMapCompressionType } from 'pdfjs-dist/legacy/build/pdf';
|
|
9
|
+
import { getDocument, GlobalWorkerOptions, CMapCompressionType, PasswordResponses } from 'pdfjs-dist/legacy/build/pdf';
|
|
10
|
+
import { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
11
11
|
import { cmap } from './cmaps';
|
|
12
12
|
import { css, Global } from '@emotion/react';
|
|
13
13
|
import { ZoomControls } from '../../zoomControls';
|
|
@@ -20,14 +20,67 @@ import { ZoomLevel } from '../../domain/zoomLevel';
|
|
|
20
20
|
import { processError } from './processError';
|
|
21
21
|
import { pdfJs } from './pdfJs';
|
|
22
22
|
import { extractCompressedBase64 } from './extractCompressedBase64';
|
|
23
|
+
import { PDFPasswordInput } from './pdfPasswordInput';
|
|
24
|
+
import { fireAnalytics } from '../../analytics';
|
|
25
|
+
import { createPdfPasswordInputScreenEvent } from '../../analytics/events/screen/pdfPasswordInput';
|
|
26
|
+
import { createPasswordPdfScreenEvent } from '../../analytics/events/screen/passwordPdf';
|
|
23
27
|
export var pdfViewerClassName = 'pdfViewer';
|
|
24
28
|
|
|
25
29
|
// Styles are partially copied from https://github.com/mozilla/pdfjs-dist/blob/v2.9.359/web/pdf_viewer.css
|
|
26
30
|
/* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
|
|
27
31
|
/* eslint-disable @atlaskit/design-system/ensure-design-token-usage/preview */
|
|
28
|
-
var globalStyles = css(
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
var globalStyles = css(_defineProperty({}, ".".concat(pdfViewerClassName), {
|
|
33
|
+
marginTop: "var(--ds-space-800, 64px)",
|
|
34
|
+
marginBottom: "var(--ds-space-800, 64px)",
|
|
35
|
+
'.page': {
|
|
36
|
+
margin: "1px auto ".concat("var(--ds-space-negative-100, -8px)", " auto"),
|
|
37
|
+
border: '9px solid transparent',
|
|
38
|
+
position: 'relative'
|
|
39
|
+
},
|
|
40
|
+
'.canvasWrapper': {
|
|
41
|
+
overflow: 'hidden'
|
|
42
|
+
},
|
|
43
|
+
'.textLayer': {
|
|
44
|
+
position: 'absolute',
|
|
45
|
+
left: 0,
|
|
46
|
+
top: 0,
|
|
47
|
+
right: 0,
|
|
48
|
+
bottom: 0,
|
|
49
|
+
overflow: 'hidden',
|
|
50
|
+
opacity: 0.2,
|
|
51
|
+
lineHeight: 1
|
|
52
|
+
},
|
|
53
|
+
'.textLayer span, .textLayer br': {
|
|
54
|
+
color: 'transparent',
|
|
55
|
+
position: 'absolute',
|
|
56
|
+
whiteSpace: 'pre',
|
|
57
|
+
cursor: 'text',
|
|
58
|
+
transformOrigin: '0% 0%'
|
|
59
|
+
},
|
|
60
|
+
'.textLayer ::-moz-selection': {
|
|
61
|
+
background: 'rgba(0, 0, 255, 1)'
|
|
62
|
+
},
|
|
63
|
+
'.textLayer ::selection': {
|
|
64
|
+
background: 'rgba(0, 0, 255, 1)'
|
|
65
|
+
},
|
|
66
|
+
'.annotationLayer section': {
|
|
67
|
+
position: 'absolute',
|
|
68
|
+
textAlign: 'initial'
|
|
69
|
+
},
|
|
70
|
+
'.annotationLayer .linkAnnotation > a, .annotationLayer .buttonWidgetAnnotation.pushButton > a': {
|
|
71
|
+
position: 'absolute',
|
|
72
|
+
fontSize: '1em',
|
|
73
|
+
top: 0,
|
|
74
|
+
left: 0,
|
|
75
|
+
width: '100%',
|
|
76
|
+
height: '100%'
|
|
77
|
+
},
|
|
78
|
+
'.annotationLayer .linkAnnotation > a:hover, .annotationLayer .buttonWidgetAnnotation.pushButton > a:hover': {
|
|
79
|
+
opacity: 0.2,
|
|
80
|
+
background: 'rgba(255, 255, 0, 1)',
|
|
81
|
+
boxShadow: '0 2px 10px rgba(255, 255, 0, 1)'
|
|
82
|
+
}
|
|
83
|
+
}));
|
|
31
84
|
var CmapFacotry = /*#__PURE__*/function () {
|
|
32
85
|
function CmapFacotry() {
|
|
33
86
|
_classCallCheck(this, CmapFacotry);
|
|
@@ -69,13 +122,14 @@ var CmapFacotry = /*#__PURE__*/function () {
|
|
|
69
122
|
return CmapFacotry;
|
|
70
123
|
}();
|
|
71
124
|
var defaultWorkerUrl = '';
|
|
72
|
-
|
|
125
|
+
var PDFRendererBase = function PDFRendererBase(_ref2) {
|
|
73
126
|
var src = _ref2.src,
|
|
74
127
|
onClose = _ref2.onClose,
|
|
75
128
|
onSuccess = _ref2.onSuccess,
|
|
76
129
|
onError = _ref2.onError,
|
|
77
130
|
workerUrl = _ref2.workerUrl,
|
|
78
|
-
item = _ref2.item
|
|
131
|
+
item = _ref2.item,
|
|
132
|
+
createAnalyticsEvent = _ref2.createAnalyticsEvent;
|
|
79
133
|
var _useState = useState(new ZoomLevel(1)),
|
|
80
134
|
_useState2 = _slicedToArray(_useState, 2),
|
|
81
135
|
zoomLevel = _useState2[0],
|
|
@@ -84,18 +138,28 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
84
138
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
85
139
|
docOutcome = _useState4[0],
|
|
86
140
|
setDocOutcome = _useState4[1];
|
|
141
|
+
var isPasswordPdfRef = useRef(false);
|
|
142
|
+
var _useState5 = useState(false),
|
|
143
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
144
|
+
passwordProtected = _useState6[0],
|
|
145
|
+
setPasswordProtected = _useState6[1];
|
|
146
|
+
var _useState7 = useState(false),
|
|
147
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
148
|
+
hasPasswordError = _useState8[0],
|
|
149
|
+
setHasPasswordError = _useState8[1];
|
|
87
150
|
var pdfWrapperRef = useRef();
|
|
88
151
|
var docRef = useRef();
|
|
89
152
|
var pdfViewerRef = useRef();
|
|
90
153
|
var onSuccessRef = useRef(onSuccess);
|
|
91
154
|
onSuccessRef.current = onSuccess;
|
|
155
|
+
var updatePasswordRef = useRef(undefined);
|
|
92
156
|
var onErrorRef = useRef(onError);
|
|
93
157
|
onErrorRef.current = onError;
|
|
94
158
|
useEffect(function () {
|
|
95
159
|
var isSubscribed = true;
|
|
96
160
|
var fetchDoc = /*#__PURE__*/function () {
|
|
97
161
|
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
98
|
-
var blob, pdfError;
|
|
162
|
+
var blob, getDocumentTask, pdfError;
|
|
99
163
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
100
164
|
while (1) switch (_context2.prev = _context2.next) {
|
|
101
165
|
case 0:
|
|
@@ -111,29 +175,39 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
111
175
|
defaultWorkerUrl = URL.createObjectURL(blob);
|
|
112
176
|
case 6:
|
|
113
177
|
GlobalWorkerOptions.workerSrc = workerUrl !== null && workerUrl !== void 0 ? workerUrl : defaultWorkerUrl;
|
|
114
|
-
|
|
115
|
-
return getDocument({
|
|
178
|
+
getDocumentTask = getDocument({
|
|
116
179
|
url: src,
|
|
117
180
|
CMapReaderFactory: CmapFacotry
|
|
118
|
-
})
|
|
119
|
-
|
|
181
|
+
});
|
|
182
|
+
getDocumentTask.onPassword = function (updatePassword, e) {
|
|
183
|
+
updatePasswordRef.current = updatePassword;
|
|
184
|
+
if (e === PasswordResponses.NEED_PASSWORD) {
|
|
185
|
+
isPasswordPdfRef.current = true;
|
|
186
|
+
setPasswordProtected(true);
|
|
187
|
+
} else {
|
|
188
|
+
setHasPasswordError(true);
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
_context2.next = 11;
|
|
192
|
+
return getDocumentTask.promise;
|
|
193
|
+
case 11:
|
|
120
194
|
docRef.current = _context2.sent;
|
|
121
195
|
isSubscribed && setDocOutcome(Outcome.successful(docRef.current));
|
|
122
|
-
_context2.next =
|
|
196
|
+
_context2.next = 20;
|
|
123
197
|
break;
|
|
124
|
-
case
|
|
125
|
-
_context2.prev =
|
|
198
|
+
case 15:
|
|
199
|
+
_context2.prev = 15;
|
|
126
200
|
_context2.t0 = _context2["catch"](0);
|
|
127
201
|
pdfError = processError(_context2.t0);
|
|
128
202
|
isSubscribed && setDocOutcome(Outcome.failed(pdfError));
|
|
129
203
|
if (onErrorRef.current) {
|
|
130
204
|
onErrorRef.current(pdfError);
|
|
131
205
|
}
|
|
132
|
-
case
|
|
206
|
+
case 20:
|
|
133
207
|
case "end":
|
|
134
208
|
return _context2.stop();
|
|
135
209
|
}
|
|
136
|
-
}, _callee2, null, [[0,
|
|
210
|
+
}, _callee2, null, [[0, 15]]);
|
|
137
211
|
}));
|
|
138
212
|
return function fetchDoc() {
|
|
139
213
|
return _ref3.apply(this, arguments);
|
|
@@ -165,10 +239,13 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
165
239
|
pdfViewerRef.current.setDocument(docRef.current);
|
|
166
240
|
pdfLinkService.setDocument(docRef.current, null);
|
|
167
241
|
pdfViewerRef.current.firstPagePromise.then(scaleToFit);
|
|
242
|
+
if (isPasswordPdfRef.current) {
|
|
243
|
+
fireAnalytics(createPasswordPdfScreenEvent(), createAnalyticsEvent);
|
|
244
|
+
}
|
|
168
245
|
if (onSuccessRef.current) {
|
|
169
246
|
onSuccessRef.current();
|
|
170
247
|
}
|
|
171
|
-
}, [docOutcome]);
|
|
248
|
+
}, [createAnalyticsEvent, docOutcome]);
|
|
172
249
|
var savePdfElement = function savePdfElement(el) {
|
|
173
250
|
pdfWrapperRef.current = el;
|
|
174
251
|
};
|
|
@@ -184,7 +261,18 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
184
261
|
};
|
|
185
262
|
return docOutcome.match({
|
|
186
263
|
pending: function pending() {
|
|
187
|
-
return /*#__PURE__*/React.createElement(
|
|
264
|
+
return passwordProtected ? /*#__PURE__*/React.createElement(PDFPasswordInput, {
|
|
265
|
+
onRender: function onRender() {
|
|
266
|
+
return fireAnalytics(createPdfPasswordInputScreenEvent(), createAnalyticsEvent);
|
|
267
|
+
},
|
|
268
|
+
onSubmit: function onSubmit(data) {
|
|
269
|
+
var _updatePasswordRef$cu;
|
|
270
|
+
// Reset hasPasswordError on each submission
|
|
271
|
+
hasPasswordError && setHasPasswordError(false);
|
|
272
|
+
(_updatePasswordRef$cu = updatePasswordRef.current) === null || _updatePasswordRef$cu === void 0 || _updatePasswordRef$cu.call(updatePasswordRef, data.password);
|
|
273
|
+
},
|
|
274
|
+
hasPasswordError: hasPasswordError
|
|
275
|
+
}) : /*#__PURE__*/React.createElement(Spinner, null);
|
|
188
276
|
},
|
|
189
277
|
successful: function successful() {
|
|
190
278
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Global, {
|
|
@@ -192,7 +280,10 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
192
280
|
}), /*#__PURE__*/React.createElement(PDFWrapper, {
|
|
193
281
|
"data-testid": "media-viewer-pdf-content",
|
|
194
282
|
ref: savePdfElement
|
|
195
|
-
},
|
|
283
|
+
},
|
|
284
|
+
/*#__PURE__*/
|
|
285
|
+
// eslint-disable-next-line @atlaskit/design-system/prefer-primitives
|
|
286
|
+
React.createElement("div", {
|
|
196
287
|
className: pdfViewerClassName,
|
|
197
288
|
onClick: closeOnDirectClick(onClose)
|
|
198
289
|
}), /*#__PURE__*/React.createElement(ZoomControls, {
|
|
@@ -209,4 +300,6 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
|
|
|
209
300
|
});
|
|
210
301
|
}
|
|
211
302
|
});
|
|
212
|
-
};
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
export var PDFRenderer = withAnalyticsEvents()(PDFRendererBase);
|