cozy-viewer 9.0.2 → 9.1.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 (39) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/Panel/PanelContent.js +5 -2
  3. package/dist/Panel/Qualification.js +6 -1
  4. package/dist/Panel/QualificationListItemContact.d.ts +3 -1
  5. package/dist/Panel/QualificationListItemContact.js +18 -4
  6. package/dist/Panel/QualificationListItemDate.js +17 -3
  7. package/dist/Panel/QualificationListItemInformation.js +17 -3
  8. package/dist/Panel/QualificationListItemOther.js +20 -4
  9. package/dist/Panel/QualificationListItemQualification.d.ts +2 -1
  10. package/dist/Panel/QualificationListItemQualification.js +4 -3
  11. package/dist/Panel/QualificationListItemQualificationEmpty.js +8 -4
  12. package/dist/Panel/Summary.js +18 -9
  13. package/dist/Panel/getPanelBlocks.js +4 -4
  14. package/dist/Panel/helpers.d.ts +1 -1
  15. package/dist/Panel/helpers.js +3 -2
  16. package/dist/ViewerContainer.js +55 -7
  17. package/dist/ViewerInformationsWrapper.d.ts +3 -1
  18. package/dist/ViewerInformationsWrapper.js +4 -1
  19. package/dist/ViewersByFile/BlankPaperViewer.js +5 -32
  20. package/dist/components/IntentOpener.d.ts +18 -0
  21. package/dist/components/IntentOpener.js +67 -0
  22. package/package.json +3 -3
  23. package/src/Panel/PanelContent.jsx +4 -3
  24. package/src/Panel/Qualification.jsx +5 -1
  25. package/src/Panel/QualificationListItemContact.jsx +31 -19
  26. package/src/Panel/QualificationListItemDate.jsx +59 -42
  27. package/src/Panel/QualificationListItemInformation.jsx +41 -24
  28. package/src/Panel/QualificationListItemInformation.spec.jsx +12 -11
  29. package/src/Panel/QualificationListItemOther.jsx +42 -24
  30. package/src/Panel/QualificationListItemQualification.jsx +4 -4
  31. package/src/Panel/QualificationListItemQualificationEmpty.jsx +16 -5
  32. package/src/Panel/Summary.jsx +10 -6
  33. package/src/Panel/getPanelBlocks.jsx +4 -4
  34. package/src/Panel/getPanelBlocks.spec.jsx +2 -2
  35. package/src/Panel/helpers.js +3 -1
  36. package/src/ViewerContainer.jsx +19 -1
  37. package/src/ViewerInformationsWrapper.jsx +7 -1
  38. package/src/ViewersByFile/BlankPaperViewer.jsx +5 -17
  39. package/src/components/IntentOpener.jsx +44 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,21 @@
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
+ # [9.1.0](https://github.com/cozy/cozy-libs/compare/cozy-viewer@9.0.2...cozy-viewer@9.1.0) (2024-12-18)
7
+
8
+
9
+ ### Features
10
+
11
+ * **Viewer:** Add isReadOnly props on ViewerContainer ([01fefc2](https://github.com/cozy/cozy-libs/commit/01fefc25bf87a29a9d5ac1872b1cd104f599166c))
12
+ * **Viewer:** Create IntentOpener to share props ([03923ad](https://github.com/cozy/cozy-libs/commit/03923adf41b49b8b3b67300ff0901f0a741089b6))
13
+ * **Viewer:** Move Summary block below Qualification block ([b3d9b26](https://github.com/cozy/cozy-libs/commit/b3d9b262eabace3642446d3c483c5f4081fbf8b7))
14
+ * **Viewer:** Remove click/edit action if isReadOnly ([4b9f832](https://github.com/cozy/cozy-libs/commit/4b9f832e337bf7e41cd0a80938b178b2f390de21))
15
+ * **Viewer:** Use intent to edit metadata qualification ([ec65534](https://github.com/cozy/cozy-libs/commit/ec65534c47e15c7aff350fc9e473567b5d9cfca7))
16
+
17
+
18
+
19
+
20
+
6
21
  ## [9.0.2](https://github.com/cozy/cozy-libs/compare/cozy-viewer@9.0.1...cozy-viewer@9.0.2) (2024-12-16)
7
22
 
8
23
 
@@ -30,6 +30,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
30
30
  var PanelContent = function PanelContent(_ref) {
31
31
  var file = _ref.file,
32
32
  isPublic = _ref.isPublic,
33
+ isReadOnly = _ref.isReadOnly,
33
34
  t = _ref.t;
34
35
  var panelBlocks = (0, _getPanelBlocks.default)({
35
36
  panelBlocksSpecs: (0, _getPanelBlocks.getPanelBlocksSpecs)(isPublic),
@@ -54,14 +55,16 @@ var PanelContent = function PanelContent(_ref) {
54
55
  square: true
55
56
  }, /*#__PURE__*/_react.default.createElement(PanelBlock, {
56
57
  file: file,
57
- isPublic: isPublic
58
+ isPublic: isPublic,
59
+ isReadOnly: isReadOnly
58
60
  }));
59
61
  }));
60
62
  };
61
63
 
62
64
  PanelContent.propTypes = {
63
65
  file: _propTypes.default.object.isRequired,
64
- isPublic: _propTypes.default.bool
66
+ isPublic: _propTypes.default.bool,
67
+ isReadOnly: _propTypes.default.bool
65
68
  };
66
69
 
67
70
  var _default = exports.default = (0, _withViewerLocales.withViewerLocales)(PanelContent);
@@ -56,7 +56,8 @@ var ComponentFromMetadataQualificationType = {
56
56
  };
57
57
 
58
58
  var Qualification = function Qualification(_ref) {
59
- var file = _ref.file;
59
+ var file = _ref.file,
60
+ isReadOnly = _ref.isReadOnly;
60
61
  var _file$metadata = file.metadata,
61
62
  metadata = _file$metadata === void 0 ? {} : _file$metadata;
62
63
  var actionBtnRef = (0, _react.useRef)([]);
@@ -112,10 +113,13 @@ var Qualification = function Qualification(_ref) {
112
113
  file: file
113
114
  }), (0, _file.hasQualifications)(file) ? /*#__PURE__*/_react.default.createElement(_QualificationListItemQualification.default, {
114
115
  file: file,
116
+ isReadOnly: isReadOnly,
115
117
  onClick: function onClick() {
116
118
  return setShowQualifModal(true);
117
119
  }
118
120
  }) : /*#__PURE__*/_react.default.createElement(_QualificationListItemQualificationEmpty.default, {
121
+ file: file,
122
+ isReadOnly: isReadOnly,
119
123
  onClick: function onClick() {
120
124
  return setShowQualifModal(true);
121
125
  }
@@ -133,6 +137,7 @@ var Qualification = function Qualification(_ref) {
133
137
  key: idx
134
138
  }, /*#__PURE__*/_react.default.createElement(QualificationListItemComp, {
135
139
  file: file,
140
+ isReadOnly: isReadOnly,
136
141
  ref: actionBtnRef.current[idx],
137
142
  formattedMetadataQualification: meta,
138
143
  toggleActionsMenu: function toggleActionsMenu(val) {
@@ -1,10 +1,12 @@
1
1
  export default QualificationListItemContact;
2
- declare function QualificationListItemContact({ file }: {
2
+ declare function QualificationListItemContact({ file, isReadOnly }: {
3
3
  file: any;
4
+ isReadOnly: any;
4
5
  }): JSX.Element | null;
5
6
  declare namespace QualificationListItemContact {
6
7
  namespace propTypes {
7
8
  const file: PropTypes.Validator<object>;
9
+ const isReadOnly: PropTypes.Requireable<boolean>;
8
10
  }
9
11
  }
10
12
  import PropTypes from "prop-types";
@@ -37,6 +37,8 @@ var _ActionMenuWrapper = _interopRequireDefault(require("./ActionMenuWrapper"));
37
37
 
38
38
  var _QualificationListItemText = _interopRequireDefault(require("./QualificationListItemText"));
39
39
 
40
+ var _IntentOpener = _interopRequireDefault(require("../components/IntentOpener"));
41
+
40
42
  var _useReferencedContactName = _interopRequireDefault(require("../hooks/useReferencedContactName"));
41
43
 
42
44
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -44,7 +46,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
44
46
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
47
 
46
48
  var QualificationListItemContact = function QualificationListItemContact(_ref) {
47
- var file = _ref.file;
49
+ var file = _ref.file,
50
+ isReadOnly = _ref.isReadOnly;
48
51
 
49
52
  var _useI18n = (0, _I18n.useI18n)(),
50
53
  lang = _useI18n.lang;
@@ -78,6 +81,7 @@ var QualificationListItemContact = function QualificationListItemContact(_ref) {
78
81
  var formattedTitle = (0, _paper.getTranslatedNameForContact)({
79
82
  lang: lang
80
83
  });
84
+ var qualificationLabel = file.metadata.qualification.label;
81
85
 
82
86
  var hideActionsMenu = function hideActionsMenu() {
83
87
  return setOptionFile({
@@ -99,7 +103,16 @@ var QualificationListItemContact = function QualificationListItemContact(_ref) {
99
103
  });
100
104
  };
101
105
 
102
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ListItem.default, null, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
106
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_IntentOpener.default, {
107
+ action: "OPEN",
108
+ doctype: "io.cozy.files.paper",
109
+ options: {
110
+ path: "".concat(qualificationLabel, "/").concat(file._id, "/edit/contact")
111
+ },
112
+ disabled: !!formattedValue || isReadOnly
113
+ }, /*#__PURE__*/_react.default.createElement(_ListItem.default, {
114
+ button: !formattedValue && !isReadOnly
115
+ }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
103
116
  icon: _People.default
104
117
  })), /*#__PURE__*/_react.default.createElement(_QualificationListItemText.default, {
105
118
  primary: formattedTitle,
@@ -111,7 +124,7 @@ var QualificationListItemContact = function QualificationListItemContact(_ref) {
111
124
  }
112
125
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
113
126
  icon: _Dots.default
114
- })))), optionFile.value && /*#__PURE__*/_react.default.createElement(_ActionMenuWrapper.default, {
127
+ }))))), optionFile.value && /*#__PURE__*/_react.default.createElement(_ActionMenuWrapper.default, {
115
128
  onClose: hideActionsMenu,
116
129
  file: file,
117
130
  optionFile: optionFile,
@@ -120,7 +133,8 @@ var QualificationListItemContact = function QualificationListItemContact(_ref) {
120
133
  };
121
134
 
122
135
  QualificationListItemContact.propTypes = {
123
- file: _propTypes.default.object.isRequired
136
+ file: _propTypes.default.object.isRequired,
137
+ isReadOnly: _propTypes.default.bool
124
138
  };
125
139
 
126
140
  var _default = exports.default = QualificationListItemContact;
@@ -37,12 +37,15 @@ var _QualificationListItemText = _interopRequireDefault(require("./Qualification
37
37
 
38
38
  var _ExpirationAnnotation = _interopRequireDefault(require("../components/ExpirationAnnotation"));
39
39
 
40
+ var _IntentOpener = _interopRequireDefault(require("../components/IntentOpener"));
41
+
40
42
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
43
 
42
44
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
43
45
 
44
46
  var QualificationListItemDate = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
45
47
  var file = _ref.file,
48
+ isReadOnly = _ref.isReadOnly,
46
49
  formattedMetadataQualification = _ref.formattedMetadataQualification,
47
50
  toggleActionsMenu = _ref.toggleActionsMenu;
48
51
 
@@ -52,6 +55,7 @@ var QualificationListItemDate = /*#__PURE__*/(0, _react.forwardRef)(function (_r
52
55
 
53
56
  var name = formattedMetadataQualification.name,
54
57
  value = formattedMetadataQualification.value;
58
+ var qualificationLabel = file.metadata.qualification.label;
55
59
  var formattedTitle = (0, _paper.getTranslatedNameForDateMetadata)(name, {
56
60
  lang: lang
57
61
  });
@@ -60,7 +64,16 @@ var QualificationListItemDate = /*#__PURE__*/(0, _react.forwardRef)(function (_r
60
64
  lang: lang
61
65
  });
62
66
  var isExpirationDate = name === 'expirationDate';
63
- return /*#__PURE__*/_react.default.createElement(_ListItem.default, null, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
67
+ return /*#__PURE__*/_react.default.createElement(_IntentOpener.default, {
68
+ action: "OPEN",
69
+ doctype: "io.cozy.files.paper",
70
+ options: {
71
+ path: "".concat(qualificationLabel, "/").concat(file._id, "/edit/information?metadata=").concat(name)
72
+ },
73
+ disabled: !!value || isReadOnly
74
+ }, /*#__PURE__*/_react.default.createElement(_ListItem.default, {
75
+ button: !value && !isReadOnly
76
+ }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
64
77
  icon: _Calendar.default
65
78
  })), /*#__PURE__*/_react.default.createElement(_QualificationListItemText.default, {
66
79
  primary: value ? formattedTitle : undefined,
@@ -81,14 +94,15 @@ var QualificationListItemDate = /*#__PURE__*/(0, _react.forwardRef)(function (_r
81
94
  }
82
95
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
83
96
  icon: _Dots.default
84
- }))) : /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
97
+ }))) : !isReadOnly && /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
85
98
  icon: _Right.default,
86
99
  color: "var(--secondaryTextColor)"
87
- })));
100
+ }))));
88
101
  });
89
102
  QualificationListItemDate.displayName = 'QualificationListItemDate';
90
103
  QualificationListItemDate.propTypes = {
91
104
  file: _propTypes.default.object.isRequired,
105
+ isReadOnly: _propTypes.default.bool,
92
106
  formattedMetadataQualification: _propTypes.default.shape({
93
107
  name: _propTypes.default.string,
94
108
  value: _propTypes.default.string
@@ -43,6 +43,8 @@ var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
43
43
 
44
44
  var _QualificationListItemText = _interopRequireDefault(require("./QualificationListItemText"));
45
45
 
46
+ var _IntentOpener = _interopRequireDefault(require("../components/IntentOpener"));
47
+
46
48
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
47
49
 
48
50
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -58,6 +60,7 @@ var makeInformationMetadataIcon = function makeInformationMetadataIcon(name) {
58
60
  var QualificationListItemInformation = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
59
61
  var formattedMetadataQualification = _ref.formattedMetadataQualification,
60
62
  file = _ref.file,
63
+ isReadOnly = _ref.isReadOnly,
61
64
  toggleActionsMenu = _ref.toggleActionsMenu;
62
65
 
63
66
  var _useI18n = (0, _I18n.useI18n)(),
@@ -79,7 +82,16 @@ var QualificationListItemInformation = /*#__PURE__*/(0, _react.forwardRef)(funct
79
82
  var titleComponent = formattedTitle === name ? /*#__PURE__*/_react.default.createElement(_MidEllipsis.default, {
80
83
  text: name
81
84
  }) : formattedTitle;
82
- return /*#__PURE__*/_react.default.createElement(_ListItem.default, null, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
85
+ return /*#__PURE__*/_react.default.createElement(_IntentOpener.default, {
86
+ action: "OPEN",
87
+ doctype: "io.cozy.files.paper",
88
+ options: {
89
+ path: "".concat(qualificationLabel, "/").concat(file._id, "/edit/information?metadata=").concat(name)
90
+ },
91
+ disabled: !!value || isReadOnly
92
+ }, /*#__PURE__*/_react.default.createElement(_ListItem.default, {
93
+ button: !value && !isReadOnly
94
+ }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
83
95
  icon: InformationIcon
84
96
  })), /*#__PURE__*/_react.default.createElement(_QualificationListItemText.default, {
85
97
  primary: value ? titleComponent : undefined,
@@ -93,13 +105,15 @@ var QualificationListItemInformation = /*#__PURE__*/(0, _react.forwardRef)(funct
93
105
  "data-testid": "toggleActionsMenuBtn"
94
106
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
95
107
  icon: _Dots.default
96
- }))) : /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
108
+ }))) : !isReadOnly && /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
97
109
  icon: _Right.default,
98
110
  color: "var(--secondaryTextColor)"
99
- })));
111
+ }))));
100
112
  });
101
113
  QualificationListItemInformation.displayName = 'QualificationListItemNumber';
102
114
  QualificationListItemInformation.propTypes = {
115
+ file: _propTypes.default.object.isRequired,
116
+ isReadOnly: _propTypes.default.bool,
103
117
  formattedMetadataQualification: _propTypes.default.shape({
104
118
  name: _propTypes.default.string,
105
119
  value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])
@@ -35,12 +35,16 @@ var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
35
35
 
36
36
  var _QualificationListItemText = _interopRequireDefault(require("./QualificationListItemText"));
37
37
 
38
+ var _IntentOpener = _interopRequireDefault(require("../components/IntentOpener"));
39
+
38
40
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
41
 
40
42
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
43
 
42
44
  var QualificationListItemOther = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
43
- var formattedMetadataQualification = _ref.formattedMetadataQualification,
45
+ var file = _ref.file,
46
+ isReadOnly = _ref.isReadOnly,
47
+ formattedMetadataQualification = _ref.formattedMetadataQualification,
44
48
  toggleActionsMenu = _ref.toggleActionsMenu;
45
49
 
46
50
  var _useI18n = (0, _I18n.useI18n)(),
@@ -48,6 +52,7 @@ var QualificationListItemOther = /*#__PURE__*/(0, _react.forwardRef)(function (_
48
52
 
49
53
  var name = formattedMetadataQualification.name,
50
54
  value = formattedMetadataQualification.value;
55
+ var qualificationLabel = file.metadata.qualification.label;
51
56
  if (!value) return null;
52
57
  var formattedTitle = (0, _paper.getTranslatedNameForOtherMetadata)(name, {
53
58
  lang: lang
@@ -56,7 +61,16 @@ var QualificationListItemOther = /*#__PURE__*/(0, _react.forwardRef)(function (_
56
61
  lang: lang,
57
62
  name: name
58
63
  });
59
- return /*#__PURE__*/_react.default.createElement(_ListItem.default, null, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
64
+ return /*#__PURE__*/_react.default.createElement(_IntentOpener.default, {
65
+ action: "OPEN",
66
+ doctype: "io.cozy.files.paper",
67
+ options: {
68
+ path: "".concat(qualificationLabel, "/").concat(file._id, "/edit/information?metadata=").concat(name)
69
+ },
70
+ disabled: !!value || isReadOnly
71
+ }, /*#__PURE__*/_react.default.createElement(_ListItem.default, {
72
+ button: !value && !isReadOnly
73
+ }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
60
74
  icon: _File.default
61
75
  })), /*#__PURE__*/_react.default.createElement(_QualificationListItemText.default, {
62
76
  primary: value ? formattedTitle : undefined,
@@ -70,13 +84,15 @@ var QualificationListItemOther = /*#__PURE__*/(0, _react.forwardRef)(function (_
70
84
  }
71
85
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
72
86
  icon: _Dots.default
73
- }))) : /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
87
+ }))) : !isReadOnly && /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
74
88
  icon: _Right.default,
75
89
  color: "var(--secondaryTextColor)"
76
- })));
90
+ }))));
77
91
  });
78
92
  QualificationListItemOther.displayName = 'QualificationListItemOther';
79
93
  QualificationListItemOther.propTypes = {
94
+ file: _propTypes.default.object.isRequired,
95
+ isReadOnly: _propTypes.default.bool,
80
96
  formattedMetadataQualification: _propTypes.default.shape({
81
97
  name: _propTypes.default.string,
82
98
  value: _propTypes.default.string
@@ -1,6 +1,7 @@
1
1
  export default QualificationListItemQualification;
2
- declare function QualificationListItemQualification({ file, onClick }: {
2
+ declare function QualificationListItemQualification({ file, isReadOnly, onClick }: {
3
3
  file: any;
4
+ isReadOnly: any;
4
5
  onClick: any;
5
6
  }): JSX.Element;
6
7
  declare namespace QualificationListItemQualification {
@@ -33,6 +33,7 @@ var _helpers = require("./helpers");
33
33
 
34
34
  var QualificationListItemQualification = function QualificationListItemQualification(_ref) {
35
35
  var file = _ref.file,
36
+ isReadOnly = _ref.isReadOnly,
36
37
  onClick = _ref.onClick;
37
38
 
38
39
  var _useI18n = (0, _I18n.useI18n)(),
@@ -46,8 +47,8 @@ var QualificationListItemQualification = function QualificationListItemQualifica
46
47
  return /*#__PURE__*/_react.default.createElement(_ListItem.default, {
47
48
  size: "large",
48
49
  divider: true,
49
- button: (0, _helpers.canEditQualification)(file),
50
- onClick: (0, _helpers.canEditQualification)(file) ? onClick : undefined
50
+ button: (0, _helpers.canEditQualification)(file, isReadOnly),
51
+ onClick: (0, _helpers.canEditQualification)(file, isReadOnly) ? onClick : undefined
51
52
  }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_QualificationIconStack.default, {
52
53
  qualification: value
53
54
  })), /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
@@ -57,7 +58,7 @@ var QualificationListItemQualification = function QualificationListItemQualifica
57
58
  primaryTypographyProps: {
58
59
  variant: 'h6'
59
60
  }
60
- }), (0, _helpers.canEditQualification)(file) && /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
61
+ }), (0, _helpers.canEditQualification)(file, isReadOnly) && /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
61
62
  icon: _Right.default,
62
63
  color: "var(--secondaryTextColor)"
63
64
  })));
@@ -25,14 +25,18 @@ var _ListItemIcon = _interopRequireDefault(require("cozy-ui/transpiled/react/Lis
25
25
 
26
26
  var _ListItemText = _interopRequireDefault(require("cozy-ui/transpiled/react/ListItemText"));
27
27
 
28
+ var _helpers = require("./helpers");
29
+
28
30
  var _withViewerLocales = require("../hoc/withViewerLocales");
29
31
 
30
32
  var QualificationListItemQualificationEmpty = function QualificationListItemQualificationEmpty(_ref) {
31
- var t = _ref.t,
33
+ var file = _ref.file,
34
+ isReadOnly = _ref.isReadOnly,
35
+ t = _ref.t,
32
36
  onClick = _ref.onClick;
33
37
  return /*#__PURE__*/_react.default.createElement(_List.default, null, /*#__PURE__*/_react.default.createElement(_ListItem.default, {
34
- button: true,
35
- onClick: onClick
38
+ button: (0, _helpers.canEditQualification)(file, isReadOnly),
39
+ onClick: (0, _helpers.canEditQualification)(file, isReadOnly) ? onClick : undefined
36
40
  }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
37
41
  icon: _LabelOutlined.default
38
42
  })), /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
@@ -47,7 +51,7 @@ var QualificationListItemQualificationEmpty = function QualificationListItemQual
47
51
  },
48
52
  primary: t('Viewer.panel.qualification.empty.primary'),
49
53
  secondary: t('Viewer.panel.qualification.empty.secondary')
50
- }), /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
54
+ }), (0, _helpers.canEditQualification)(file, isReadOnly) && /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
51
55
  icon: _Right.default,
52
56
  color: "var(--secondaryTextColor)"
53
57
  }))));
@@ -59,6 +59,7 @@ var Summary = function Summary(_ref) {
59
59
  var _file$metadata;
60
60
 
61
61
  var file = _ref.file,
62
+ isReadOnly = _ref.isReadOnly,
62
63
  t = _ref.t;
63
64
 
64
65
  var _useState = (0, _react.useState)(false),
@@ -78,32 +79,40 @@ var Summary = function Summary(_ref) {
78
79
 
79
80
  var label = t('Viewer.panel.summary');
80
81
  var value = (_file$metadata = file.metadata) === null || _file$metadata === void 0 ? void 0 : _file$metadata.description;
81
- var actions = (0, _Actions.makeActions)([_Actions.copyToClipboard, _Actions.editAttribute]);
82
+ var actions = (0, _Actions.makeActions)([_Actions.copyToClipboard, !isReadOnly && _Actions.editAttribute]);
82
83
 
83
84
  var handleClick = /*#__PURE__*/function () {
84
85
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
85
86
  return _regenerator.default.wrap(function _callee$(_context) {
86
87
  while (1) switch (_context.prev = _context.next) {
87
88
  case 0:
89
+ if (!isReadOnly) {
90
+ _context.next = 2;
91
+ break;
92
+ }
93
+
94
+ return _context.abrupt("return");
95
+
96
+ case 2:
88
97
  if (!value) {
89
- _context.next = 5;
98
+ _context.next = 7;
90
99
  break;
91
100
  }
92
101
 
93
- _context.next = 3;
102
+ _context.next = 5;
94
103
  return (0, _Actions.copyToClipboard)().action(undefined, {
95
104
  showAlert: showAlert,
96
105
  copyValue: value
97
106
  });
98
107
 
99
- case 3:
100
- _context.next = 6;
108
+ case 5:
109
+ _context.next = 8;
101
110
  break;
102
111
 
103
- case 5:
112
+ case 7:
104
113
  setShowModal(true);
105
114
 
106
- case 6:
115
+ case 8:
107
116
  case "end":
108
117
  return _context.stop();
109
118
  }
@@ -116,7 +125,7 @@ var Summary = function Summary(_ref) {
116
125
  }();
117
126
 
118
127
  return /*#__PURE__*/_react.default.createElement(_List.default, null, /*#__PURE__*/_react.default.createElement(_ListItem.default, {
119
- button: true,
128
+ button: !isReadOnly,
120
129
  onClick: handleClick
121
130
  }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
122
131
  icon: _Text.default
@@ -136,7 +145,7 @@ var Summary = function Summary(_ref) {
136
145
  }
137
146
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
138
147
  icon: _Dots.default
139
- }))) : /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
148
+ }))) : !isReadOnly && /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
140
149
  icon: _Right.default,
141
150
  color: "var(--secondaryTextColor)"
142
151
  }))), showModal && /*#__PURE__*/_react.default.createElement(_SummaryDialog.default, {
@@ -37,17 +37,17 @@ var _Summary = _interopRequireDefault(require("./Summary"));
37
37
  var getPanelBlocksSpecs = exports.getPanelBlocksSpecs = function getPanelBlocksSpecs() {
38
38
  var isPublic = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
39
39
  return {
40
- summary: {
40
+ qualifications: {
41
41
  condition: function condition() {
42
42
  return true;
43
43
  },
44
- component: _Summary.default
44
+ component: _Qualification.default
45
45
  },
46
- qualifications: {
46
+ summary: {
47
47
  condition: function condition() {
48
48
  return true;
49
49
  },
50
- component: _Qualification.default
50
+ component: _Summary.default
51
51
  },
52
52
  konnector: {
53
53
  condition: function condition(file) {
@@ -81,4 +81,4 @@ export namespace metadataByQualificationLabel {
81
81
  }
82
82
  export function makeFormattedMetadataQualification(file: any): array;
83
83
  export function isExpirationAlertHidden(file: any): boolean;
84
- export function canEditQualification(file: any): boolean;
84
+ export function canEditQualification(file: any, isReadOnly: boolean): boolean;
@@ -200,10 +200,11 @@ var isExpirationAlertHidden = exports.isExpirationAlertHidden = function isExpir
200
200
  /**
201
201
  *
202
202
  * @param {import("cozy-client/types").IOCozyFile} file - io.cozy.file
203
+ * @param {boolean} isReadOnly - Is sharing read-only
203
204
  * @returns {boolean}
204
205
  */
205
206
 
206
207
 
207
- var canEditQualification = exports.canEditQualification = function canEditQualification(file) {
208
- return !(0, _file.isFromKonnector)(file);
208
+ var canEditQualification = exports.canEditQualification = function canEditQualification(file, isReadOnly) {
209
+ return !(0, _file.isFromKonnector)(file) && !isReadOnly;
209
210
  };
@@ -7,10 +7,16 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
10
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
13
 
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
+
12
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
17
 
18
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
+
14
20
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
21
 
16
22
  var _classnames = _interopRequireDefault(require("classnames"));
@@ -19,6 +25,10 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
19
25
 
20
26
  var _react = _interopRequireWildcard(require("react"));
21
27
 
28
+ var _cozyClient = require("cozy-client");
29
+
30
+ var _permission = require("cozy-client/dist/models/permission");
31
+
22
32
  var _Modal = _interopRequireDefault(require("cozy-ui/transpiled/react/Modal"));
23
33
 
24
34
  var _proptypes = require("cozy-ui/transpiled/react/proptypes");
@@ -76,6 +86,12 @@ var ViewerContainer = function ViewerContainer(props) {
76
86
  var _useBreakpoints = (0, _Breakpoints.default)(),
77
87
  isDesktop = _useBreakpoints.isDesktop;
78
88
 
89
+ var _useState = (0, _react.useState)(true),
90
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
91
+ isReadOnly = _useState2[0],
92
+ setIsReadOnly = _useState2[1];
93
+
94
+ var client = (0, _cozyClient.useClient)();
79
95
  (0, _I18n.useExtendI18n)(_locales.locales);
80
96
  var currentFile = files[currentIndex];
81
97
  var fileCount = files.length;
@@ -90,6 +106,37 @@ var ViewerContainer = function ViewerContainer(props) {
90
106
  }, componentsProps === null || componentsProps === void 0 ? void 0 : componentsProps.toolbarProps)
91
107
  });
92
108
 
109
+ (0, _react.useEffect)(function () {
110
+ var getIsReadOnly = /*#__PURE__*/function () {
111
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
112
+ var res;
113
+ return _regenerator.default.wrap(function _callee$(_context) {
114
+ while (1) switch (_context.prev = _context.next) {
115
+ case 0:
116
+ _context.next = 2;
117
+ return (0, _permission.isDocumentReadOnly)({
118
+ document: currentFile,
119
+ client: client
120
+ });
121
+
122
+ case 2:
123
+ res = _context.sent;
124
+ setIsReadOnly(res);
125
+
126
+ case 4:
127
+ case "end":
128
+ return _context.stop();
129
+ }
130
+ }, _callee);
131
+ }));
132
+
133
+ return function getIsReadOnly() {
134
+ return _ref.apply(this, arguments);
135
+ };
136
+ }();
137
+
138
+ getIsReadOnly();
139
+ }, [client, currentFile]);
93
140
  return /*#__PURE__*/_react.default.createElement(_Alert.default, null, /*#__PURE__*/_react.default.createElement(_ActionMenuProvider.ActionMenuProvider, {
94
141
  editPathByModelProps: editPathByModelProps
95
142
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -106,6 +153,7 @@ var ViewerContainer = function ViewerContainer(props) {
106
153
  toolbarRef: toolbarRef
107
154
  }), children)), /*#__PURE__*/_react.default.createElement(_ViewerInformationsWrapper.default, {
108
155
  isPublic: isPublic,
156
+ isReadOnly: isReadOnly,
109
157
  disableFooter: disableFooter,
110
158
  validForPanel: validForPanel,
111
159
  currentFile: currentFile,
@@ -174,19 +222,19 @@ ViewerContainer.defaultProps = {
174
222
  showNavigation: true
175
223
  };
176
224
 
177
- var ViewerContainerWrapper = function ViewerContainerWrapper(_ref) {
178
- var disableModal = _ref.disableModal,
179
- props = (0, _objectWithoutProperties2.default)(_ref, _excluded2);
225
+ var ViewerContainerWrapper = function ViewerContainerWrapper(_ref2) {
226
+ var disableModal = _ref2.disableModal,
227
+ props = (0, _objectWithoutProperties2.default)(_ref2, _excluded2);
180
228
 
181
229
  var _useCozyTheme = (0, _CozyTheme.useCozyTheme)(),
182
230
  type = _useCozyTheme.type,
183
231
  variant = _useCozyTheme.variant;
184
232
 
185
- var _ref2 = props.componentsProps || {},
186
- _ref2$modalProps = _ref2.modalProps,
187
- modalProps = _ref2$modalProps === void 0 ? {
233
+ var _ref3 = props.componentsProps || {},
234
+ _ref3$modalProps = _ref3.modalProps,
235
+ modalProps = _ref3$modalProps === void 0 ? {
188
236
  open: true
189
- } : _ref2$modalProps;
237
+ } : _ref3$modalProps;
190
238
 
191
239
  if (disableModal) {
192
240
  return /*#__PURE__*/_react.default.createElement(ViewerContainer, props);