cozy-viewer 13.0.2 → 13.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 (35) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/Footer/BottomSheetContent.d.ts +3 -1
  3. package/dist/Footer/BottomSheetContent.js +6 -3
  4. package/dist/Footer/FooterContent.d.ts +3 -1
  5. package/dist/Footer/FooterContent.js +5 -2
  6. package/dist/NoViewer/NoViewer.js +2 -0
  7. package/dist/Panel/ActionMenuWrapper.js +3 -1
  8. package/dist/Panel/Qualification.js +6 -4
  9. package/dist/Panel/QualificationListItemContact.js +2 -1
  10. package/dist/ViewerContainer.js +24 -5
  11. package/dist/ViewerInformationsWrapper.js +2 -1
  12. package/dist/ViewersByFile/AudioViewer.js +2 -0
  13. package/dist/ViewersByFile/BlankPaperViewer.js +2 -0
  14. package/dist/ViewersByFile/ImageViewer.js +2 -0
  15. package/dist/ViewersByFile/NoNetworkViewer.js +2 -0
  16. package/dist/ViewersByFile/PdfJsViewer.d.ts +10 -3
  17. package/dist/ViewersByFile/PdfJsViewer.js +120 -16
  18. package/dist/ViewersByFile/PdfMobileViewer.js +2 -0
  19. package/dist/ViewersByFile/TextViewer.js +2 -0
  20. package/dist/ViewersByFile/VideoViewer.js +2 -0
  21. package/dist/components/PdfToolbarButton.js +13 -7
  22. package/dist/components/ViewerControls.js +1 -1
  23. package/dist/stylesheet.css +18 -0
  24. package/package.json +3 -3
  25. package/src/Footer/BottomSheetContent.jsx +4 -3
  26. package/src/Footer/FooterContent.jsx +13 -2
  27. package/src/Panel/ActionMenuWrapper.jsx +45 -42
  28. package/src/Panel/Qualification.jsx +5 -4
  29. package/src/Panel/QualificationListItemContact.jsx +1 -0
  30. package/src/ViewerContainer.jsx +10 -5
  31. package/src/ViewerInformationsWrapper.jsx +1 -0
  32. package/src/ViewersByFile/PdfJsViewer.jsx +136 -19
  33. package/src/ViewersByFile/styles.styl +19 -0
  34. package/src/components/PdfToolbarButton.jsx +8 -6
  35. package/src/components/ViewerControls.jsx +1 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,44 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [13.2.0](https://github.com/cozy/cozy-libs/compare/cozy-viewer@13.1.0...cozy-viewer@13.2.0) (2025-01-15)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **viewer:** Remove horizontal scroolbar ([9b0c2c3](https://github.com/cozy/cozy-libs/commit/9b0c2c33c5d0f60a195342cf84b36ca6a2398085))
12
+
13
+
14
+ ### Features
15
+
16
+ * **viewer:** Add input for select current page ([7aa912e](https://github.com/cozy/cozy-libs/commit/7aa912e63df7b53341b11157ac2d9c7fe383f2fc))
17
+ * **viewer:** Auto hide toolbar buttons ([90e656a](https://github.com/cozy/cozy-libs/commit/90e656af5627ab627d2cad2d19a14b56b99a4e76))
18
+ * **viewer:** Increase display limit for all pages ([b4a1b4a](https://github.com/cozy/cozy-libs/commit/b4a1b4a62839a89666db3c81df7b98eec5f30afa))
19
+ * **viewer:** Replace old Viewer buttons ([ef2fbee](https://github.com/cozy/cozy-libs/commit/ef2fbee8a49bc6bbef7f7d7ded266beaf7c2470a))
20
+ * **viewer:** Update style of toolbar ([5f6008d](https://github.com/cozy/cozy-libs/commit/5f6008dba900fea754b45b403d39ab758553fa56))
21
+
22
+
23
+
24
+
25
+
26
+ # [13.1.0](https://github.com/cozy/cozy-libs/compare/cozy-viewer@13.0.2...cozy-viewer@13.1.0) (2025-01-13)
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * **Viewer:** Now hide edit option on mobile if read only ([ce2f287](https://github.com/cozy/cozy-libs/commit/ce2f287494a943547762d5f189a74d38554d9f05))
32
+ * **Viewer:** Now isReadOnly manage public and private share ([6e0aba3](https://github.com/cozy/cozy-libs/commit/6e0aba3abd9dee753656e9aef82ecb53931e14aa))
33
+ * **Viewer:** Now show edit option on qualification according to share ([73034bf](https://github.com/cozy/cozy-libs/commit/73034bf13bb18ba269aa70902902f214b31d87fb))
34
+
35
+
36
+ ### Features
37
+
38
+ * **Viewer:** Disable qualification modification on public ([f41540e](https://github.com/cozy/cozy-libs/commit/f41540ea791d31878dfa2325bca4cc7f867c010a))
39
+
40
+
41
+
42
+
43
+
6
44
  ## [13.0.2](https://github.com/cozy/cozy-libs/compare/cozy-viewer@13.0.1...cozy-viewer@13.0.2) (2025-01-13)
7
45
 
8
46
 
@@ -1,12 +1,14 @@
1
1
  export default BottomSheetContent;
2
- declare function BottomSheetContent({ file, isPublic }: {
2
+ declare function BottomSheetContent({ file, isPublic, isReadOnly }: {
3
3
  file: any;
4
4
  isPublic: any;
5
+ isReadOnly: any;
5
6
  }): JSX.Element[];
6
7
  declare namespace BottomSheetContent {
7
8
  namespace propTypes {
8
9
  const file: PropTypes.Validator<object>;
9
10
  const isPublic: PropTypes.Requireable<boolean>;
11
+ const isReadOnly: PropTypes.Requireable<boolean>;
10
12
  }
11
13
  }
12
14
  import PropTypes from "prop-types";
@@ -21,7 +21,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
21
21
 
22
22
  var BottomSheetContent = function BottomSheetContent(_ref) {
23
23
  var file = _ref.file,
24
- isPublic = _ref.isPublic;
24
+ isPublic = _ref.isPublic,
25
+ isReadOnly = _ref.isReadOnly;
25
26
  var panelBlocks = (0, _getPanelBlocks.default)({
26
27
  panelBlocksSpecs: (0, _getPanelBlocks.getPanelBlocksSpecs)(isPublic),
27
28
  file: file
@@ -33,14 +34,16 @@ var BottomSheetContent = function BottomSheetContent(_ref) {
33
34
  disableElevation: index === panelBlocks.length - 1
34
35
  }, /*#__PURE__*/_react.default.createElement(PanelBlock, {
35
36
  file: file,
36
- isPublic: isPublic
37
+ isPublic: isPublic,
38
+ isReadOnly: isReadOnly
37
39
  }));
38
40
  });
39
41
  };
40
42
 
41
43
  BottomSheetContent.propTypes = {
42
44
  file: _propTypes.default.object.isRequired,
43
- isPublic: _propTypes.default.bool
45
+ isPublic: _propTypes.default.bool,
46
+ isReadOnly: _propTypes.default.bool
44
47
  };
45
48
 
46
49
  var _default = exports.default = BottomSheetContent;
@@ -1,15 +1,17 @@
1
1
  export default FooterContent;
2
- declare function FooterContent({ file, toolbarRef, children, isPublic }: {
2
+ declare function FooterContent({ file, toolbarRef, children, isPublic, isReadOnly }: {
3
3
  file: any;
4
4
  toolbarRef: any;
5
5
  children: any;
6
6
  isPublic: any;
7
+ isReadOnly: any;
7
8
  }): JSX.Element;
8
9
  declare namespace FooterContent {
9
10
  namespace propTypes {
10
11
  const file: PropTypes.Validator<object>;
11
12
  const toolbarRef: PropTypes.Requireable<object>;
12
13
  const isPublic: PropTypes.Requireable<boolean>;
14
+ const isReadOnly: PropTypes.Requireable<boolean>;
13
15
  const children: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
14
16
  }
15
17
  }
@@ -61,7 +61,8 @@ var FooterContent = function FooterContent(_ref2) {
61
61
  var file = _ref2.file,
62
62
  toolbarRef = _ref2.toolbarRef,
63
63
  children = _ref2.children,
64
- isPublic = _ref2.isPublic;
64
+ isPublic = _ref2.isPublic,
65
+ isReadOnly = _ref2.isReadOnly;
65
66
  var styles = useStyles();
66
67
  var toolbarProps = (0, _react.useMemo)(function () {
67
68
  return {
@@ -90,7 +91,8 @@ var FooterContent = function FooterContent(_ref2) {
90
91
  FooterActionButtonsWithFile: FooterActionButtonsWithFile
91
92
  })), /*#__PURE__*/_react.default.createElement(_BottomSheetContent.default, {
92
93
  file: file,
93
- isPublic: isPublic
94
+ isPublic: isPublic,
95
+ isReadOnly: isReadOnly
94
96
  }));
95
97
  };
96
98
 
@@ -98,6 +100,7 @@ FooterContent.propTypes = {
98
100
  file: _propTypes.default.object.isRequired,
99
101
  toolbarRef: _propTypes.default.object,
100
102
  isPublic: _propTypes.default.bool,
103
+ isReadOnly: _propTypes.default.bool,
101
104
  children: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.arrayOf(_propTypes.default.node)])
102
105
  };
103
106
 
@@ -25,11 +25,13 @@ var styles = {
25
25
  "viewer-pdfviewer": "styles__viewer-pdfviewer___3MJPk",
26
26
  "viewer-textviewer": "styles__viewer-textviewer___1fl1c",
27
27
  "viewer-canceled": "styles__viewer-canceled___3KRBk",
28
+ "viewer-pdfviewer-input-page": "styles__viewer-pdfviewer-input-page___9HErK",
28
29
  "viewer-textviewer-content": "styles__viewer-textviewer-content___30dhP",
29
30
  "viewer-filename": "styles__viewer-filename___1-DIz",
30
31
  "viewer-pdfviewer-pdf": "styles__viewer-pdfviewer-pdf___3R4jL",
31
32
  "viewer-pdfviewer-page": "styles__viewer-pdfviewer-page___VvOF3",
32
33
  "viewer-pdfviewer-toolbar": "styles__viewer-pdfviewer-toolbar___2Eat3",
34
+ "viewer-pdfviewer-toolbar--hidden": "styles__viewer-pdfviewer-toolbar--hidden___3LBfu",
33
35
  "viewer-pdfMobile": "styles__viewer-pdfMobile___ym7we",
34
36
  "viewer-pdfMobile--image": "styles__viewer-pdfMobile--image___3_zsS"
35
37
  };
@@ -34,6 +34,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
34
34
  var ActionMenuWrapper = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
35
35
  var file = _ref.file,
36
36
  optionFile = _ref.optionFile,
37
+ isReadOnly = _ref.isReadOnly,
37
38
  onClose = _ref.onClose;
38
39
  var name = optionFile.name,
39
40
  value = optionFile.value;
@@ -47,7 +48,7 @@ var ActionMenuWrapper = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref)
47
48
  var _useAlert = (0, _Alert.useAlert)(),
48
49
  showAlert = _useAlert.showAlert;
49
50
 
50
- var isEditable = (0, _helpers.isEditableAttribute)(name, file);
51
+ var isEditable = (0, _helpers.isEditableAttribute)(name, file) && !isReadOnly;
51
52
  var editPath = "".concat(file.metadata.qualification.label, "/").concat(file._id, "/edit/information?metadata=").concat(optionFile.name);
52
53
 
53
54
  var handleCopy = /*#__PURE__*/function () {
@@ -134,6 +135,7 @@ ActionMenuWrapper.propTypes = {
134
135
  name: _propTypes.default.string,
135
136
  value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])
136
137
  }),
138
+ isReadOnly: _propTypes.default.bool,
137
139
  onClose: _propTypes.default.func
138
140
  };
139
141
 
@@ -59,6 +59,7 @@ var ComponentFromMetadataQualificationType = {
59
59
 
60
60
  var Qualification = function Qualification(_ref) {
61
61
  var file = _ref.file,
62
+ isPublic = _ref.isPublic,
62
63
  isReadOnly = _ref.isReadOnly;
63
64
  var _file$metadata = file.metadata,
64
65
  metadata = _file$metadata === void 0 ? {} : _file$metadata;
@@ -115,13 +116,13 @@ var Qualification = function Qualification(_ref) {
115
116
  file: file
116
117
  }), (0, _qualification.hasSupportedQualification)(file) ? /*#__PURE__*/_react.default.createElement(_QualificationListItemQualification.default, {
117
118
  file: file,
118
- isReadOnly: isReadOnly,
119
+ isReadOnly: isPublic ? true : isReadOnly,
119
120
  onClick: function onClick() {
120
121
  return setShowQualifModal(true);
121
122
  }
122
123
  }) : /*#__PURE__*/_react.default.createElement(_QualificationListItemQualificationEmpty.default, {
123
124
  file: file,
124
- isReadOnly: isReadOnly,
125
+ isReadOnly: isPublic ? true : isReadOnly,
125
126
  onClick: function onClick() {
126
127
  return setShowQualifModal(true);
127
128
  }
@@ -139,7 +140,7 @@ var Qualification = function Qualification(_ref) {
139
140
  key: idx
140
141
  }, /*#__PURE__*/_react.default.createElement(QualificationListItemComp, {
141
142
  file: file,
142
- isReadOnly: isReadOnly,
143
+ isReadOnly: isPublic ? true : isReadOnly,
143
144
  ref: actionBtnRef.current[idx],
144
145
  formattedMetadataQualification: meta,
145
146
  toggleActionsMenu: function toggleActionsMenu(val) {
@@ -153,7 +154,8 @@ var Qualification = function Qualification(_ref) {
153
154
  onClose: hideActionsMenu,
154
155
  file: file,
155
156
  optionFile: optionFile,
156
- ref: actionBtnRef.current[optionFile.id]
157
+ ref: actionBtnRef.current[optionFile.id],
158
+ isReadOnly: isPublic ? true : isReadOnly
157
159
  })));
158
160
  };
159
161
 
@@ -128,7 +128,8 @@ var QualificationListItemContact = function QualificationListItemContact(_ref) {
128
128
  onClose: hideActionsMenu,
129
129
  file: file,
130
130
  optionFile: optionFile,
131
- ref: actionBtnRef
131
+ ref: actionBtnRef,
132
+ isReadOnly: isReadOnly
132
133
  }));
133
134
  };
134
135
 
@@ -29,6 +29,8 @@ var _cozyClient = require("cozy-client");
29
29
 
30
30
  var _permission = require("cozy-client/dist/models/permission");
31
31
 
32
+ var _cozySharing = require("cozy-sharing");
33
+
32
34
  var _Modal = _interopRequireDefault(require("cozy-ui/transpiled/react/Modal"));
33
35
 
34
36
  var _proptypes = require("cozy-ui/transpiled/react/proptypes");
@@ -90,6 +92,10 @@ var ViewerContainer = function ViewerContainer(props) {
90
92
 
91
93
  var client = (0, _cozyClient.useClient)();
92
94
  (0, _I18n.useExtendI18n)(_locales.locales);
95
+
96
+ var _useSharingContext = (0, _cozySharing.useSharingContext)(),
97
+ hasWriteAccess = _useSharingContext.hasWriteAccess;
98
+
93
99
  var currentFile = files[currentIndex];
94
100
  var fileCount = files.length;
95
101
  var hasPrevious = currentIndex > 0;
@@ -110,17 +116,30 @@ var ViewerContainer = function ViewerContainer(props) {
110
116
  return _regenerator.default.wrap(function _callee$(_context) {
111
117
  while (1) switch (_context.prev = _context.next) {
112
118
  case 0:
113
- _context.next = 2;
119
+ if (!isPublic) {
120
+ _context.next = 6;
121
+ break;
122
+ }
123
+
124
+ _context.next = 3;
114
125
  return (0, _permission.isDocumentReadOnly)({
115
126
  document: currentFile,
116
127
  client: client
117
128
  });
118
129
 
119
- case 2:
120
- res = _context.sent;
130
+ case 3:
131
+ _context.t0 = _context.sent;
132
+ _context.next = 7;
133
+ break;
134
+
135
+ case 6:
136
+ _context.t0 = !hasWriteAccess(currentFile._id);
137
+
138
+ case 7:
139
+ res = _context.t0;
121
140
  setIsReadOnly(res);
122
141
 
123
- case 4:
142
+ case 9:
124
143
  case "end":
125
144
  return _context.stop();
126
145
  }
@@ -133,7 +152,7 @@ var ViewerContainer = function ViewerContainer(props) {
133
152
  }();
134
153
 
135
154
  getIsReadOnly();
136
- }, [client, currentFile]);
155
+ }, [client, currentFile, hasWriteAccess, isPublic]);
137
156
  return /*#__PURE__*/_react.default.createElement(_Alert.default, null, /*#__PURE__*/_react.default.createElement("div", {
138
157
  id: "viewer-wrapper",
139
158
  className: (0, _classnames.default)(styles['viewer-wrapper'], className)
@@ -50,7 +50,8 @@ var ViewerInformationsWrapper = function ViewerInformationsWrapper(_ref) {
50
50
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !disableFooter && /*#__PURE__*/_react.default.createElement(_Footer.default, null, /*#__PURE__*/_react.default.createElement(_FooterContent.default, {
51
51
  file: currentFile,
52
52
  toolbarRef: toolbarRef,
53
- isPublic: isPublic
53
+ isPublic: isPublic,
54
+ isReadOnly: isReadOnly
54
55
  }, children)), validForPanel && /*#__PURE__*/_react.default.createElement(_InformationPanel.default, null, /*#__PURE__*/_react.default.createElement(_PanelContent.default, {
55
56
  file: currentFile,
56
57
  isPublic: isPublic,
@@ -25,11 +25,13 @@ var styles = {
25
25
  "viewer-pdfviewer": "styles__viewer-pdfviewer___3MJPk",
26
26
  "viewer-textviewer": "styles__viewer-textviewer___1fl1c",
27
27
  "viewer-canceled": "styles__viewer-canceled___3KRBk",
28
+ "viewer-pdfviewer-input-page": "styles__viewer-pdfviewer-input-page___9HErK",
28
29
  "viewer-textviewer-content": "styles__viewer-textviewer-content___30dhP",
29
30
  "viewer-filename": "styles__viewer-filename___1-DIz",
30
31
  "viewer-pdfviewer-pdf": "styles__viewer-pdfviewer-pdf___3R4jL",
31
32
  "viewer-pdfviewer-page": "styles__viewer-pdfviewer-page___VvOF3",
32
33
  "viewer-pdfviewer-toolbar": "styles__viewer-pdfviewer-toolbar___2Eat3",
34
+ "viewer-pdfviewer-toolbar--hidden": "styles__viewer-pdfviewer-toolbar--hidden___3LBfu",
33
35
  "viewer-pdfMobile": "styles__viewer-pdfMobile___ym7we",
34
36
  "viewer-pdfMobile--image": "styles__viewer-pdfMobile--image___3_zsS"
35
37
  };
@@ -27,11 +27,13 @@ var styles = {
27
27
  "viewer-pdfviewer": "styles__viewer-pdfviewer___3MJPk",
28
28
  "viewer-textviewer": "styles__viewer-textviewer___1fl1c",
29
29
  "viewer-canceled": "styles__viewer-canceled___3KRBk",
30
+ "viewer-pdfviewer-input-page": "styles__viewer-pdfviewer-input-page___9HErK",
30
31
  "viewer-textviewer-content": "styles__viewer-textviewer-content___30dhP",
31
32
  "viewer-filename": "styles__viewer-filename___1-DIz",
32
33
  "viewer-pdfviewer-pdf": "styles__viewer-pdfviewer-pdf___3R4jL",
33
34
  "viewer-pdfviewer-page": "styles__viewer-pdfviewer-page___VvOF3",
34
35
  "viewer-pdfviewer-toolbar": "styles__viewer-pdfviewer-toolbar___2Eat3",
36
+ "viewer-pdfviewer-toolbar--hidden": "styles__viewer-pdfviewer-toolbar--hidden___3LBfu",
35
37
  "viewer-pdfMobile": "styles__viewer-pdfMobile___ym7we",
36
38
  "viewer-pdfMobile--image": "styles__viewer-pdfMobile--image___3_zsS"
37
39
  };
@@ -51,11 +51,13 @@ var styles = {
51
51
  "viewer-pdfviewer": "styles__viewer-pdfviewer___3MJPk",
52
52
  "viewer-textviewer": "styles__viewer-textviewer___1fl1c",
53
53
  "viewer-canceled": "styles__viewer-canceled___3KRBk",
54
+ "viewer-pdfviewer-input-page": "styles__viewer-pdfviewer-input-page___9HErK",
54
55
  "viewer-textviewer-content": "styles__viewer-textviewer-content___30dhP",
55
56
  "viewer-filename": "styles__viewer-filename___1-DIz",
56
57
  "viewer-pdfviewer-pdf": "styles__viewer-pdfviewer-pdf___3R4jL",
57
58
  "viewer-pdfviewer-page": "styles__viewer-pdfviewer-page___VvOF3",
58
59
  "viewer-pdfviewer-toolbar": "styles__viewer-pdfviewer-toolbar___2Eat3",
60
+ "viewer-pdfviewer-toolbar--hidden": "styles__viewer-pdfviewer-toolbar--hidden___3LBfu",
59
61
  "viewer-pdfMobile": "styles__viewer-pdfMobile___ym7we",
60
62
  "viewer-pdfMobile--image": "styles__viewer-pdfMobile--image___3_zsS"
61
63
  };
@@ -25,11 +25,13 @@ var styles = {
25
25
  "viewer-pdfviewer": "styles__viewer-pdfviewer___3MJPk",
26
26
  "viewer-textviewer": "styles__viewer-textviewer___1fl1c",
27
27
  "viewer-canceled": "styles__viewer-canceled___3KRBk",
28
+ "viewer-pdfviewer-input-page": "styles__viewer-pdfviewer-input-page___9HErK",
28
29
  "viewer-textviewer-content": "styles__viewer-textviewer-content___30dhP",
29
30
  "viewer-filename": "styles__viewer-filename___1-DIz",
30
31
  "viewer-pdfviewer-pdf": "styles__viewer-pdfviewer-pdf___3R4jL",
31
32
  "viewer-pdfviewer-page": "styles__viewer-pdfviewer-page___VvOF3",
32
33
  "viewer-pdfviewer-toolbar": "styles__viewer-pdfviewer-toolbar___2Eat3",
34
+ "viewer-pdfviewer-toolbar--hidden": "styles__viewer-pdfviewer-toolbar--hidden___3LBfu",
33
35
  "viewer-pdfMobile": "styles__viewer-pdfMobile___ym7we",
34
36
  "viewer-pdfMobile--image": "styles__viewer-pdfMobile--image___3_zsS"
35
37
  };
@@ -1,10 +1,13 @@
1
1
  export const MIN_SCALE: 0.25;
2
2
  export const MAX_SCALE: 3;
3
- export const MAX_PAGES: 3;
3
+ export const MAX_PAGES: 40;
4
+ export const MAX_SIZE_FILE: 10485760;
4
5
  export class PdfJsViewer extends React.Component<any, any, any> {
5
- constructor(props: Readonly<any>);
6
- constructor(props: any, context?: any);
6
+ constructor();
7
+ inputRef: React.RefObject<any>;
7
8
  resizeListener: import("lodash").DebouncedFunc<() => void> | undefined;
9
+ mouseMoveListener: import("lodash").DebouncedFunc<() => void> | undefined;
10
+ onMouseMove: () => void;
8
11
  onKeyUp: (e: any) => void;
9
12
  toggleGestures(enable: any): void;
10
13
  setWrapperSize: () => void;
@@ -16,6 +19,10 @@ export class PdfJsViewer extends React.Component<any, any, any> {
16
19
  previousPage: () => void;
17
20
  scaleUp: () => void;
18
21
  scaleDown: () => void;
22
+ handleInputPageChange: (evt: any) => void;
23
+ handleInputPageKeyDown: (evt: any) => void;
24
+ handleInputPageFocus: () => void;
25
+ handleInputPageBlur: () => void;
19
26
  wrapper: HTMLDivElement | null | undefined;
20
27
  }
21
28
  export namespace PdfJsViewer {
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.PdfJsViewer = exports.MIN_SCALE = exports.MAX_SCALE = exports.MAX_PAGES = void 0;
8
+ exports.default = exports.PdfJsViewer = exports.MIN_SCALE = exports.MAX_SIZE_FILE = exports.MAX_SCALE = exports.MAX_PAGES = void 0;
9
9
 
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
11
 
@@ -61,19 +61,32 @@ var styles = {
61
61
  "viewer-pdfviewer": "styles__viewer-pdfviewer___3MJPk",
62
62
  "viewer-textviewer": "styles__viewer-textviewer___1fl1c",
63
63
  "viewer-canceled": "styles__viewer-canceled___3KRBk",
64
+ "viewer-pdfviewer-input-page": "styles__viewer-pdfviewer-input-page___9HErK",
64
65
  "viewer-textviewer-content": "styles__viewer-textviewer-content___30dhP",
65
66
  "viewer-filename": "styles__viewer-filename___1-DIz",
66
67
  "viewer-pdfviewer-pdf": "styles__viewer-pdfviewer-pdf___3R4jL",
67
68
  "viewer-pdfviewer-page": "styles__viewer-pdfviewer-page___VvOF3",
68
69
  "viewer-pdfviewer-toolbar": "styles__viewer-pdfviewer-toolbar___2Eat3",
70
+ "viewer-pdfviewer-toolbar--hidden": "styles__viewer-pdfviewer-toolbar--hidden___3LBfu",
69
71
  "viewer-pdfMobile": "styles__viewer-pdfMobile___ym7we",
70
72
  "viewer-pdfMobile--image": "styles__viewer-pdfMobile--image___3_zsS"
71
73
  };
72
74
  var MIN_SCALE = exports.MIN_SCALE = 0.25;
73
75
  var MAX_SCALE = exports.MAX_SCALE = 3;
74
- var MAX_PAGES = exports.MAX_PAGES = 3;
76
+ var MAX_PAGES = exports.MAX_PAGES = 40;
77
+ var MAX_SIZE_FILE = exports.MAX_SIZE_FILE = 10485760; // 10MB
78
+
75
79
  var KEY_CODE_UP = 38;
76
80
  var KEY_CODE_DOWN = 40;
81
+ var OPACITY_DELAY = 1000;
82
+ var timeoutOpacity;
83
+
84
+ var makeInputPageStyle = function makeInputPageStyle(nbPages) {
85
+ var maxWidth = Math.max(1, String(Math.abs(nbPages)).length - 1);
86
+ return {
87
+ maxWidth: "".concat(maxWidth, ".5rem")
88
+ };
89
+ };
77
90
 
78
91
  var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
79
92
  (0, _inherits2.default)(PdfJsViewer, _Component);
@@ -84,23 +97,41 @@ var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
84
97
  var _this;
85
98
 
86
99
  (0, _classCallCheck2.default)(this, PdfJsViewer);
87
-
88
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
89
- args[_key] = arguments[_key];
90
- }
91
-
92
- _this = _super.call.apply(_super, [this].concat(args));
100
+ _this = _super.call(this);
93
101
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
94
102
  totalPages: 1,
95
103
  scale: 1,
96
104
  currentPage: 1,
105
+ inputPageValue: 1,
97
106
  loaded: false,
98
107
  errored: false,
99
108
  width: null,
100
- renderAllPages: false
109
+ renderAllPages: false,
110
+ toolbarDisplayed: true,
111
+ keepToolbarDisplayed: false,
112
+ isInputPageFocused: false
113
+ });
114
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onMouseMove", function () {
115
+ if (!_this.state.toolbarDisplayed) {
116
+ _this.setState({
117
+ toolbarDisplayed: true
118
+ });
119
+ }
120
+
121
+ if (timeoutOpacity) {
122
+ clearTimeout(timeoutOpacity);
123
+ }
124
+
125
+ timeoutOpacity = setTimeout(function () {
126
+ _this.setState({
127
+ toolbarDisplayed: false
128
+ });
129
+ }, OPACITY_DELAY);
101
130
  });
102
131
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onKeyUp", function (e) {
103
132
  if (e.keyCode === KEY_CODE_UP) _this.previousPage();else if (e.keyCode === KEY_CODE_DOWN) _this.nextPage();
133
+
134
+ _this.onMouseMove();
104
135
  });
105
136
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "setWrapperSize", function () {
106
137
  var width = _this.wrapper ? _this.wrapper.getBoundingClientRect().width : null;
@@ -114,7 +145,7 @@ var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
114
145
 
115
146
  _this.setState({
116
147
  totalPages: numPages,
117
- renderAllPages: numPages <= MAX_PAGES,
148
+ renderAllPages: numPages <= MAX_PAGES && parseInt(_this.props.file.size, 10) <= MAX_SIZE_FILE,
118
149
  loaded: true
119
150
  });
120
151
  });
@@ -128,15 +159,19 @@ var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
128
159
  });
129
160
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "nextPage", function () {
130
161
  _this.setState(function (state) {
162
+ var value = Math.min(state.currentPage + 1, state.totalPages);
131
163
  return {
132
- currentPage: Math.min(state.currentPage + 1, state.totalPages)
164
+ currentPage: value,
165
+ inputPageValue: value
133
166
  };
134
167
  });
135
168
  });
136
169
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "previousPage", function () {
137
170
  _this.setState(function (state) {
171
+ var value = Math.max(state.currentPage - 1, 1);
138
172
  return {
139
- currentPage: Math.max(state.currentPage - 1, 1)
173
+ currentPage: value,
174
+ inputPageValue: value
140
175
  };
141
176
  });
142
177
  });
@@ -160,6 +195,37 @@ var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
160
195
  };
161
196
  });
162
197
  });
198
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleInputPageChange", function (evt) {
199
+ var value = evt.target.value;
200
+
201
+ if (value === '' || value <= _this.state.totalPages && value > 0) {
202
+ _this.setState({
203
+ inputPageValue: value
204
+ });
205
+ }
206
+ });
207
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleInputPageKeyDown", function (evt) {
208
+ if (evt.keyCode === 13) {
209
+ _this.inputRef.current.blur();
210
+ }
211
+ });
212
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleInputPageFocus", function () {
213
+ _this.setState({
214
+ isInputPageFocused: true,
215
+ keepToolbarDisplayed: true
216
+ });
217
+ });
218
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleInputPageBlur", function () {
219
+ _this.setState(function (state) {
220
+ return {
221
+ keepToolbarDisplayed: false,
222
+ isInputPageFocused: false,
223
+ inputPageValue: state.inputPageValue ? state.inputPageValue : state.currentPage,
224
+ currentPage: state.inputPageValue ? parseInt(state.inputPageValue, 10) : state.currentPage
225
+ };
226
+ });
227
+ });
228
+ _this.inputRef = /*#__PURE__*/_react.default.createRef();
163
229
  return _this;
164
230
  }
165
231
 
@@ -168,14 +234,21 @@ var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
168
234
  value: function componentDidMount() {
169
235
  this.setWrapperSize();
170
236
  this.resizeListener = (0, _throttle.default)(this.setWrapperSize, 500);
237
+ this.mouseMoveListener = (0, _throttle.default)(this.onMouseMove, OPACITY_DELAY / 2);
171
238
  window.addEventListener('resize', this.resizeListener);
239
+ document.addEventListener('mousemove', this.mouseMoveListener);
172
240
  document.addEventListener('keyup', this.onKeyUp, false);
173
241
  }
174
242
  }, {
175
243
  key: "componentWillUnmount",
176
244
  value: function componentWillUnmount() {
177
245
  window.removeEventListener('resize', this.resizeListener);
246
+ document.removeEventListener('mousemove', this.mouseMoveListener);
178
247
  document.removeEventListener('keyup', this.onKeyUp, false);
248
+
249
+ if (timeoutOpacity) {
250
+ clearTimeout(timeoutOpacity);
251
+ }
179
252
  }
180
253
  }, {
181
254
  key: "toggleGestures",
@@ -203,15 +276,20 @@ var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
203
276
  errored = _this$state.errored,
204
277
  totalPages = _this$state.totalPages,
205
278
  currentPage = _this$state.currentPage,
279
+ inputPageValue = _this$state.inputPageValue,
206
280
  scale = _this$state.scale,
207
281
  width = _this$state.width,
208
- renderAllPages = _this$state.renderAllPages;
282
+ renderAllPages = _this$state.renderAllPages,
283
+ toolbarDisplayed = _this$state.toolbarDisplayed,
284
+ keepToolbarDisplayed = _this$state.keepToolbarDisplayed,
285
+ isInputPageFocused = _this$state.isInputPageFocused;
209
286
  if (errored) return /*#__PURE__*/_react.default.createElement(_NoViewer.default, {
210
287
  file: file,
211
288
  renderFallbackExtraContent: renderFallbackExtraContent
212
289
  });
213
- var pageWidth = width ? width * scale : null; // newer versions of react-pdf do that automatically
290
+ var pageWidth = width && totalPages > 1 ? width - 15 : width; // Remove the scrollbar width to avoid a horizontal scrollbar
214
291
 
292
+ var pageInputValue = inputPageValue || inputPageValue === '' ? inputPageValue : currentPage.toString();
215
293
  return /*#__PURE__*/_react.default.createElement("div", {
216
294
  className: styles['viewer-pdfviewer'],
217
295
  ref: function ref(_ref2) {
@@ -229,16 +307,28 @@ var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
229
307
  key: page,
230
308
  pageNumber: page + 1,
231
309
  width: pageWidth,
310
+ scale: scale,
232
311
  renderAnnotations: false,
233
312
  className: (0, _classnames.default)('u-mv-1', styles['viewer-pdfviewer-page'])
234
313
  });
235
314
  }) : /*#__PURE__*/_react.default.createElement(_reactPdf.Page, {
236
315
  pageNumber: currentPage,
237
316
  width: pageWidth,
317
+ scale: scale,
238
318
  renderAnnotations: false,
239
319
  className: styles['viewer-pdfviewer-page']
240
320
  })), loaded && /*#__PURE__*/_react.default.createElement("div", {
241
- className: (0, _classnames.default)(styles['viewer-pdfviewer-toolbar'], 'u-p-half')
321
+ className: (0, _classnames.default)(styles['viewer-pdfviewer-toolbar'], 'u-p-half', (0, _defineProperty2.default)({}, styles['viewer-pdfviewer-toolbar--hidden'], !toolbarDisplayed && !keepToolbarDisplayed)),
322
+ onMouseEnter: function onMouseEnter() {
323
+ return !isInputPageFocused && _this2.setState({
324
+ keepToolbarDisplayed: true
325
+ });
326
+ },
327
+ onMouseLeave: function onMouseLeave() {
328
+ return !isInputPageFocused && _this2.setState({
329
+ keepToolbarDisplayed: false
330
+ });
331
+ }
242
332
  }, !renderAllPages && /*#__PURE__*/_react.default.createElement("span", {
243
333
  className: "u-mh-half"
244
334
  }, /*#__PURE__*/_react.default.createElement(_PdfToolbarButton.default, {
@@ -246,7 +336,21 @@ var PdfJsViewer = exports.PdfJsViewer = /*#__PURE__*/function (_Component) {
246
336
  onClick: this.previousPage,
247
337
  disabled: currentPage === 1,
248
338
  label: t('Viewer.previous')
249
- }), currentPage, "/", totalPages, /*#__PURE__*/_react.default.createElement(_PdfToolbarButton.default, {
339
+ }), /*#__PURE__*/_react.default.createElement("label", {
340
+ htmlFor: "input-page"
341
+ }, /*#__PURE__*/_react.default.createElement("input", {
342
+ ref: this.inputRef,
343
+ id: "input-page",
344
+ className: styles['viewer-pdfviewer-input-page'],
345
+ type: "text",
346
+ inputMode: "numeric",
347
+ style: makeInputPageStyle(totalPages),
348
+ value: pageInputValue,
349
+ onChange: this.handleInputPageChange,
350
+ onKeyDown: this.handleInputPageKeyDown,
351
+ onFocus: this.handleInputPageFocus,
352
+ onBlur: this.handleInputPageBlur
353
+ }), "/", totalPages), /*#__PURE__*/_react.default.createElement(_PdfToolbarButton.default, {
250
354
  icon: "bottom",
251
355
  onClick: this.nextPage,
252
356
  disabled: currentPage === totalPages,