@zextras/carbonio-ui-preview 0.2.0 → 0.2.2

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 (69) hide show
  1. package/lib/preview/ImagePreview.d.ts +8 -0
  2. package/lib/preview/ImagePreview.js +16 -7
  3. package/lib/preview/ImagePreview.js.map +1 -1
  4. package/lib/preview/Navigator.d.ts +5 -0
  5. package/lib/preview/Navigator.js +28 -0
  6. package/lib/preview/Navigator.js.map +1 -0
  7. package/lib/preview/PageController.d.ts +8 -0
  8. package/lib/preview/PageController.js +112 -0
  9. package/lib/preview/PageController.js.map +1 -0
  10. package/lib/preview/PdfPreview.d.ts +14 -0
  11. package/lib/preview/PdfPreview.js +108 -112
  12. package/lib/preview/PdfPreview.js.map +1 -1
  13. package/lib/preview/PdfPreview.test.js +620 -93
  14. package/lib/preview/PdfPreview.test.js.map +1 -1
  15. package/lib/preview/PreviewManager.d.ts +8 -2
  16. package/lib/preview/PreviewManager.js +58 -23
  17. package/lib/preview/PreviewManager.js.map +1 -1
  18. package/lib/preview/PreviewManager.test.js +94 -3
  19. package/lib/preview/PreviewManager.test.js.map +1 -1
  20. package/lib/preview/StyledComponents.d.ts +3 -0
  21. package/lib/preview/StyledComponents.js +21 -0
  22. package/lib/preview/StyledComponents.js.map +1 -0
  23. package/lib/preview/ZoomController.d.ts +17 -0
  24. package/lib/preview/ZoomController.js +58 -0
  25. package/lib/preview/ZoomController.js.map +1 -0
  26. package/lib/preview/usePageScrollController.d.ts +4 -0
  27. package/lib/preview/usePageScrollController.js +70 -0
  28. package/lib/preview/usePageScrollController.js.map +1 -0
  29. package/lib/preview/useZoom.d.ts +13 -0
  30. package/lib/preview/useZoom.js +85 -0
  31. package/lib/preview/useZoom.js.map +1 -0
  32. package/lib/utils/test-utils.d.ts +1 -0
  33. package/lib/utils/test-utils.js +63 -1
  34. package/lib/utils/test-utils.js.map +1 -1
  35. package/lib-esm/preview/ImagePreview.d.ts +8 -0
  36. package/lib-esm/preview/ImagePreview.js +16 -7
  37. package/lib-esm/preview/ImagePreview.js.map +1 -1
  38. package/lib-esm/preview/Navigator.d.ts +5 -0
  39. package/lib-esm/preview/Navigator.js +21 -0
  40. package/lib-esm/preview/Navigator.js.map +1 -0
  41. package/lib-esm/preview/PageController.d.ts +8 -0
  42. package/lib-esm/preview/PageController.js +82 -0
  43. package/lib-esm/preview/PageController.js.map +1 -0
  44. package/lib-esm/preview/PdfPreview.d.ts +14 -0
  45. package/lib-esm/preview/PdfPreview.js +109 -113
  46. package/lib-esm/preview/PdfPreview.js.map +1 -1
  47. package/lib-esm/preview/PdfPreview.test.js +620 -93
  48. package/lib-esm/preview/PdfPreview.test.js.map +1 -1
  49. package/lib-esm/preview/PreviewManager.d.ts +8 -2
  50. package/lib-esm/preview/PreviewManager.js +57 -25
  51. package/lib-esm/preview/PreviewManager.js.map +1 -1
  52. package/lib-esm/preview/PreviewManager.test.js +95 -4
  53. package/lib-esm/preview/PreviewManager.test.js.map +1 -1
  54. package/lib-esm/preview/StyledComponents.d.ts +3 -0
  55. package/lib-esm/preview/StyledComponents.js +15 -0
  56. package/lib-esm/preview/StyledComponents.js.map +1 -0
  57. package/lib-esm/preview/ZoomController.d.ts +17 -0
  58. package/lib-esm/preview/ZoomController.js +28 -0
  59. package/lib-esm/preview/ZoomController.js.map +1 -0
  60. package/lib-esm/preview/usePageScrollController.d.ts +4 -0
  61. package/lib-esm/preview/usePageScrollController.js +66 -0
  62. package/lib-esm/preview/usePageScrollController.js.map +1 -0
  63. package/lib-esm/preview/useZoom.d.ts +13 -0
  64. package/lib-esm/preview/useZoom.js +78 -0
  65. package/lib-esm/preview/useZoom.js.map +1 -0
  66. package/lib-esm/utils/test-utils.d.ts +1 -0
  67. package/lib-esm/utils/test-utils.js +62 -1
  68. package/lib-esm/utils/test-utils.js.map +1 -1
  69. package/package.json +3 -2
@@ -42,9 +42,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
42
42
  import React from 'react';
43
43
  import { act, screen, waitFor } from '@testing-library/react';
44
44
  import userEvent from '@testing-library/user-event';
45
- import { loadPDF, setup } from '../utils/test-utils';
46
45
  import { ZOOM_STEPS } from './constants';
47
46
  import { PdfPreview } from './PdfPreview';
47
+ import { loadPDF, setup, triggerObserver } from 'test-utils';
48
48
  var pdfFile = loadPDF('./__mocks__/_pdf.pdf');
49
49
  var zoomInIcon = 'icon: Plus';
50
50
  var zoomOutIcon = 'icon: Minus';
@@ -61,10 +61,10 @@ describe('Pdf Preview', function () {
61
61
  setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
62
62
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
63
63
  });
64
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
64
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
65
65
  case 1:
66
66
  _a.sent();
67
- expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
67
+ expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
68
68
  expect(screen.getByTestId('pdf-preview-container')).toBeInTheDocument();
69
69
  pageElement = document.querySelector('[data-page-number="1"]');
70
70
  expect(pageElement).toBeDefined();
@@ -81,7 +81,7 @@ describe('Pdf Preview', function () {
81
81
  setup(React.createElement(PdfPreview, { show: false, src: pdfFile.dataURI, onClose: onClose }), {
82
82
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
83
83
  });
84
- expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
84
+ expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
85
85
  expect(screen.queryByTestId('pdf-preview-container')).not.toBeInTheDocument();
86
86
  return [2 /*return*/];
87
87
  });
@@ -95,13 +95,13 @@ describe('Pdf Preview', function () {
95
95
  setup(React.createElement(PdfPreview, { show: true, src: "invalid-pdf.pdf", onClose: onClose }), {
96
96
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
97
97
  });
98
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
98
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
99
99
  case 1:
100
100
  _a.sent();
101
- return [4 /*yield*/, screen.findByText(/Failed to load PDF file/i)];
101
+ return [4 /*yield*/, screen.findByText(/Failed to load document preview./i)];
102
102
  case 2:
103
103
  _a.sent();
104
- expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
104
+ expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
105
105
  expect(screen.getByTestId('pdf-preview-container')).toBeInTheDocument();
106
106
  return [2 /*return*/];
107
107
  }
@@ -148,10 +148,10 @@ describe('Pdf Preview', function () {
148
148
  setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, filename: "file name", extension: "pdf", size: "18KB" }), {
149
149
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
150
150
  });
151
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
151
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
152
152
  case 1:
153
153
  _a.sent();
154
- expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
154
+ expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
155
155
  expect(screen.getByText(/file name/i)).toBeVisible();
156
156
  expect(screen.getByText(/pdf.*18KB/i)).toBeVisible();
157
157
  return [2 /*return*/];
@@ -167,10 +167,10 @@ describe('Pdf Preview', function () {
167
167
  user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
168
168
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
169
169
  }).user;
170
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
170
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
171
171
  case 1:
172
172
  _a.sent();
173
- expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
173
+ expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
174
174
  return [4 /*yield*/, user.keyboard('{Escape}')];
175
175
  case 2:
176
176
  _a.sent();
@@ -195,10 +195,10 @@ describe('Pdf Preview', function () {
195
195
  user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, closeAction: closeAction }), {
196
196
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
197
197
  }).user;
198
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
198
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
199
199
  case 1:
200
200
  _a.sent();
201
- expect(screen.queryByText(/loading pdf/i)).not.toBeInTheDocument();
201
+ expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
202
202
  closeActionElement = screen.getByTestId('icon: Activity');
203
203
  expect(closeActionElement).toBeVisible();
204
204
  return [4 /*yield*/, user.hover(closeActionElement)];
@@ -246,7 +246,7 @@ describe('Pdf Preview', function () {
246
246
  user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, actions: actions, filename: "pdf name", closeAction: closeAction }), {
247
247
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
248
248
  }).user;
249
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
249
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
250
250
  case 1:
251
251
  _a.sent();
252
252
  return [4 /*yield*/, waitFor(function () {
@@ -270,10 +270,10 @@ describe('Pdf Preview', function () {
270
270
  _a.sent();
271
271
  expect(actions[0].onClick).toHaveBeenCalled();
272
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
273
+ // click on action 2 skips the handler of the action since it is disabled and does not call onClose
274
274
  return [4 /*yield*/, user.click(action2Item)];
275
275
  case 4:
276
- // click on action 2 skips the handler of the action since it is disabled and do not calls onClose
276
+ // click on action 2 skips the handler of the action since it is disabled and does not call onClose
277
277
  _a.sent();
278
278
  expect(actions[1].onClick).not.toHaveBeenCalled();
279
279
  expect(onClose).toHaveBeenCalledTimes(1);
@@ -296,15 +296,15 @@ describe('Pdf Preview', function () {
296
296
  });
297
297
  }); });
298
298
  test('Zoom starts at lowest step', function () { return __awaiter(void 0, void 0, void 0, function () {
299
- var onClose, user, canvas;
299
+ var onClose, canvas;
300
300
  return __generator(this, function (_a) {
301
301
  switch (_a.label) {
302
302
  case 0:
303
303
  onClose = jest.fn();
304
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
304
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
305
305
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
306
- }).user;
307
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
306
+ });
307
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
308
308
  case 1:
309
309
  _a.sent();
310
310
  canvas = document.querySelector('canvas');
@@ -323,7 +323,7 @@ describe('Pdf Preview', function () {
323
323
  user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
324
324
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
325
325
  }).user;
326
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
326
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
327
327
  case 1:
328
328
  _a.sent();
329
329
  canvas = document.querySelector('canvas');
@@ -356,7 +356,7 @@ describe('Pdf Preview', function () {
356
356
  user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
357
357
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
358
358
  }).user;
359
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
359
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
360
360
  case 1:
361
361
  _a.sent();
362
362
  // eslint-disable-next-line testing-library/no-node-access
@@ -409,7 +409,7 @@ describe('Pdf Preview', function () {
409
409
  user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
410
410
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
411
411
  }).user;
412
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
412
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
413
413
  case 1:
414
414
  _a.sent();
415
415
  // eslint-disable-next-line testing-library/no-node-access
@@ -438,19 +438,19 @@ describe('Pdf Preview', function () {
438
438
  });
439
439
  }); });
440
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) {
441
+ var onClose, ref, mockPdfWidth, user;
442
+ return __generator(this, function (_a) {
443
+ switch (_a.label) {
444
444
  case 0:
445
445
  onClose = jest.fn();
446
446
  ref = React.createRef();
447
447
  mockPdfWidth = 1000;
448
- _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
448
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
449
449
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
450
- }), user = _a.user, container = _a.container;
451
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
450
+ }).user;
451
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
452
452
  case 1:
453
- _b.sent();
453
+ _a.sent();
454
454
  // eslint-disable-next-line testing-library/no-node-access
455
455
  expect(document.querySelector('canvas')).toBeVisible();
456
456
  expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
@@ -459,7 +459,7 @@ describe('Pdf Preview', function () {
459
459
  jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
460
460
  return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
461
461
  case 2:
462
- _b.sent();
462
+ _a.sent();
463
463
  // eslint-disable-next-line testing-library/no-node-access
464
464
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth));
465
465
  expect(screen.getByTestId(zoomResetWidthIcon)).toBeVisible();
@@ -469,19 +469,19 @@ describe('Pdf Preview', function () {
469
469
  });
470
470
  }); });
471
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) {
472
+ var onClose, ref, mockPdfWidth, user;
473
+ return __generator(this, function (_a) {
474
+ switch (_a.label) {
475
475
  case 0:
476
476
  onClose = jest.fn();
477
477
  ref = React.createRef();
478
478
  mockPdfWidth = 1000;
479
- _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
479
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
480
480
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
481
- }), user = _a.user, container = _a.container;
482
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
481
+ }).user;
482
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
483
483
  case 1:
484
- _b.sent();
484
+ _a.sent();
485
485
  // eslint-disable-next-line testing-library/no-node-access
486
486
  expect(document.querySelector('canvas')).toBeVisible();
487
487
  expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
@@ -490,14 +490,14 @@ describe('Pdf Preview', function () {
490
490
  jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
491
491
  return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
492
492
  case 2:
493
- _b.sent();
493
+ _a.sent();
494
494
  // eslint-disable-next-line testing-library/no-node-access
495
495
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth));
496
496
  expect(screen.getByTestId(zoomResetWidthIcon)).toBeVisible();
497
497
  expect(screen.queryByTestId(zoomFitToWidthIcon)).not.toBeInTheDocument();
498
498
  return [4 /*yield*/, user.click(screen.getByTestId(zoomResetWidthIcon))];
499
499
  case 3:
500
- _b.sent();
500
+ _a.sent();
501
501
  // eslint-disable-next-line testing-library/no-node-access
502
502
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
503
503
  expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
@@ -507,26 +507,26 @@ describe('Pdf Preview', function () {
507
507
  });
508
508
  }); });
509
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) {
510
+ var onClose, ref, mockPdfWidth, user;
511
+ return __generator(this, function (_a) {
512
+ switch (_a.label) {
513
513
  case 0:
514
514
  onClose = jest.fn();
515
515
  ref = React.createRef();
516
516
  mockPdfWidth = ZOOM_STEPS[0] - 1;
517
- _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
517
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
518
518
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
519
- }), user = _a.user, container = _a.container;
520
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
519
+ }).user;
520
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
521
521
  case 1:
522
- _b.sent();
522
+ _a.sent();
523
523
  // eslint-disable-next-line testing-library/no-node-access
524
524
  expect(document.querySelector('canvas')).toBeVisible();
525
525
  expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
526
526
  jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
527
527
  return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
528
528
  case 2:
529
- _b.sent();
529
+ _a.sent();
530
530
  // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
531
531
  expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
532
532
  // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
@@ -536,26 +536,26 @@ describe('Pdf Preview', function () {
536
536
  });
537
537
  }); });
538
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) {
539
+ var onClose, ref, mockPdfWidth, user;
540
+ return __generator(this, function (_a) {
541
+ switch (_a.label) {
542
542
  case 0:
543
543
  onClose = jest.fn();
544
544
  ref = React.createRef();
545
545
  mockPdfWidth = ZOOM_STEPS[ZOOM_STEPS.length - 1] + 1;
546
- _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
546
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
547
547
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
548
- }), user = _a.user, container = _a.container;
549
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
548
+ }).user;
549
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
550
550
  case 1:
551
- _b.sent();
551
+ _a.sent();
552
552
  // eslint-disable-next-line testing-library/no-node-access
553
553
  expect(document.querySelector('canvas')).toBeVisible();
554
554
  expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
555
555
  jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
556
556
  return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
557
557
  case 2:
558
- _b.sent();
558
+ _a.sent();
559
559
  // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
560
560
  expect(screen.getByTestId(zoomInIcon).parentElement).toHaveAttribute('disabled', '');
561
561
  // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
@@ -565,32 +565,32 @@ describe('Pdf Preview', function () {
565
565
  });
566
566
  }); });
567
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) {
568
+ var onClose, ref, stepToReach, mockPdfWidth, user;
569
+ return __generator(this, function (_a) {
570
+ switch (_a.label) {
571
571
  case 0:
572
572
  onClose = jest.fn();
573
573
  ref = React.createRef();
574
574
  stepToReach = 1;
575
575
  mockPdfWidth = ZOOM_STEPS[stepToReach + 1] - 1;
576
- _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
576
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
577
577
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
578
- }), user = _a.user, container = _a.container;
579
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
578
+ }).user;
579
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
580
580
  case 1:
581
- _b.sent();
581
+ _a.sent();
582
582
  // eslint-disable-next-line testing-library/no-node-access
583
583
  expect(document.querySelector('canvas')).toBeVisible();
584
584
  expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
585
585
  jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
586
586
  return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
587
587
  case 2:
588
- _b.sent();
588
+ _a.sent();
589
589
  // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
590
590
  expect(screen.getByTestId(zoomOutIcon).parentElement).not.toHaveAttribute('disabled', '');
591
591
  return [4 /*yield*/, user.click(screen.getByTestId(zoomOutIcon))];
592
592
  case 3:
593
- _b.sent();
593
+ _a.sent();
594
594
  // eslint-disable-next-line testing-library/no-node-access
595
595
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[stepToReach]));
596
596
  return [2 /*return*/];
@@ -598,32 +598,32 @@ describe('Pdf Preview', function () {
598
598
  });
599
599
  }); });
600
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) {
601
+ var onClose, ref, stepToReach, mockPdfWidth, user;
602
+ return __generator(this, function (_a) {
603
+ switch (_a.label) {
604
604
  case 0:
605
605
  onClose = jest.fn();
606
606
  ref = React.createRef();
607
607
  stepToReach = 2;
608
608
  mockPdfWidth = ZOOM_STEPS[stepToReach - 1] + 1;
609
- _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
609
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
610
610
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
611
- }), user = _a.user, container = _a.container;
612
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
611
+ }).user;
612
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
613
613
  case 1:
614
- _b.sent();
614
+ _a.sent();
615
615
  // eslint-disable-next-line testing-library/no-node-access
616
616
  expect(document.querySelector('canvas')).toBeVisible();
617
617
  expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
618
618
  jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
619
619
  return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
620
620
  case 2:
621
- _b.sent();
621
+ _a.sent();
622
622
  // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
623
623
  expect(screen.getByTestId(zoomInIcon).parentElement).not.toHaveAttribute('disabled', '');
624
624
  return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
625
625
  case 3:
626
- _b.sent();
626
+ _a.sent();
627
627
  // eslint-disable-next-line testing-library/no-node-access
628
628
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[stepToReach]));
629
629
  return [2 /*return*/];
@@ -631,19 +631,19 @@ describe('Pdf Preview', function () {
631
631
  });
632
632
  }); });
633
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) {
634
+ var onClose, ref, mockPdfWidth, user, getPreviewClientWidthMock;
635
+ return __generator(this, function (_a) {
636
+ switch (_a.label) {
637
637
  case 0:
638
638
  onClose = jest.fn();
639
639
  ref = React.createRef();
640
640
  mockPdfWidth = [1001, 1501, 2001];
641
- _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
641
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
642
642
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
643
- }), user = _a.user, container = _a.container;
644
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
643
+ }).user;
644
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
645
645
  case 1:
646
- _b.sent();
646
+ _a.sent();
647
647
  // eslint-disable-next-line testing-library/no-node-access
648
648
  expect(document.querySelector('canvas')).toBeVisible();
649
649
  expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
@@ -651,7 +651,7 @@ describe('Pdf Preview', function () {
651
651
  getPreviewClientWidthMock.mockReturnValueOnce(mockPdfWidth[0]);
652
652
  return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
653
653
  case 2:
654
- _b.sent();
654
+ _a.sent();
655
655
  // eslint-disable-next-line testing-library/no-node-access
656
656
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth[0]));
657
657
  getPreviewClientWidthMock.mockReturnValueOnce(mockPdfWidth[1]);
@@ -666,26 +666,25 @@ describe('Pdf Preview', function () {
666
666
  });
667
667
  }); });
668
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) {
669
+ var onClose, ref, user;
670
+ return __generator(this, function (_a) {
671
+ switch (_a.label) {
672
672
  case 0:
673
673
  onClose = jest.fn();
674
674
  ref = React.createRef();
675
- mockPdfWidth = [1001, 1501, 2001];
676
- _a = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
675
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
677
676
  setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
678
- }), user = _a.user, container = _a.container;
679
- return [4 /*yield*/, screen.findByText(/loading pdf/i)];
677
+ }).user;
678
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
680
679
  case 1:
681
- _b.sent();
680
+ _a.sent();
682
681
  // eslint-disable-next-line testing-library/no-node-access
683
682
  expect(document.querySelector('canvas')).toBeVisible();
684
683
  // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
685
684
  expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
686
685
  return [4 /*yield*/, user.click(screen.getByTestId(zoomOutIcon))];
687
686
  case 2:
688
- _b.sent();
687
+ _a.sent();
689
688
  // eslint-disable-next-line testing-library/no-node-access
690
689
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
691
690
  expect(onClose).not.toHaveBeenCalled();
@@ -694,14 +693,14 @@ describe('Pdf Preview', function () {
694
693
  .mockReturnValue(ZOOM_STEPS[ZOOM_STEPS.length - 1]);
695
694
  return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
696
695
  case 3:
697
- _b.sent();
696
+ _a.sent();
698
697
  // eslint-disable-next-line testing-library/no-node-access
699
698
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[ZOOM_STEPS.length - 1]));
700
699
  // eslint-disable-next-line testing-library/no-node-access,jest-dom/prefer-enabled-disabled
701
700
  expect(screen.getByTestId(zoomInIcon).parentElement).toHaveAttribute('disabled', '');
702
701
  return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
703
702
  case 4:
704
- _b.sent();
703
+ _a.sent();
705
704
  // eslint-disable-next-line testing-library/no-node-access
706
705
  expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[ZOOM_STEPS.length - 1]));
707
706
  expect(onClose).not.toHaveBeenCalled();
@@ -709,5 +708,533 @@ describe('Pdf Preview', function () {
709
708
  }
710
709
  });
711
710
  }); });
711
+ describe('Page selector', function () {
712
+ test('shows page controller', function () { return __awaiter(void 0, void 0, void 0, function () {
713
+ var onClose;
714
+ return __generator(this, function (_a) {
715
+ switch (_a.label) {
716
+ case 0:
717
+ onClose = jest.fn();
718
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
719
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
720
+ });
721
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
722
+ case 1:
723
+ _a.sent();
724
+ // eslint-disable-next-line testing-library/no-node-access
725
+ expect(document.querySelector('canvas')).toBeVisible();
726
+ expect(screen.getByText(/page/i)).toBeVisible();
727
+ expect(screen.getByRole('textbox', { name: /current page/i })).toBeVisible();
728
+ // mock pdf has 4 pages
729
+ expect(screen.getByText('4')).toBeVisible();
730
+ return [2 /*return*/];
731
+ }
732
+ });
733
+ }); });
734
+ test('blur is a confirmation event on page input', function () { return __awaiter(void 0, void 0, void 0, function () {
735
+ var onClose, user, pageInput;
736
+ return __generator(this, function (_a) {
737
+ switch (_a.label) {
738
+ case 0:
739
+ onClose = jest.fn();
740
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
741
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
742
+ }).user;
743
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
744
+ case 1:
745
+ _a.sent();
746
+ // eslint-disable-next-line testing-library/no-node-access
747
+ expect(document.querySelector('canvas')).toBeVisible();
748
+ expect(screen.getByText(/page/i)).toBeVisible();
749
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
750
+ expect(pageInput).toHaveDisplayValue('1');
751
+ return [4 /*yield*/, user.clear(pageInput)];
752
+ case 2:
753
+ _a.sent();
754
+ return [4 /*yield*/, user.type(pageInput, '2')];
755
+ case 3:
756
+ _a.sent();
757
+ return [4 /*yield*/, user.tab()];
758
+ case 4:
759
+ _a.sent();
760
+ expect(pageInput).not.toHaveFocus();
761
+ expect(pageInput).toHaveDisplayValue('2');
762
+ return [2 /*return*/];
763
+ }
764
+ });
765
+ }); });
766
+ test('enter key is a confirmation event on page input', function () { return __awaiter(void 0, void 0, void 0, function () {
767
+ var onClose, user, pageInput;
768
+ return __generator(this, function (_a) {
769
+ switch (_a.label) {
770
+ case 0:
771
+ onClose = jest.fn();
772
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
773
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
774
+ }).user;
775
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
776
+ case 1:
777
+ _a.sent();
778
+ // eslint-disable-next-line testing-library/no-node-access
779
+ expect(document.querySelector('canvas')).toBeVisible();
780
+ expect(screen.getByText(/page/i)).toBeVisible();
781
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
782
+ expect(pageInput).toHaveDisplayValue('1');
783
+ return [4 /*yield*/, user.clear(pageInput)];
784
+ case 2:
785
+ _a.sent();
786
+ return [4 /*yield*/, user.type(pageInput, '2')];
787
+ case 3:
788
+ _a.sent();
789
+ return [4 /*yield*/, user.type(pageInput, '{Enter}')];
790
+ case 4:
791
+ _a.sent();
792
+ expect(pageInput).not.toHaveFocus();
793
+ expect(pageInput).toHaveDisplayValue('2');
794
+ return [2 /*return*/];
795
+ }
796
+ });
797
+ }); });
798
+ test('when input is confirmed, input loses focus and the document is scrolled to typed page', function () { return __awaiter(void 0, void 0, void 0, function () {
799
+ var onClose, scrollIntoViewFn, user, pageInput;
800
+ return __generator(this, function (_a) {
801
+ switch (_a.label) {
802
+ case 0:
803
+ onClose = jest.fn();
804
+ scrollIntoViewFn = jest.fn();
805
+ window.HTMLElement.prototype.scrollIntoView = scrollIntoViewFn;
806
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
807
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
808
+ }).user;
809
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
810
+ case 1:
811
+ _a.sent();
812
+ // eslint-disable-next-line testing-library/no-node-access
813
+ expect(document.querySelector('canvas')).toBeVisible();
814
+ expect(screen.getByText(/page/i)).toBeVisible();
815
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
816
+ expect(pageInput).toHaveDisplayValue('1');
817
+ return [4 /*yield*/, user.clear(pageInput)];
818
+ case 2:
819
+ _a.sent();
820
+ return [4 /*yield*/, user.type(pageInput, '2')];
821
+ case 3:
822
+ _a.sent();
823
+ return [4 /*yield*/, user.click(screen.getByText(/page/i))];
824
+ case 4:
825
+ _a.sent();
826
+ expect(pageInput).not.toHaveFocus();
827
+ expect(pageInput).toHaveDisplayValue('2');
828
+ expect(scrollIntoViewFn).toHaveBeenCalledTimes(1);
829
+ expect(scrollIntoViewFn.mock.instances[0]).toHaveAttribute('data-page-number', '2');
830
+ return [2 /*return*/];
831
+ }
832
+ });
833
+ }); });
834
+ test('when input is confirmed with an invalid value, input loses focus and the input value is reset to previous valid page', function () { return __awaiter(void 0, void 0, void 0, function () {
835
+ var onClose, scrollIntoViewFn, user, pageInput;
836
+ return __generator(this, function (_a) {
837
+ switch (_a.label) {
838
+ case 0:
839
+ onClose = jest.fn();
840
+ scrollIntoViewFn = jest.fn();
841
+ window.HTMLElement.prototype.scrollIntoView = scrollIntoViewFn;
842
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
843
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
844
+ }).user;
845
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
846
+ case 1:
847
+ _a.sent();
848
+ // eslint-disable-next-line testing-library/no-node-access
849
+ expect(document.querySelector('canvas')).toBeVisible();
850
+ expect(screen.getByText(/page/i)).toBeVisible();
851
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
852
+ expect(pageInput).toHaveDisplayValue('1');
853
+ return [4 /*yield*/, user.clear(pageInput)];
854
+ case 2:
855
+ _a.sent();
856
+ return [4 /*yield*/, user.type(pageInput, 'invalid')];
857
+ case 3:
858
+ _a.sent();
859
+ return [4 /*yield*/, user.click(screen.getByText(/page/i))];
860
+ case 4:
861
+ _a.sent();
862
+ expect(pageInput).not.toHaveFocus();
863
+ expect(pageInput).toHaveDisplayValue('1');
864
+ expect(scrollIntoViewFn).not.toHaveBeenCalled();
865
+ return [2 /*return*/];
866
+ }
867
+ });
868
+ }); });
869
+ test('on scroll, if focus is not on input, value is updated with current page', function () { return __awaiter(void 0, void 0, void 0, function () {
870
+ var onClose, pageInput, page2Element;
871
+ return __generator(this, function (_a) {
872
+ switch (_a.label) {
873
+ case 0:
874
+ onClose = jest.fn();
875
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
876
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
877
+ });
878
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
879
+ case 1:
880
+ _a.sent();
881
+ // eslint-disable-next-line testing-library/no-node-access
882
+ expect(document.querySelector('canvas')).toBeVisible();
883
+ expect(screen.getByText(/page/i)).toBeVisible();
884
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
885
+ expect(pageInput).toHaveDisplayValue('1');
886
+ page2Element = document.querySelector('[data-page-number="2"]');
887
+ expect(page2Element).not.toBeNull();
888
+ return [4 /*yield*/, triggerObserver(page2Element)];
889
+ case 2:
890
+ _a.sent();
891
+ expect(pageInput).toHaveDisplayValue('2');
892
+ return [2 /*return*/];
893
+ }
894
+ });
895
+ }); });
896
+ test('on scroll, if focus is on input, value is updated with current page', function () { return __awaiter(void 0, void 0, void 0, function () {
897
+ var onClose, user, pageInput, page2Element;
898
+ return __generator(this, function (_a) {
899
+ switch (_a.label) {
900
+ case 0:
901
+ onClose = jest.fn();
902
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
903
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
904
+ }).user;
905
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
906
+ case 1:
907
+ _a.sent();
908
+ // eslint-disable-next-line testing-library/no-node-access
909
+ expect(document.querySelector('canvas')).toBeVisible();
910
+ expect(screen.getByText(/page/i)).toBeVisible();
911
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
912
+ expect(pageInput).toHaveDisplayValue('1');
913
+ return [4 /*yield*/, user.clear(pageInput)];
914
+ case 2:
915
+ _a.sent();
916
+ return [4 /*yield*/, user.type(pageInput, '4')];
917
+ case 3:
918
+ _a.sent();
919
+ expect(pageInput).toHaveFocus();
920
+ page2Element = document.querySelector('[data-page-number="2"]');
921
+ expect(page2Element).not.toBeNull();
922
+ return [4 /*yield*/, triggerObserver(page2Element)];
923
+ case 4:
924
+ _a.sent();
925
+ expect(pageInput).toHaveDisplayValue('2');
926
+ expect(pageInput).toHaveFocus();
927
+ return [2 /*return*/];
928
+ }
929
+ });
930
+ }); });
931
+ test('must press esc key 2 times to make user exit from the preview, when focus is on input', function () { return __awaiter(void 0, void 0, void 0, function () {
932
+ var onClose, user, pageInput;
933
+ return __generator(this, function (_a) {
934
+ switch (_a.label) {
935
+ case 0:
936
+ onClose = jest.fn();
937
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
938
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
939
+ }).user;
940
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
941
+ case 1:
942
+ _a.sent();
943
+ // eslint-disable-next-line testing-library/no-node-access
944
+ expect(document.querySelector('canvas')).toBeVisible();
945
+ expect(screen.getByText(/page/i)).toBeVisible();
946
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
947
+ expect(pageInput).toHaveDisplayValue('1');
948
+ return [4 /*yield*/, user.clear(pageInput)];
949
+ case 2:
950
+ _a.sent();
951
+ return [4 /*yield*/, user.type(pageInput, '4')];
952
+ case 3:
953
+ _a.sent();
954
+ expect(pageInput).toHaveFocus();
955
+ return [4 /*yield*/, user.keyboard('{Escape}')];
956
+ case 4:
957
+ _a.sent();
958
+ expect(onClose).not.toHaveBeenCalled();
959
+ return [4 /*yield*/, user.keyboard('{Escape}')];
960
+ case 5:
961
+ _a.sent();
962
+ expect(onClose).toHaveBeenCalledTimes(1);
963
+ return [2 /*return*/];
964
+ }
965
+ });
966
+ }); });
967
+ });
968
+ describe('keyboard shortcuts', function () {
969
+ describe('Home and End', function () {
970
+ test('click End go to last page and Home return to the first page', function () { return __awaiter(void 0, void 0, void 0, function () {
971
+ var onClose, user, pageInput;
972
+ return __generator(this, function (_a) {
973
+ switch (_a.label) {
974
+ case 0:
975
+ onClose = jest.fn();
976
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
977
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
978
+ }).user;
979
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
980
+ case 1:
981
+ _a.sent();
982
+ // eslint-disable-next-line testing-library/no-node-access
983
+ expect(document.querySelector('canvas')).toBeVisible();
984
+ expect(screen.getByText(/page/i)).toBeVisible();
985
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
986
+ expect(pageInput).toHaveDisplayValue('1');
987
+ return [4 /*yield*/, user.keyboard('{End}')];
988
+ case 2:
989
+ _a.sent();
990
+ expect(pageInput).toHaveDisplayValue('4');
991
+ return [4 /*yield*/, user.keyboard('{Home}')];
992
+ case 3:
993
+ _a.sent();
994
+ expect(pageInput).toHaveDisplayValue('1');
995
+ return [2 /*return*/];
996
+ }
997
+ });
998
+ }); });
999
+ test('click End go to last page and Home return to the first page, but they do not work if the page input is focussed ', function () { return __awaiter(void 0, void 0, void 0, function () {
1000
+ var onClose, user, pageInput;
1001
+ return __generator(this, function (_a) {
1002
+ switch (_a.label) {
1003
+ case 0:
1004
+ onClose = jest.fn();
1005
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1006
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1007
+ }).user;
1008
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1009
+ case 1:
1010
+ _a.sent();
1011
+ // eslint-disable-next-line testing-library/no-node-access
1012
+ expect(document.querySelector('canvas')).toBeVisible();
1013
+ expect(screen.getByText(/page/i)).toBeVisible();
1014
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
1015
+ expect(pageInput).toHaveDisplayValue('1');
1016
+ return [4 /*yield*/, user.click(pageInput)];
1017
+ case 2:
1018
+ _a.sent();
1019
+ expect(pageInput).toHaveFocus();
1020
+ return [4 /*yield*/, user.keyboard('{End}')];
1021
+ case 3:
1022
+ _a.sent();
1023
+ expect(pageInput).not.toHaveDisplayValue('4');
1024
+ expect(pageInput).toHaveDisplayValue('1');
1025
+ // remove focus
1026
+ return [4 /*yield*/, user.keyboard('{Escape}')];
1027
+ case 4:
1028
+ // remove focus
1029
+ _a.sent();
1030
+ expect(pageInput).not.toHaveFocus();
1031
+ return [4 /*yield*/, user.keyboard('{End}')];
1032
+ case 5:
1033
+ _a.sent();
1034
+ expect(pageInput).toHaveDisplayValue('4');
1035
+ // focus input again
1036
+ return [4 /*yield*/, user.click(pageInput)];
1037
+ case 6:
1038
+ // focus input again
1039
+ _a.sent();
1040
+ expect(pageInput).toHaveFocus();
1041
+ return [4 /*yield*/, user.keyboard('{Home}')];
1042
+ case 7:
1043
+ _a.sent();
1044
+ expect(pageInput).not.toHaveDisplayValue('1');
1045
+ expect(pageInput).toHaveDisplayValue('4');
1046
+ // remove focus
1047
+ return [4 /*yield*/, user.keyboard('{Escape}')];
1048
+ case 8:
1049
+ // remove focus
1050
+ _a.sent();
1051
+ expect(pageInput).not.toHaveFocus();
1052
+ return [4 /*yield*/, user.keyboard('{Home}')];
1053
+ case 9:
1054
+ _a.sent();
1055
+ expect(pageInput).toHaveDisplayValue('1');
1056
+ return [2 /*return*/];
1057
+ }
1058
+ });
1059
+ }); });
1060
+ });
1061
+ describe('PageUp and PageDown', function () {
1062
+ test('click PageDown go to the next page and PageUp go to the previous page', function () { return __awaiter(void 0, void 0, void 0, function () {
1063
+ var onClose, user, pageInput;
1064
+ return __generator(this, function (_a) {
1065
+ switch (_a.label) {
1066
+ case 0:
1067
+ onClose = jest.fn();
1068
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1069
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1070
+ }).user;
1071
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1072
+ case 1:
1073
+ _a.sent();
1074
+ // eslint-disable-next-line testing-library/no-node-access
1075
+ expect(document.querySelector('canvas')).toBeVisible();
1076
+ expect(screen.getByText(/page/i)).toBeVisible();
1077
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
1078
+ expect(pageInput).toHaveDisplayValue('1');
1079
+ return [4 /*yield*/, user.keyboard('{PageDown}')];
1080
+ case 2:
1081
+ _a.sent();
1082
+ expect(pageInput).toHaveDisplayValue('2');
1083
+ return [4 /*yield*/, user.keyboard('{PageDown}')];
1084
+ case 3:
1085
+ _a.sent();
1086
+ expect(pageInput).toHaveDisplayValue('3');
1087
+ return [4 /*yield*/, user.keyboard('{PageDown}')];
1088
+ case 4:
1089
+ _a.sent();
1090
+ expect(pageInput).toHaveDisplayValue('4');
1091
+ return [4 /*yield*/, user.keyboard('{PageDown}')];
1092
+ case 5:
1093
+ _a.sent();
1094
+ expect(pageInput).toHaveDisplayValue('4');
1095
+ return [4 /*yield*/, user.keyboard('{PageUp}')];
1096
+ case 6:
1097
+ _a.sent();
1098
+ expect(pageInput).toHaveDisplayValue('3');
1099
+ return [4 /*yield*/, user.keyboard('{PageUp}')];
1100
+ case 7:
1101
+ _a.sent();
1102
+ expect(pageInput).toHaveDisplayValue('2');
1103
+ return [4 /*yield*/, user.keyboard('{PageUp}')];
1104
+ case 8:
1105
+ _a.sent();
1106
+ expect(pageInput).toHaveDisplayValue('1');
1107
+ return [4 /*yield*/, user.keyboard('{PageUp}')];
1108
+ case 9:
1109
+ _a.sent();
1110
+ expect(pageInput).toHaveDisplayValue('1');
1111
+ return [2 /*return*/];
1112
+ }
1113
+ });
1114
+ }); });
1115
+ test('click PageDown go to the next page and PageUp go to the previous page, but they do not work if the page input is focussed ', function () { return __awaiter(void 0, void 0, void 0, function () {
1116
+ var onClose, user, pageInput;
1117
+ return __generator(this, function (_a) {
1118
+ switch (_a.label) {
1119
+ case 0:
1120
+ onClose = jest.fn();
1121
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1122
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1123
+ }).user;
1124
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1125
+ case 1:
1126
+ _a.sent();
1127
+ // eslint-disable-next-line testing-library/no-node-access
1128
+ expect(document.querySelector('canvas')).toBeVisible();
1129
+ expect(screen.getByText(/page/i)).toBeVisible();
1130
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
1131
+ expect(pageInput).toHaveDisplayValue('1');
1132
+ return [4 /*yield*/, user.click(pageInput)];
1133
+ case 2:
1134
+ _a.sent();
1135
+ expect(pageInput).toHaveFocus();
1136
+ return [4 /*yield*/, user.keyboard('{PageDown}')];
1137
+ case 3:
1138
+ _a.sent();
1139
+ expect(pageInput).not.toHaveDisplayValue('2');
1140
+ expect(pageInput).toHaveDisplayValue('1');
1141
+ // remove focus
1142
+ return [4 /*yield*/, user.keyboard('{Escape}')];
1143
+ case 4:
1144
+ // remove focus
1145
+ _a.sent();
1146
+ expect(pageInput).not.toHaveFocus();
1147
+ return [4 /*yield*/, user.keyboard('{PageDown}')];
1148
+ case 5:
1149
+ _a.sent();
1150
+ expect(pageInput).toHaveDisplayValue('2');
1151
+ // focus input again
1152
+ return [4 /*yield*/, user.click(pageInput)];
1153
+ case 6:
1154
+ // focus input again
1155
+ _a.sent();
1156
+ expect(pageInput).toHaveFocus();
1157
+ return [4 /*yield*/, user.keyboard('{PageUp}')];
1158
+ case 7:
1159
+ _a.sent();
1160
+ expect(pageInput).not.toHaveDisplayValue('1');
1161
+ expect(pageInput).toHaveDisplayValue('2');
1162
+ // remove focus
1163
+ return [4 /*yield*/, user.keyboard('{Escape}')];
1164
+ case 8:
1165
+ // remove focus
1166
+ _a.sent();
1167
+ expect(pageInput).not.toHaveFocus();
1168
+ return [4 /*yield*/, user.keyboard('{PageUp}')];
1169
+ case 9:
1170
+ _a.sent();
1171
+ expect(pageInput).toHaveDisplayValue('1');
1172
+ return [2 /*return*/];
1173
+ }
1174
+ });
1175
+ }); });
1176
+ });
1177
+ test('ArrowUp and ArrowDown', function () { return __awaiter(void 0, void 0, void 0, function () {
1178
+ var onClose, scrollByFn, user, pageInput;
1179
+ return __generator(this, function (_a) {
1180
+ switch (_a.label) {
1181
+ case 0:
1182
+ onClose = jest.fn();
1183
+ scrollByFn = jest.fn();
1184
+ window.HTMLElement.prototype.scrollBy = scrollByFn;
1185
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1186
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1187
+ }).user;
1188
+ return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1189
+ case 1:
1190
+ _a.sent();
1191
+ // eslint-disable-next-line testing-library/no-node-access
1192
+ expect(document.querySelector('canvas')).toBeVisible();
1193
+ expect(screen.getByText(/page/i)).toBeVisible();
1194
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
1195
+ expect(pageInput).toHaveDisplayValue('1');
1196
+ return [4 /*yield*/, user.click(pageInput)];
1197
+ case 2:
1198
+ _a.sent();
1199
+ expect(pageInput).toHaveFocus();
1200
+ return [4 /*yield*/, user.keyboard('{ArrowDown}')];
1201
+ case 3:
1202
+ _a.sent();
1203
+ expect(scrollByFn).not.toHaveBeenCalled();
1204
+ // remove focus
1205
+ return [4 /*yield*/, user.keyboard('{Escape}')];
1206
+ case 4:
1207
+ // remove focus
1208
+ _a.sent();
1209
+ expect(pageInput).not.toHaveFocus();
1210
+ return [4 /*yield*/, user.keyboard('{ArrowDown}')];
1211
+ case 5:
1212
+ _a.sent();
1213
+ expect(scrollByFn).toHaveBeenCalledTimes(1);
1214
+ expect(scrollByFn).toHaveBeenCalledWith(0, 40);
1215
+ return [4 /*yield*/, user.click(pageInput)];
1216
+ case 6:
1217
+ _a.sent();
1218
+ expect(pageInput).toHaveFocus();
1219
+ return [4 /*yield*/, user.keyboard('{ArrowUp}')];
1220
+ case 7:
1221
+ _a.sent();
1222
+ expect(scrollByFn).toHaveBeenCalledTimes(1);
1223
+ // remove focus
1224
+ return [4 /*yield*/, user.keyboard('{Escape}')];
1225
+ case 8:
1226
+ // remove focus
1227
+ _a.sent();
1228
+ expect(pageInput).not.toHaveFocus();
1229
+ return [4 /*yield*/, user.keyboard('{ArrowUp}')];
1230
+ case 9:
1231
+ _a.sent();
1232
+ expect(scrollByFn).toHaveBeenCalledTimes(2);
1233
+ expect(scrollByFn).toHaveBeenCalledWith(0, -40);
1234
+ return [2 /*return*/];
1235
+ }
1236
+ });
1237
+ }); });
1238
+ });
712
1239
  });
713
1240
  //# sourceMappingURL=PdfPreview.test.js.map