@zextras/carbonio-ui-preview 0.1.3 → 0.2.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.
Files changed (107) hide show
  1. package/README.md +5 -5
  2. package/lib/index.d.ts +6 -0
  3. package/lib/index.js +28 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/preview/FocusWithin.d.ts +7 -0
  6. package/lib/preview/FocusWithin.js +87 -0
  7. package/lib/preview/FocusWithin.js.map +1 -0
  8. package/lib/preview/Header.d.ts +29 -0
  9. package/lib/preview/Header.js +44 -0
  10. package/lib/preview/Header.js.map +1 -0
  11. package/lib/preview/Header.test.d.ts +1 -0
  12. package/lib/preview/Header.test.js +143 -0
  13. package/lib/preview/Header.test.js.map +1 -0
  14. package/lib/preview/ImagePreview.d.ts +42 -0
  15. package/lib/preview/ImagePreview.js +116 -0
  16. package/lib/preview/ImagePreview.js.map +1 -0
  17. package/lib/preview/ImagePreview.test.d.ts +1 -0
  18. package/lib/preview/ImagePreview.test.js +161 -0
  19. package/lib/preview/ImagePreview.test.js.map +1 -0
  20. package/lib/preview/PdfPreview.d.ts +63 -0
  21. package/lib/preview/PdfPreview.js +235 -0
  22. package/lib/preview/PdfPreview.js.map +1 -0
  23. package/lib/preview/PdfPreview.test.d.ts +1 -0
  24. package/lib/preview/PdfPreview.test.js +718 -0
  25. package/lib/preview/PdfPreview.test.js.map +1 -0
  26. package/lib/preview/PreviewCriteriaAlternativeContent.d.ts +12 -0
  27. package/lib/preview/PreviewCriteriaAlternativeContent.js +72 -0
  28. package/lib/preview/PreviewCriteriaAlternativeContent.js.map +1 -0
  29. package/lib/preview/PreviewManager.d.ts +13 -0
  30. package/lib/preview/PreviewManager.js +102 -0
  31. package/lib/preview/PreviewManager.js.map +1 -0
  32. package/lib/preview/PreviewManager.test.d.ts +1 -0
  33. package/lib/preview/PreviewManager.test.js +162 -0
  34. package/lib/preview/PreviewManager.test.js.map +1 -0
  35. package/lib/preview/PreviewWrapper.d.ts +9 -0
  36. package/lib/preview/PreviewWrapper.js +42 -0
  37. package/lib/preview/PreviewWrapper.js.map +1 -0
  38. package/lib/preview/PreviewWrapper.test.d.ts +1 -0
  39. package/lib/preview/PreviewWrapper.test.js +85 -0
  40. package/lib/preview/PreviewWrapper.test.js.map +1 -0
  41. package/lib/preview/constants.d.ts +1 -0
  42. package/lib/preview/constants.js +10 -0
  43. package/lib/preview/constants.js.map +1 -0
  44. package/lib/utils/test-utils.d.ts +20 -0
  45. package/lib/utils/test-utils.js +86 -0
  46. package/lib/utils/test-utils.js.map +1 -0
  47. package/lib/utils/utils.d.ts +3 -0
  48. package/lib/utils/utils.js +8 -0
  49. package/lib/utils/utils.js.map +1 -0
  50. package/lib-esm/index.d.ts +6 -0
  51. package/{src/index.ts → lib-esm/index.js} +1 -1
  52. package/lib-esm/index.js.map +1 -0
  53. package/lib-esm/preview/FocusWithin.d.ts +7 -0
  54. package/lib-esm/preview/FocusWithin.js +59 -0
  55. package/lib-esm/preview/FocusWithin.js.map +1 -0
  56. package/lib-esm/preview/Header.d.ts +29 -0
  57. package/lib-esm/preview/Header.js +39 -0
  58. package/lib-esm/preview/Header.js.map +1 -0
  59. package/lib-esm/preview/Header.test.d.ts +1 -0
  60. package/lib-esm/preview/Header.test.js +138 -0
  61. package/lib-esm/preview/Header.test.js.map +1 -0
  62. package/lib-esm/preview/ImagePreview.d.ts +42 -0
  63. package/lib-esm/preview/ImagePreview.js +87 -0
  64. package/lib-esm/preview/ImagePreview.js.map +1 -0
  65. package/lib-esm/preview/ImagePreview.test.d.ts +1 -0
  66. package/lib-esm/preview/ImagePreview.test.js +156 -0
  67. package/lib-esm/preview/ImagePreview.test.js.map +1 -0
  68. package/lib-esm/preview/PdfPreview.d.ts +63 -0
  69. package/lib-esm/preview/PdfPreview.js +206 -0
  70. package/lib-esm/preview/PdfPreview.js.map +1 -0
  71. package/lib-esm/preview/PdfPreview.test.d.ts +1 -0
  72. package/lib-esm/preview/PdfPreview.test.js +713 -0
  73. package/lib-esm/preview/PdfPreview.test.js.map +1 -0
  74. package/lib-esm/preview/PreviewCriteriaAlternativeContent.d.ts +12 -0
  75. package/lib-esm/preview/PreviewCriteriaAlternativeContent.js +42 -0
  76. package/lib-esm/preview/PreviewCriteriaAlternativeContent.js.map +1 -0
  77. package/lib-esm/preview/PreviewManager.d.ts +13 -0
  78. package/lib-esm/preview/PreviewManager.js +75 -0
  79. package/lib-esm/preview/PreviewManager.js.map +1 -0
  80. package/lib-esm/preview/PreviewManager.test.d.ts +1 -0
  81. package/lib-esm/preview/PreviewManager.test.js +137 -0
  82. package/lib-esm/preview/PreviewManager.test.js.map +1 -0
  83. package/lib-esm/preview/PreviewWrapper.d.ts +9 -0
  84. package/lib-esm/preview/PreviewWrapper.js +36 -0
  85. package/lib-esm/preview/PreviewWrapper.js.map +1 -0
  86. package/lib-esm/preview/PreviewWrapper.test.d.ts +1 -0
  87. package/lib-esm/preview/PreviewWrapper.test.js +80 -0
  88. package/lib-esm/preview/PreviewWrapper.test.js.map +1 -0
  89. package/lib-esm/preview/constants.d.ts +1 -0
  90. package/{src/utils.ts → lib-esm/preview/constants.js} +2 -2
  91. package/lib-esm/preview/constants.js.map +1 -0
  92. package/lib-esm/utils/test-utils.d.ts +20 -0
  93. package/lib-esm/utils/test-utils.js +55 -0
  94. package/lib-esm/utils/test-utils.js.map +1 -0
  95. package/lib-esm/utils/utils.d.ts +3 -0
  96. package/{src/types/carbonio-design-system.d.ts → lib-esm/utils/utils.js} +2 -2
  97. package/lib-esm/utils/utils.js.map +1 -0
  98. package/package.json +49 -20
  99. package/babel.config.js +0 -13
  100. package/src/preview/ContainerWithGap.tsx +0 -11
  101. package/src/preview/FocusWithin.tsx +0 -76
  102. package/src/preview/Header.tsx +0 -122
  103. package/src/preview/ImagePreview.tsx +0 -194
  104. package/src/preview/PdfPreview.tsx +0 -398
  105. package/src/preview/PreviewCriteriaAlternativeContent.tsx +0 -94
  106. package/src/preview/PreviewManager.tsx +0 -75
  107. package/src/preview/PreviewWrapper.tsx +0 -20
@@ -0,0 +1,713 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ /*
38
+ * SPDX-FileCopyrightText: 2022 Zextras <https://www.zextras.com>
39
+ *
40
+ * SPDX-License-Identifier: AGPL-3.0-only
41
+ */
42
+ import React from 'react';
43
+ import { act, screen, waitFor } from '@testing-library/react';
44
+ import userEvent from '@testing-library/user-event';
45
+ import { loadPDF, setup } from '../utils/test-utils';
46
+ import { ZOOM_STEPS } from './constants';
47
+ import { PdfPreview } from './PdfPreview';
48
+ var pdfFile = loadPDF('./__mocks__/_pdf.pdf');
49
+ var zoomInIcon = 'icon: Plus';
50
+ var zoomOutIcon = 'icon: Minus';
51
+ var zoomFitToWidthIcon = 'icon: MaximizeOutline';
52
+ var zoomResetWidthIcon = 'icon: MinimizeOutline';
53
+ jest.useRealTimers();
54
+ describe('Pdf Preview', function () {
55
+ test('Render a pdf document', function () { return __awaiter(void 0, void 0, void 0, function () {
56
+ var onClose, pageElement;
57
+ return __generator(this, function (_a) {
58
+ switch (_a.label) {
59
+ case 0:
60
+ onClose = jest.fn();
61
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
62
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
63
+ });
64
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
65
+ case 1:
66
+ _a.sent();
67
+ expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
68
+ expect(screen.getByTestId('pdf-preview-container')).toBeInTheDocument();
69
+ pageElement = document.querySelector('[data-page-number="1"]');
70
+ expect(pageElement).toBeDefined();
71
+ expect(pageElement).not.toBeNull();
72
+ expect(pageElement).toBeInTheDocument();
73
+ return [2 /*return*/];
74
+ }
75
+ });
76
+ }); });
77
+ test('If show is false does not render the pdf', function () { return __awaiter(void 0, void 0, void 0, function () {
78
+ var onClose;
79
+ return __generator(this, function (_a) {
80
+ onClose = jest.fn();
81
+ setup(React.createElement(PdfPreview, { show: false, src: pdfFile.dataURI, onClose: onClose }), {
82
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
83
+ });
84
+ expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
85
+ expect(screen.queryByTestId('pdf-preview-container')).not.toBeInTheDocument();
86
+ return [2 /*return*/];
87
+ });
88
+ }); });
89
+ test('If pdf is not valid render an error message', function () { return __awaiter(void 0, void 0, void 0, function () {
90
+ var onClose;
91
+ return __generator(this, function (_a) {
92
+ switch (_a.label) {
93
+ case 0:
94
+ onClose = jest.fn();
95
+ setup(React.createElement(PdfPreview, { show: true, src: "invalid-pdf.pdf", onClose: onClose }), {
96
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
97
+ });
98
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
99
+ case 1:
100
+ _a.sent();
101
+ return [4 /*yield*/, screen.findByText(/Failed to load PDF file/i)];
102
+ case 2:
103
+ _a.sent();
104
+ expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
105
+ expect(screen.getByTestId('pdf-preview-container')).toBeInTheDocument();
106
+ return [2 /*return*/];
107
+ }
108
+ });
109
+ }); });
110
+ test('If fallback is requested, does not render the pdf but the fallback instead', function () { return __awaiter(void 0, void 0, void 0, function () {
111
+ var onClose;
112
+ return __generator(this, function (_a) {
113
+ onClose = jest.fn();
114
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, useFallback: true, openSrc: "open-src" }), {
115
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
116
+ });
117
+ expect(screen.getByText(/This item cannot be displayed/i)).toBeVisible();
118
+ expect(screen.getByText(/The file size exceeds the limit allowed and cannot be displayed/i)).toBeVisible();
119
+ expect(screen.getByText(/Please, download it or open it in a separate tab/i)).toBeVisible();
120
+ expect(screen.getByRole('button', { name: /download/i })).toBeVisible();
121
+ expect(screen.getByRole('button', { name: /open/i })).toBeVisible();
122
+ return [2 /*return*/];
123
+ });
124
+ }); });
125
+ test('Render a custom fallback', function () { return __awaiter(void 0, void 0, void 0, function () {
126
+ var onClose, CustomContent;
127
+ return __generator(this, function (_a) {
128
+ onClose = jest.fn();
129
+ CustomContent = React.createElement("div", null, "Custom content");
130
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, useFallback: true, customContent: CustomContent, openSrc: "open-src" }), {
131
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
132
+ });
133
+ expect(screen.queryByText(/This item cannot be displayed/i)).not.toBeInTheDocument();
134
+ expect(screen.queryByText(/The file size exceeds the limit allowed and cannot be displayed/i)).not.toBeInTheDocument();
135
+ expect(screen.queryByText(/Please, download it or open it in a separate tab/i)).not.toBeInTheDocument();
136
+ expect(screen.queryByRole('button', { name: /download/i })).not.toBeInTheDocument();
137
+ expect(screen.queryByRole('button', { name: /open/i })).not.toBeInTheDocument();
138
+ expect(screen.getByText(/custom content/i)).toBeVisible();
139
+ return [2 /*return*/];
140
+ });
141
+ }); });
142
+ test('Additional data are visible', function () { return __awaiter(void 0, void 0, void 0, function () {
143
+ var onClose;
144
+ return __generator(this, function (_a) {
145
+ switch (_a.label) {
146
+ case 0:
147
+ onClose = jest.fn();
148
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, filename: "file name", extension: "pdf", size: "18KB" }), {
149
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
150
+ });
151
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
152
+ case 1:
153
+ _a.sent();
154
+ expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
155
+ expect(screen.getByText(/file name/i)).toBeVisible();
156
+ expect(screen.getByText(/pdf.*18KB/i)).toBeVisible();
157
+ return [2 /*return*/];
158
+ }
159
+ });
160
+ }); });
161
+ test('Escape key close the preview', function () { return __awaiter(void 0, void 0, void 0, function () {
162
+ var onClose, user;
163
+ return __generator(this, function (_a) {
164
+ switch (_a.label) {
165
+ case 0:
166
+ onClose = jest.fn();
167
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
168
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
169
+ }).user;
170
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
171
+ case 1:
172
+ _a.sent();
173
+ expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
174
+ return [4 /*yield*/, user.keyboard('{Escape}')];
175
+ case 2:
176
+ _a.sent();
177
+ expect(onClose).toHaveBeenCalled();
178
+ return [2 /*return*/];
179
+ }
180
+ });
181
+ }); });
182
+ test('Close action calls onClose if no click action is provided', function () { return __awaiter(void 0, void 0, void 0, function () {
183
+ var onClose, closeAction, user, closeActionElement;
184
+ return __generator(this, function (_a) {
185
+ switch (_a.label) {
186
+ case 0:
187
+ onClose = jest.fn(function (e) {
188
+ e.preventDefault();
189
+ });
190
+ closeAction = {
191
+ id: 'closeAction',
192
+ icon: 'Activity',
193
+ tooltipLabel: 'Custom close action'
194
+ };
195
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, closeAction: closeAction }), {
196
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
197
+ }).user;
198
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
199
+ case 1:
200
+ _a.sent();
201
+ expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
202
+ closeActionElement = screen.getByTestId('icon: Activity');
203
+ expect(closeActionElement).toBeVisible();
204
+ return [4 /*yield*/, user.hover(closeActionElement)];
205
+ case 2:
206
+ _a.sent();
207
+ return [4 /*yield*/, screen.findByText(/custom close action/i)];
208
+ case 3:
209
+ _a.sent();
210
+ return [4 /*yield*/, user.click(closeActionElement)];
211
+ case 4:
212
+ _a.sent();
213
+ expect(onClose).toHaveBeenCalledTimes(1);
214
+ return [2 /*return*/];
215
+ }
216
+ });
217
+ }); });
218
+ test('Click on actions calls onClose if event is not stopped by the action itself, instead if is disabled it is not propagated anyway ', function () { return __awaiter(void 0, void 0, void 0, function () {
219
+ var onClose, actions, closeAction, user, action1Item, action2Item, closeActionItem;
220
+ return __generator(this, function (_a) {
221
+ switch (_a.label) {
222
+ case 0:
223
+ onClose = jest.fn();
224
+ actions = [
225
+ {
226
+ id: 'action1',
227
+ icon: 'Activity',
228
+ onClick: jest.fn()
229
+ },
230
+ {
231
+ id: 'action2',
232
+ icon: 'People',
233
+ onClick: jest.fn(function (ev) {
234
+ ev.preventDefault();
235
+ }),
236
+ disabled: true
237
+ }
238
+ ];
239
+ closeAction = {
240
+ id: 'closeAction',
241
+ icon: 'Close',
242
+ onClick: jest.fn(function (ev) {
243
+ ev.preventDefault();
244
+ })
245
+ };
246
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, actions: actions, filename: "pdf name", closeAction: closeAction }), {
247
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
248
+ }).user;
249
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
250
+ case 1:
251
+ _a.sent();
252
+ return [4 /*yield*/, waitFor(function () {
253
+ // eslint-disable-next-line testing-library/no-node-access
254
+ return expect(document.querySelector('[data-page-number="1"]')).toBeInTheDocument();
255
+ })];
256
+ case 2:
257
+ _a.sent();
258
+ action1Item = screen.getByTestId('icon: Activity');
259
+ action2Item = screen.getByTestId('icon: People');
260
+ closeActionItem = screen.getByTestId('icon: Close');
261
+ expect(action1Item).toBeVisible();
262
+ expect(action2Item).toBeVisible();
263
+ // eslint-disable-next-line testing-library/no-node-access
264
+ expect(action2Item.parentElement).toHaveAttribute('disabled');
265
+ expect(closeActionItem).toBeVisible();
266
+ // click on action 1 is propagated and calls onClose
267
+ return [4 /*yield*/, user.click(action1Item)];
268
+ case 3:
269
+ // click on action 1 is propagated and calls onClose
270
+ _a.sent();
271
+ expect(actions[0].onClick).toHaveBeenCalled();
272
+ expect(onClose).toHaveBeenCalledTimes(1);
273
+ // click on action 2 skips the handler of the action since it is disabled and do not calls onClose
274
+ return [4 /*yield*/, user.click(action2Item)];
275
+ case 4:
276
+ // click on action 2 skips the handler of the action since it is disabled and do not calls onClose
277
+ _a.sent();
278
+ expect(actions[1].onClick).not.toHaveBeenCalled();
279
+ expect(onClose).toHaveBeenCalledTimes(1);
280
+ // click on close action is stopped by the action, event is not propagated and onClose is not called
281
+ return [4 /*yield*/, user.click(closeActionItem)];
282
+ case 5:
283
+ // click on close action is stopped by the action, event is not propagated and onClose is not called
284
+ _a.sent();
285
+ // FIXME
286
+ // expect(closeAction.onClick).toHaveBeenCalled();
287
+ expect(onClose).toHaveBeenCalledTimes(3);
288
+ // click on filename is equivalent to a click on the overlay, so onClose is called
289
+ return [4 /*yield*/, user.click(screen.getByText(/pdf name/i))];
290
+ case 6:
291
+ // click on filename is equivalent to a click on the overlay, so onClose is called
292
+ _a.sent();
293
+ expect(onClose).toHaveBeenCalledTimes(4);
294
+ return [2 /*return*/];
295
+ }
296
+ });
297
+ }); });
298
+ test('Zoom starts at lowest step', function () { return __awaiter(void 0, void 0, void 0, function () {
299
+ var onClose, user, canvas;
300
+ return __generator(this, function (_a) {
301
+ switch (_a.label) {
302
+ case 0:
303
+ onClose = jest.fn();
304
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
305
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
306
+ }).user;
307
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
308
+ case 1:
309
+ _a.sent();
310
+ canvas = document.querySelector('canvas');
311
+ expect(canvas).toBeVisible();
312
+ expect(canvas).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
313
+ return [2 /*return*/];
314
+ }
315
+ });
316
+ }); });
317
+ test('Decrease zoom is disabled when zoom is at lowest point', function () { return __awaiter(void 0, void 0, void 0, function () {
318
+ var onClose, user, canvas;
319
+ return __generator(this, function (_a) {
320
+ switch (_a.label) {
321
+ case 0:
322
+ onClose = jest.fn();
323
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
324
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
325
+ }).user;
326
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
327
+ case 1:
328
+ _a.sent();
329
+ canvas = document.querySelector('canvas');
330
+ expect(canvas).toBeVisible();
331
+ expect(canvas).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
332
+ expect(screen.getByTestId(zoomOutIcon)).toBeVisible();
333
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
334
+ expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
335
+ expect(screen.getByTestId(zoomInIcon)).toBeVisible();
336
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
337
+ case 2:
338
+ _a.sent();
339
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
340
+ expect(screen.getByTestId(zoomOutIcon).parentElement).not.toHaveAttribute('disabled', '');
341
+ return [4 /*yield*/, userEvent.click(screen.getByTestId(zoomOutIcon))];
342
+ case 3:
343
+ _a.sent();
344
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
345
+ expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
346
+ return [2 /*return*/];
347
+ }
348
+ });
349
+ }); });
350
+ test('Increase and decrease zoom change zoom by 1 step per time', function () { return __awaiter(void 0, void 0, void 0, function () {
351
+ var onClose, user, step, step;
352
+ return __generator(this, function (_a) {
353
+ switch (_a.label) {
354
+ case 0:
355
+ onClose = jest.fn();
356
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
357
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
358
+ }).user;
359
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
360
+ case 1:
361
+ _a.sent();
362
+ // eslint-disable-next-line testing-library/no-node-access
363
+ expect(document.querySelector('canvas')).toBeVisible();
364
+ expect(screen.getByTestId(zoomOutIcon)).toBeVisible();
365
+ expect(screen.getByTestId(zoomInIcon)).toBeVisible();
366
+ // eslint-disable-next-line testing-library/no-node-access
367
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
368
+ step = 0;
369
+ _a.label = 2;
370
+ case 2:
371
+ if (!(step < ZOOM_STEPS.length - 1)) return [3 /*break*/, 5];
372
+ // eslint-disable-next-line no-await-in-loop
373
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
374
+ case 3:
375
+ // eslint-disable-next-line no-await-in-loop
376
+ _a.sent();
377
+ // eslint-disable-next-line testing-library/no-node-access
378
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[step + 1]));
379
+ _a.label = 4;
380
+ case 4:
381
+ step += 1;
382
+ return [3 /*break*/, 2];
383
+ case 5:
384
+ step = ZOOM_STEPS.length - 1;
385
+ _a.label = 6;
386
+ case 6:
387
+ if (!(step > 0)) return [3 /*break*/, 9];
388
+ // eslint-disable-next-line no-await-in-loop
389
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomOutIcon))];
390
+ case 7:
391
+ // eslint-disable-next-line no-await-in-loop
392
+ _a.sent();
393
+ // eslint-disable-next-line testing-library/no-node-access
394
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[step - 1]));
395
+ _a.label = 8;
396
+ case 8:
397
+ step -= 1;
398
+ return [3 /*break*/, 6];
399
+ case 9: return [2 /*return*/];
400
+ }
401
+ });
402
+ }); });
403
+ test('Increase zoom is disabled when zoom is at greatest point', function () { return __awaiter(void 0, void 0, void 0, function () {
404
+ var onClose, user, step;
405
+ return __generator(this, function (_a) {
406
+ switch (_a.label) {
407
+ case 0:
408
+ onClose = jest.fn();
409
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
410
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
411
+ }).user;
412
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
413
+ case 1:
414
+ _a.sent();
415
+ // eslint-disable-next-line testing-library/no-node-access
416
+ expect(document.querySelector('canvas')).toBeVisible();
417
+ expect(screen.getByTestId(zoomInIcon)).toBeVisible();
418
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
419
+ expect(screen.getByTestId(zoomInIcon).parentElement).not.toHaveAttribute('disabled', '');
420
+ step = 0;
421
+ _a.label = 2;
422
+ case 2:
423
+ if (!(step < ZOOM_STEPS.length - 1)) return [3 /*break*/, 5];
424
+ // eslint-disable-next-line no-await-in-loop
425
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
426
+ case 3:
427
+ // eslint-disable-next-line no-await-in-loop
428
+ _a.sent();
429
+ _a.label = 4;
430
+ case 4:
431
+ step += 1;
432
+ return [3 /*break*/, 2];
433
+ case 5:
434
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
435
+ expect(screen.getByTestId(zoomInIcon).parentElement).toHaveAttribute('disabled', '');
436
+ return [2 /*return*/];
437
+ }
438
+ });
439
+ }); });
440
+ test('Fit to width zoom set width of pdf to width of the window', function () { return __awaiter(void 0, void 0, void 0, function () {
441
+ var onClose, ref, mockPdfWidth, _a, user, container;
442
+ return __generator(this, function (_b) {
443
+ switch (_b.label) {
444
+ case 0:
445
+ onClose = jest.fn();
446
+ ref = React.createRef();
447
+ mockPdfWidth = 1000;
448
+ _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
449
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
450
+ }), user = _a.user, container = _a.container;
451
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
452
+ case 1:
453
+ _b.sent();
454
+ // eslint-disable-next-line testing-library/no-node-access
455
+ expect(document.querySelector('canvas')).toBeVisible();
456
+ expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
457
+ expect(screen.queryByTestId(zoomResetWidthIcon)).not.toBeInTheDocument();
458
+ expect(ref.current).not.toBeNull();
459
+ jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
460
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
461
+ case 2:
462
+ _b.sent();
463
+ // eslint-disable-next-line testing-library/no-node-access
464
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth));
465
+ expect(screen.getByTestId(zoomResetWidthIcon)).toBeVisible();
466
+ expect(screen.queryByTestId(zoomFitToWidthIcon)).not.toBeInTheDocument();
467
+ return [2 /*return*/];
468
+ }
469
+ });
470
+ }); });
471
+ test('Reset zoom set width to lowest step', function () { return __awaiter(void 0, void 0, void 0, function () {
472
+ var onClose, ref, mockPdfWidth, _a, user, container;
473
+ return __generator(this, function (_b) {
474
+ switch (_b.label) {
475
+ case 0:
476
+ onClose = jest.fn();
477
+ ref = React.createRef();
478
+ mockPdfWidth = 1000;
479
+ _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
480
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
481
+ }), user = _a.user, container = _a.container;
482
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
483
+ case 1:
484
+ _b.sent();
485
+ // eslint-disable-next-line testing-library/no-node-access
486
+ expect(document.querySelector('canvas')).toBeVisible();
487
+ expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
488
+ expect(screen.queryByTestId(zoomResetWidthIcon)).not.toBeInTheDocument();
489
+ expect(ref.current).not.toBeNull();
490
+ jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
491
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
492
+ case 2:
493
+ _b.sent();
494
+ // eslint-disable-next-line testing-library/no-node-access
495
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth));
496
+ expect(screen.getByTestId(zoomResetWidthIcon)).toBeVisible();
497
+ expect(screen.queryByTestId(zoomFitToWidthIcon)).not.toBeInTheDocument();
498
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomResetWidthIcon))];
499
+ case 3:
500
+ _b.sent();
501
+ // eslint-disable-next-line testing-library/no-node-access
502
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
503
+ expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
504
+ expect(screen.queryByTestId(zoomResetWidthIcon)).not.toBeInTheDocument();
505
+ return [2 /*return*/];
506
+ }
507
+ });
508
+ }); });
509
+ test('When client width is lower than lowest zoom step and zoom is set to fit to width, decrease zoom is disabled and increase is enabled', function () { return __awaiter(void 0, void 0, void 0, function () {
510
+ var onClose, ref, mockPdfWidth, _a, user, container;
511
+ return __generator(this, function (_b) {
512
+ switch (_b.label) {
513
+ case 0:
514
+ onClose = jest.fn();
515
+ ref = React.createRef();
516
+ mockPdfWidth = ZOOM_STEPS[0] - 1;
517
+ _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
518
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
519
+ }), user = _a.user, container = _a.container;
520
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
521
+ case 1:
522
+ _b.sent();
523
+ // eslint-disable-next-line testing-library/no-node-access
524
+ expect(document.querySelector('canvas')).toBeVisible();
525
+ expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
526
+ jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
527
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
528
+ case 2:
529
+ _b.sent();
530
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
531
+ expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
532
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
533
+ expect(screen.getByTestId(zoomInIcon).parentElement).not.toHaveAttribute('disabled', '');
534
+ return [2 /*return*/];
535
+ }
536
+ });
537
+ }); });
538
+ test('When client width is greater than greatest zoom step and zoom is set to fit to width, decrease zoom is enabled and increase is disabled', function () { return __awaiter(void 0, void 0, void 0, function () {
539
+ var onClose, ref, mockPdfWidth, _a, user, container;
540
+ return __generator(this, function (_b) {
541
+ switch (_b.label) {
542
+ case 0:
543
+ onClose = jest.fn();
544
+ ref = React.createRef();
545
+ mockPdfWidth = ZOOM_STEPS[ZOOM_STEPS.length - 1] + 1;
546
+ _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
547
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
548
+ }), user = _a.user, container = _a.container;
549
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
550
+ case 1:
551
+ _b.sent();
552
+ // eslint-disable-next-line testing-library/no-node-access
553
+ expect(document.querySelector('canvas')).toBeVisible();
554
+ expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
555
+ jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
556
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
557
+ case 2:
558
+ _b.sent();
559
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
560
+ expect(screen.getByTestId(zoomInIcon).parentElement).toHaveAttribute('disabled', '');
561
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
562
+ expect(screen.getByTestId(zoomOutIcon).parentElement).not.toHaveAttribute('disabled', '');
563
+ return [2 /*return*/];
564
+ }
565
+ });
566
+ }); });
567
+ test('After fit to width, decrease zoom set zoom to nearest lower zoom step', function () { return __awaiter(void 0, void 0, void 0, function () {
568
+ var onClose, ref, stepToReach, mockPdfWidth, _a, user, container;
569
+ return __generator(this, function (_b) {
570
+ switch (_b.label) {
571
+ case 0:
572
+ onClose = jest.fn();
573
+ ref = React.createRef();
574
+ stepToReach = 1;
575
+ mockPdfWidth = ZOOM_STEPS[stepToReach + 1] - 1;
576
+ _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
577
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
578
+ }), user = _a.user, container = _a.container;
579
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
580
+ case 1:
581
+ _b.sent();
582
+ // eslint-disable-next-line testing-library/no-node-access
583
+ expect(document.querySelector('canvas')).toBeVisible();
584
+ expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
585
+ jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
586
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
587
+ case 2:
588
+ _b.sent();
589
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
590
+ expect(screen.getByTestId(zoomOutIcon).parentElement).not.toHaveAttribute('disabled', '');
591
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomOutIcon))];
592
+ case 3:
593
+ _b.sent();
594
+ // eslint-disable-next-line testing-library/no-node-access
595
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[stepToReach]));
596
+ return [2 /*return*/];
597
+ }
598
+ });
599
+ }); });
600
+ test('After fit to width, increase zoom set zoom to nearest greater zoom step', function () { return __awaiter(void 0, void 0, void 0, function () {
601
+ var onClose, ref, stepToReach, mockPdfWidth, _a, user, container;
602
+ return __generator(this, function (_b) {
603
+ switch (_b.label) {
604
+ case 0:
605
+ onClose = jest.fn();
606
+ ref = React.createRef();
607
+ stepToReach = 2;
608
+ mockPdfWidth = ZOOM_STEPS[stepToReach - 1] + 1;
609
+ _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
610
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
611
+ }), user = _a.user, container = _a.container;
612
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
613
+ case 1:
614
+ _b.sent();
615
+ // eslint-disable-next-line testing-library/no-node-access
616
+ expect(document.querySelector('canvas')).toBeVisible();
617
+ expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
618
+ jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
619
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
620
+ case 2:
621
+ _b.sent();
622
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
623
+ expect(screen.getByTestId(zoomInIcon).parentElement).not.toHaveAttribute('disabled', '');
624
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
625
+ case 3:
626
+ _b.sent();
627
+ // eslint-disable-next-line testing-library/no-node-access
628
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[stepToReach]));
629
+ return [2 /*return*/];
630
+ }
631
+ });
632
+ }); });
633
+ test('When fit to width is active, resize of the window update width of the pdf', function () { return __awaiter(void 0, void 0, void 0, function () {
634
+ var onClose, ref, mockPdfWidth, _a, user, container, getPreviewClientWidthMock;
635
+ return __generator(this, function (_b) {
636
+ switch (_b.label) {
637
+ case 0:
638
+ onClose = jest.fn();
639
+ ref = React.createRef();
640
+ mockPdfWidth = [1001, 1501, 2001];
641
+ _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
642
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
643
+ }), user = _a.user, container = _a.container;
644
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
645
+ case 1:
646
+ _b.sent();
647
+ // eslint-disable-next-line testing-library/no-node-access
648
+ expect(document.querySelector('canvas')).toBeVisible();
649
+ expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
650
+ getPreviewClientWidthMock = jest.spyOn(ref.current, 'clientWidth', 'get');
651
+ getPreviewClientWidthMock.mockReturnValueOnce(mockPdfWidth[0]);
652
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
653
+ case 2:
654
+ _b.sent();
655
+ // eslint-disable-next-line testing-library/no-node-access
656
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth[0]));
657
+ getPreviewClientWidthMock.mockReturnValueOnce(mockPdfWidth[1]);
658
+ // resize window to trigger listener
659
+ act(function () {
660
+ window.resizeTo(mockPdfWidth[1], mockPdfWidth[1]);
661
+ });
662
+ // eslint-disable-next-line testing-library/no-node-access
663
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth[1]));
664
+ return [2 /*return*/];
665
+ }
666
+ });
667
+ }); });
668
+ test('Click on disabled decrease/increase zoom actions does not change step and does not close preview', function () { return __awaiter(void 0, void 0, void 0, function () {
669
+ var onClose, ref, mockPdfWidth, _a, user, container;
670
+ return __generator(this, function (_b) {
671
+ switch (_b.label) {
672
+ case 0:
673
+ onClose = jest.fn();
674
+ ref = React.createRef();
675
+ mockPdfWidth = [1001, 1501, 2001];
676
+ _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
677
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
678
+ }), user = _a.user, container = _a.container;
679
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
680
+ case 1:
681
+ _b.sent();
682
+ // eslint-disable-next-line testing-library/no-node-access
683
+ expect(document.querySelector('canvas')).toBeVisible();
684
+ // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
685
+ expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
686
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomOutIcon))];
687
+ case 2:
688
+ _b.sent();
689
+ // eslint-disable-next-line testing-library/no-node-access
690
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
691
+ expect(onClose).not.toHaveBeenCalled();
692
+ jest
693
+ .spyOn(ref.current, 'clientWidth', 'get')
694
+ .mockReturnValue(ZOOM_STEPS[ZOOM_STEPS.length - 1]);
695
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
696
+ case 3:
697
+ _b.sent();
698
+ // eslint-disable-next-line testing-library/no-node-access
699
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[ZOOM_STEPS.length - 1]));
700
+ // eslint-disable-next-line testing-library/no-node-access,jest-dom/prefer-enabled-disabled
701
+ expect(screen.getByTestId(zoomInIcon).parentElement).toHaveAttribute('disabled', '');
702
+ return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
703
+ case 4:
704
+ _b.sent();
705
+ // eslint-disable-next-line testing-library/no-node-access
706
+ expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[ZOOM_STEPS.length - 1]));
707
+ expect(onClose).not.toHaveBeenCalled();
708
+ return [2 /*return*/];
709
+ }
710
+ });
711
+ }); });
712
+ });
713
+ //# sourceMappingURL=PdfPreview.test.js.map