@zextras/carbonio-ui-preview 0.2.0 → 0.2.1

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 +5 -2
  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 +101 -0
  9. package/lib/preview/PageController.js.map +1 -0
  10. package/lib/preview/PdfPreview.d.ts +10 -0
  11. package/lib/preview/PdfPreview.js +62 -99
  12. package/lib/preview/PdfPreview.js.map +1 -1
  13. package/lib/preview/PdfPreview.test.js +328 -68
  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 +1 -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 +5 -2
  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 +71 -0
  43. package/lib-esm/preview/PageController.js.map +1 -0
  44. package/lib-esm/preview/PdfPreview.d.ts +10 -0
  45. package/lib-esm/preview/PdfPreview.js +63 -100
  46. package/lib-esm/preview/PdfPreview.js.map +1 -1
  47. package/lib-esm/preview/PdfPreview.test.js +328 -68
  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 +1 -3
  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';
@@ -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,14 +296,14 @@ 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;
306
+ });
307
307
  return [4 /*yield*/, screen.findByText(/loading pdf/i)];
308
308
  case 1:
309
309
  _a.sent();
@@ -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;
450
+ }).user;
451
451
  return [4 /*yield*/, screen.findByText(/loading pdf/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;
481
+ }).user;
482
482
  return [4 /*yield*/, screen.findByText(/loading pdf/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;
519
+ }).user;
520
520
  return [4 /*yield*/, screen.findByText(/loading pdf/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;
548
+ }).user;
549
549
  return [4 /*yield*/, screen.findByText(/loading pdf/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;
578
+ }).user;
579
579
  return [4 /*yield*/, screen.findByText(/loading pdf/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;
611
+ }).user;
612
612
  return [4 /*yield*/, screen.findByText(/loading pdf/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;
643
+ }).user;
644
644
  return [4 /*yield*/, screen.findByText(/loading pdf/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;
677
+ }).user;
679
678
  return [4 /*yield*/, screen.findByText(/loading pdf/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,266 @@ 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, ref;
714
+ return __generator(this, function (_a) {
715
+ switch (_a.label) {
716
+ case 0:
717
+ onClose = jest.fn();
718
+ ref = React.createRef();
719
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
720
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
721
+ });
722
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
723
+ case 1:
724
+ _a.sent();
725
+ // eslint-disable-next-line testing-library/no-node-access
726
+ expect(document.querySelector('canvas')).toBeVisible();
727
+ expect(screen.getByText(/page/i)).toBeVisible();
728
+ expect(screen.getByRole('textbox', { name: /current page/i })).toBeVisible();
729
+ // mock pdf has 4 pages
730
+ expect(screen.getByText('4')).toBeVisible();
731
+ return [2 /*return*/];
732
+ }
733
+ });
734
+ }); });
735
+ test('blur is a confirmation event on page input', function () { return __awaiter(void 0, void 0, void 0, function () {
736
+ var onClose, ref, user, pageInput;
737
+ return __generator(this, function (_a) {
738
+ switch (_a.label) {
739
+ case 0:
740
+ onClose = jest.fn();
741
+ ref = React.createRef();
742
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
743
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
744
+ }).user;
745
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
746
+ case 1:
747
+ _a.sent();
748
+ // eslint-disable-next-line testing-library/no-node-access
749
+ expect(document.querySelector('canvas')).toBeVisible();
750
+ expect(screen.getByText(/page/i)).toBeVisible();
751
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
752
+ expect(pageInput).toHaveDisplayValue('1');
753
+ return [4 /*yield*/, user.clear(pageInput)];
754
+ case 2:
755
+ _a.sent();
756
+ return [4 /*yield*/, user.type(pageInput, '2')];
757
+ case 3:
758
+ _a.sent();
759
+ return [4 /*yield*/, user.tab()];
760
+ case 4:
761
+ _a.sent();
762
+ expect(pageInput).not.toHaveFocus();
763
+ expect(pageInput).toHaveDisplayValue('2');
764
+ return [2 /*return*/];
765
+ }
766
+ });
767
+ }); });
768
+ test('enter key is a confirmation event on page input', function () { return __awaiter(void 0, void 0, void 0, function () {
769
+ var onClose, ref, user, pageInput;
770
+ return __generator(this, function (_a) {
771
+ switch (_a.label) {
772
+ case 0:
773
+ onClose = jest.fn();
774
+ ref = React.createRef();
775
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
776
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
777
+ }).user;
778
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
779
+ case 1:
780
+ _a.sent();
781
+ // eslint-disable-next-line testing-library/no-node-access
782
+ expect(document.querySelector('canvas')).toBeVisible();
783
+ expect(screen.getByText(/page/i)).toBeVisible();
784
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
785
+ expect(pageInput).toHaveDisplayValue('1');
786
+ return [4 /*yield*/, user.clear(pageInput)];
787
+ case 2:
788
+ _a.sent();
789
+ return [4 /*yield*/, user.type(pageInput, '2')];
790
+ case 3:
791
+ _a.sent();
792
+ return [4 /*yield*/, user.type(pageInput, '{Enter}')];
793
+ case 4:
794
+ _a.sent();
795
+ expect(pageInput).not.toHaveFocus();
796
+ expect(pageInput).toHaveDisplayValue('2');
797
+ return [2 /*return*/];
798
+ }
799
+ });
800
+ }); });
801
+ 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 () {
802
+ var onClose, ref, scrollIntoViewFn, user, pageInput;
803
+ return __generator(this, function (_a) {
804
+ switch (_a.label) {
805
+ case 0:
806
+ onClose = jest.fn();
807
+ ref = React.createRef();
808
+ scrollIntoViewFn = jest.fn();
809
+ window.HTMLElement.prototype.scrollIntoView = scrollIntoViewFn;
810
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
811
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
812
+ }).user;
813
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
814
+ case 1:
815
+ _a.sent();
816
+ // eslint-disable-next-line testing-library/no-node-access
817
+ expect(document.querySelector('canvas')).toBeVisible();
818
+ expect(screen.getByText(/page/i)).toBeVisible();
819
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
820
+ expect(pageInput).toHaveDisplayValue('1');
821
+ return [4 /*yield*/, user.clear(pageInput)];
822
+ case 2:
823
+ _a.sent();
824
+ return [4 /*yield*/, user.type(pageInput, '2')];
825
+ case 3:
826
+ _a.sent();
827
+ return [4 /*yield*/, user.click(screen.getByText(/page/i))];
828
+ case 4:
829
+ _a.sent();
830
+ expect(pageInput).not.toHaveFocus();
831
+ expect(pageInput).toHaveDisplayValue('2');
832
+ expect(scrollIntoViewFn).toHaveBeenCalledTimes(1);
833
+ expect(scrollIntoViewFn.mock.instances[0]).toHaveAttribute('data-page-number', '2');
834
+ return [2 /*return*/];
835
+ }
836
+ });
837
+ }); });
838
+ 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 () {
839
+ var onClose, ref, scrollIntoViewFn, user, pageInput;
840
+ return __generator(this, function (_a) {
841
+ switch (_a.label) {
842
+ case 0:
843
+ onClose = jest.fn();
844
+ ref = React.createRef();
845
+ scrollIntoViewFn = jest.fn();
846
+ window.HTMLElement.prototype.scrollIntoView = scrollIntoViewFn;
847
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
848
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
849
+ }).user;
850
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
851
+ case 1:
852
+ _a.sent();
853
+ // eslint-disable-next-line testing-library/no-node-access
854
+ expect(document.querySelector('canvas')).toBeVisible();
855
+ expect(screen.getByText(/page/i)).toBeVisible();
856
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
857
+ expect(pageInput).toHaveDisplayValue('1');
858
+ return [4 /*yield*/, user.clear(pageInput)];
859
+ case 2:
860
+ _a.sent();
861
+ return [4 /*yield*/, user.type(pageInput, 'invalid')];
862
+ case 3:
863
+ _a.sent();
864
+ return [4 /*yield*/, user.click(screen.getByText(/page/i))];
865
+ case 4:
866
+ _a.sent();
867
+ expect(pageInput).not.toHaveFocus();
868
+ expect(pageInput).toHaveDisplayValue('1');
869
+ expect(scrollIntoViewFn).not.toHaveBeenCalled();
870
+ return [2 /*return*/];
871
+ }
872
+ });
873
+ }); });
874
+ 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 () {
875
+ var onClose, ref, pageInput, page2Element;
876
+ return __generator(this, function (_a) {
877
+ switch (_a.label) {
878
+ case 0:
879
+ onClose = jest.fn();
880
+ ref = React.createRef();
881
+ setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
882
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
883
+ });
884
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
885
+ case 1:
886
+ _a.sent();
887
+ // eslint-disable-next-line testing-library/no-node-access
888
+ expect(document.querySelector('canvas')).toBeVisible();
889
+ expect(screen.getByText(/page/i)).toBeVisible();
890
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
891
+ expect(pageInput).toHaveDisplayValue('1');
892
+ page2Element = document.querySelector('[data-page-number="2"]');
893
+ expect(page2Element).not.toBeNull();
894
+ return [4 /*yield*/, triggerObserver(page2Element)];
895
+ case 2:
896
+ _a.sent();
897
+ expect(pageInput).toHaveDisplayValue('2');
898
+ return [2 /*return*/];
899
+ }
900
+ });
901
+ }); });
902
+ test('on scroll, if focus is on input, value is updated with current page', function () { return __awaiter(void 0, void 0, void 0, function () {
903
+ var onClose, ref, user, pageInput, page2Element;
904
+ return __generator(this, function (_a) {
905
+ switch (_a.label) {
906
+ case 0:
907
+ onClose = jest.fn();
908
+ ref = React.createRef();
909
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
910
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
911
+ }).user;
912
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
913
+ case 1:
914
+ _a.sent();
915
+ // eslint-disable-next-line testing-library/no-node-access
916
+ expect(document.querySelector('canvas')).toBeVisible();
917
+ expect(screen.getByText(/page/i)).toBeVisible();
918
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
919
+ expect(pageInput).toHaveDisplayValue('1');
920
+ return [4 /*yield*/, user.clear(pageInput)];
921
+ case 2:
922
+ _a.sent();
923
+ return [4 /*yield*/, user.type(pageInput, '4')];
924
+ case 3:
925
+ _a.sent();
926
+ expect(pageInput).toHaveFocus();
927
+ page2Element = document.querySelector('[data-page-number="2"]');
928
+ expect(page2Element).not.toBeNull();
929
+ return [4 /*yield*/, triggerObserver(page2Element)];
930
+ case 4:
931
+ _a.sent();
932
+ expect(pageInput).toHaveDisplayValue('2');
933
+ expect(pageInput).toHaveFocus();
934
+ return [2 /*return*/];
935
+ }
936
+ });
937
+ }); });
938
+ test('esc key makes user exit from the preview, even when focus is on input', function () { return __awaiter(void 0, void 0, void 0, function () {
939
+ var onClose, ref, user, pageInput;
940
+ return __generator(this, function (_a) {
941
+ switch (_a.label) {
942
+ case 0:
943
+ onClose = jest.fn();
944
+ ref = React.createRef();
945
+ user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
946
+ setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
947
+ }).user;
948
+ return [4 /*yield*/, screen.findByText(/loading pdf/i)];
949
+ case 1:
950
+ _a.sent();
951
+ // eslint-disable-next-line testing-library/no-node-access
952
+ expect(document.querySelector('canvas')).toBeVisible();
953
+ expect(screen.getByText(/page/i)).toBeVisible();
954
+ pageInput = screen.getByRole('textbox', { name: /current page/i });
955
+ expect(pageInput).toHaveDisplayValue('1');
956
+ return [4 /*yield*/, user.clear(pageInput)];
957
+ case 2:
958
+ _a.sent();
959
+ return [4 /*yield*/, user.type(pageInput, '4')];
960
+ case 3:
961
+ _a.sent();
962
+ expect(pageInput).toHaveFocus();
963
+ return [4 /*yield*/, user.keyboard('{Escape}')];
964
+ case 4:
965
+ _a.sent();
966
+ expect(onClose).toHaveBeenCalled();
967
+ return [2 /*return*/];
968
+ }
969
+ });
970
+ }); });
971
+ });
712
972
  });
713
973
  //# sourceMappingURL=PdfPreview.test.js.map