@dhis2/analytics 25.2.1 → 25.2.3

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 (58) hide show
  1. package/CHANGELOG.md +4072 -0
  2. package/build/cjs/__demo__/FileMenu.stories.js +6 -8
  3. package/build/cjs/components/FileMenu/FileMenu.js +59 -21
  4. package/build/cjs/components/FileMenu/__tests__/FileMenu.spec.js +194 -318
  5. package/build/cjs/components/Options/VisualizationOptions.js +1 -3
  6. package/build/cjs/index.js +46 -304
  7. package/build/cjs/locales/en/translations.json +0 -1
  8. package/build/cjs/modules/ouLevelUtils/index.js +5 -3
  9. package/build/es/__demo__/FileMenu.stories.js +6 -7
  10. package/build/es/components/FileMenu/FileMenu.js +57 -20
  11. package/build/es/components/FileMenu/__tests__/FileMenu.spec.js +189 -293
  12. package/build/es/components/Options/VisualizationOptions.js +1 -3
  13. package/build/es/index.js +0 -1
  14. package/build/es/locales/en/translations.json +0 -1
  15. package/build/es/modules/ouLevelUtils/index.js +5 -3
  16. package/package.json +1 -3
  17. package/build/cjs/__demo__/Toolbar.stories.js +0 -77
  18. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuBar.js +0 -107
  19. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuDropdown.js +0 -66
  20. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuList.js +0 -94
  21. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuListItem.js +0 -99
  22. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuListItem.styles.js +0 -13
  23. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +0 -219
  24. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +0 -23
  25. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +0 -56
  26. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +0 -50
  27. package/build/cjs/components/Toolbar/HoverMenuBar/index.js +0 -37
  28. package/build/cjs/components/Toolbar/InterpretationsAndDetailsToggler.js +0 -50
  29. package/build/cjs/components/Toolbar/MenuButton.styles.js +0 -13
  30. package/build/cjs/components/Toolbar/Toolbar.js +0 -39
  31. package/build/cjs/components/Toolbar/ToolbarSidebar.js +0 -45
  32. package/build/cjs/components/Toolbar/UpdateButton.js +0 -57
  33. package/build/cjs/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +0 -50
  34. package/build/cjs/components/Toolbar/__tests__/Toolbar.spec.js +0 -24
  35. package/build/cjs/components/Toolbar/__tests__/ToolbarSidebar.spec.js +0 -30
  36. package/build/cjs/components/Toolbar/__tests__/UpdateButton.spec.js +0 -44
  37. package/build/cjs/components/Toolbar/index.js +0 -57
  38. package/build/es/__demo__/Toolbar.stories.js +0 -69
  39. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuBar.js +0 -90
  40. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuDropdown.js +0 -44
  41. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuList.js +0 -75
  42. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuListItem.js +0 -78
  43. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuListItem.styles.js +0 -4
  44. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +0 -168
  45. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +0 -16
  46. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +0 -49
  47. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +0 -41
  48. package/build/es/components/Toolbar/HoverMenuBar/index.js +0 -4
  49. package/build/es/components/Toolbar/InterpretationsAndDetailsToggler.js +0 -33
  50. package/build/es/components/Toolbar/MenuButton.styles.js +0 -4
  51. package/build/es/components/Toolbar/Toolbar.js +0 -24
  52. package/build/es/components/Toolbar/ToolbarSidebar.js +0 -29
  53. package/build/es/components/Toolbar/UpdateButton.js +0 -38
  54. package/build/es/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +0 -43
  55. package/build/es/components/Toolbar/__tests__/Toolbar.spec.js +0 -17
  56. package/build/es/components/Toolbar/__tests__/ToolbarSidebar.spec.js +0 -23
  57. package/build/es/components/Toolbar/__tests__/UpdateButton.spec.js +0 -37
  58. package/build/es/components/Toolbar/index.js +0 -5
@@ -8,8 +8,6 @@ var _react2 = _interopRequireDefault(require("react"));
8
8
 
9
9
  var _FileMenu = require("../components/FileMenu/FileMenu.js");
10
10
 
11
- var _index = require("../components/Toolbar/index.js");
12
-
13
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
12
 
15
13
  const configMock = {
@@ -62,19 +60,19 @@ const visReadonlyObject = { ...visObject,
62
60
  };
63
61
  (0, _react.storiesOf)('FileMenu', module).add('Simple', () => /*#__PURE__*/_react2.default.createElement(_appRuntime.Provider, {
64
62
  config: configMock
65
- }, /*#__PURE__*/_react2.default.createElement(_index.HoverMenuBar, null, /*#__PURE__*/_react2.default.createElement(_FileMenu.FileMenu, {
63
+ }, /*#__PURE__*/_react2.default.createElement(_FileMenu.FileMenu, {
66
64
  currentUser: user,
67
65
  fileType: "visualization"
68
- })))).add('With AO', () => /*#__PURE__*/_react2.default.createElement(_appRuntime.Provider, {
66
+ }))).add('With AO', () => /*#__PURE__*/_react2.default.createElement(_appRuntime.Provider, {
69
67
  config: configMock
70
- }, /*#__PURE__*/_react2.default.createElement(_index.HoverMenuBar, null, /*#__PURE__*/_react2.default.createElement(_FileMenu.FileMenu, {
68
+ }, /*#__PURE__*/_react2.default.createElement(_FileMenu.FileMenu, {
71
69
  currentUser: user,
72
70
  fileType: "visualization",
73
71
  fileObject: visObject
74
- })))).add('With readonly AO', () => /*#__PURE__*/_react2.default.createElement(_appRuntime.Provider, {
72
+ }))).add('With readonly AO', () => /*#__PURE__*/_react2.default.createElement(_appRuntime.Provider, {
75
73
  config: configMock
76
- }, /*#__PURE__*/_react2.default.createElement(_index.HoverMenuBar, null, /*#__PURE__*/_react2.default.createElement(_FileMenu.FileMenu, {
74
+ }, /*#__PURE__*/_react2.default.createElement(_FileMenu.FileMenu, {
77
75
  currentUser: user,
78
76
  fileType: "visualization",
79
77
  fileObject: visReadonlyObject
80
- }))));
78
+ })));
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = exports.FileMenu = void 0;
7
7
 
8
+ var _style = _interopRequireDefault(require("styled-jsx/style"));
9
+
8
10
  var _ui = require("@dhis2/ui");
9
11
 
10
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -15,12 +17,12 @@ var _index = _interopRequireDefault(require("../../locales/index.js"));
15
17
 
16
18
  var _OpenFileDialog = require("../OpenFileDialog/OpenFileDialog.js");
17
19
 
18
- var _index2 = require("../Toolbar/index.js");
19
-
20
- var _index3 = require("../TranslationDialog/index.js");
20
+ var _index2 = require("../TranslationDialog/index.js");
21
21
 
22
22
  var _DeleteDialog = require("./DeleteDialog.js");
23
23
 
24
+ var _FileMenuStyles = require("./FileMenu.styles.js");
25
+
24
26
  var _GetLinkDialog = require("./GetLinkDialog.js");
25
27
 
26
28
  var _RenameDialog = require("./RenameDialog.js");
@@ -54,14 +56,24 @@ const FileMenu = _ref => {
54
56
  onError,
55
57
  onTranslate
56
58
  } = _ref;
57
- const [currentDialog, setCurrentDialog] = (0, _react.useState)(null);
59
+ const [menuIsOpen, setMenuIsOpen] = (0, _react.useState)(false);
60
+ const [currentDialog, setCurrentDialog] = (0, _react.useState)(null); // Escape key press closes the menu
61
+
62
+ const onKeyDown = e => {
63
+ if ((e === null || e === void 0 ? void 0 : e.keyCode) === 27) {
64
+ setMenuIsOpen(false);
65
+ }
66
+ };
58
67
 
59
68
  const onMenuItemClick = dialogToOpen => () => {
69
+ setMenuIsOpen(false);
60
70
  setCurrentDialog(dialogToOpen);
61
71
  };
62
72
 
63
73
  const onDialogClose = () => setCurrentDialog(null);
64
74
 
75
+ const toggleMenu = () => setMenuIsOpen(!menuIsOpen);
76
+
65
77
  const onDeleteConfirm = () => {
66
78
  // The dialog must be closed before calling the callback
67
79
  // otherwise the fileObject is changed to null before the
@@ -71,6 +83,8 @@ const FileMenu = _ref => {
71
83
  onDelete();
72
84
  };
73
85
 
86
+ const buttonRef = /*#__PURE__*/(0, _react.createRef)();
87
+
74
88
  const renderDialog = () => {
75
89
  switch (currentDialog) {
76
90
  case 'rename':
@@ -83,7 +97,7 @@ const FileMenu = _ref => {
83
97
  });
84
98
 
85
99
  case 'translate':
86
- return /*#__PURE__*/_react.default.createElement(_index3.TranslationDialog, {
100
+ return /*#__PURE__*/_react.default.createElement(_index2.TranslationDialog, {
87
101
  objectToTranslate: fileObject,
88
102
  fieldsToTranslate: ['name', 'description'],
89
103
  onClose: onDialogClose,
@@ -132,7 +146,19 @@ const FileMenu = _ref => {
132
146
 
133
147
  const iconActiveColor = _ui.colors.grey700;
134
148
  const iconInactiveColor = _ui.colors.grey500;
135
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_OpenFileDialog.OpenFileDialog, {
149
+ return /*#__PURE__*/_react.default.createElement("div", {
150
+ onKeyDown: onKeyDown,
151
+ className: "jsx-".concat(_FileMenuStyles.fileMenuStyles.__hash)
152
+ }, /*#__PURE__*/_react.default.createElement(_style.default, {
153
+ id: _FileMenuStyles.fileMenuStyles.__hash
154
+ }, _FileMenuStyles.fileMenuStyles), /*#__PURE__*/_react.default.createElement("div", {
155
+ ref: buttonRef,
156
+ className: "jsx-".concat(_FileMenuStyles.fileMenuStyles.__hash)
157
+ }, /*#__PURE__*/_react.default.createElement("button", {
158
+ onClick: toggleMenu,
159
+ "data-test": "file-menu-toggle",
160
+ className: "jsx-".concat(_FileMenuStyles.fileMenuStyles.__hash) + " " + "menu-toggle"
161
+ }, _index.default.t('File'))), /*#__PURE__*/_react.default.createElement(_OpenFileDialog.OpenFileDialog, {
136
162
  open: currentDialog === 'open',
137
163
  type: fileType,
138
164
  filterVisTypes: filterVisTypes,
@@ -144,33 +170,45 @@ const FileMenu = _ref => {
144
170
  },
145
171
  onNew: onNew,
146
172
  currentUser: currentUser
147
- }), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuDropdown, {
148
- label: _index.default.t('File')
149
- }, /*#__PURE__*/_react.default.createElement(_index2.HoverMenuList, {
173
+ }), menuIsOpen && /*#__PURE__*/_react.default.createElement(_ui.Layer, {
174
+ onBackdropClick: toggleMenu,
175
+ position: "fixed",
176
+ level: 2000,
177
+ dataTest: "file-menu-toggle-layer"
178
+ }, /*#__PURE__*/_react.default.createElement(_ui.Popper, {
179
+ reference: buttonRef,
180
+ placement: "bottom-start"
181
+ }, /*#__PURE__*/_react.default.createElement(_ui.FlyoutMenu, {
150
182
  dataTest: "file-menu-container"
151
- }, /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
183
+ }, /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
152
184
  label: _index.default.t('New'),
153
185
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconAdd24, {
154
186
  color: iconActiveColor
155
187
  }),
156
- onClick: onNew,
188
+ onClick: () => {
189
+ toggleMenu();
190
+ onNew();
191
+ },
157
192
  dataTest: "file-menu-new"
158
- }), /*#__PURE__*/_react.default.createElement(_ui.MenuDivider, null), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
193
+ }), /*#__PURE__*/_react.default.createElement(_ui.MenuDivider, null), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
159
194
  label: _index.default.t('Open…'),
160
195
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconLaunch24, {
161
196
  color: iconActiveColor
162
197
  }),
163
198
  onClick: onMenuItemClick('open'),
164
199
  dataTest: "file-menu-open"
165
- }), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
200
+ }), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
166
201
  label: fileObject !== null && fileObject !== void 0 && fileObject.id ? _index.default.t('Save') : _index.default.t('Save…'),
167
202
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconSave24, {
168
203
  color: !onSave || !(!(fileObject !== null && fileObject !== void 0 && fileObject.id) || fileObject !== null && fileObject !== void 0 && (_fileObject$access = fileObject.access) !== null && _fileObject$access !== void 0 && _fileObject$access.update) ? iconInactiveColor : iconActiveColor
169
204
  }),
170
205
  disabled: !onSave || !(!(fileObject !== null && fileObject !== void 0 && fileObject.id) || fileObject !== null && fileObject !== void 0 && (_fileObject$access2 = fileObject.access) !== null && _fileObject$access2 !== void 0 && _fileObject$access2.update),
171
- onClick: fileObject !== null && fileObject !== void 0 && fileObject.id ? onSave : onMenuItemClick('saveas'),
206
+ onClick: fileObject !== null && fileObject !== void 0 && fileObject.id ? () => {
207
+ toggleMenu();
208
+ onSave();
209
+ } : onMenuItemClick('saveas'),
172
210
  dataTest: "file-menu-save"
173
- }), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
211
+ }), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
174
212
  label: _index.default.t('Save as…'),
175
213
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconSave24, {
176
214
  color: !(onSaveAs && fileObject !== null && fileObject !== void 0 && fileObject.id) ? iconInactiveColor : iconActiveColor
@@ -178,7 +216,7 @@ const FileMenu = _ref => {
178
216
  disabled: !(onSaveAs && fileObject !== null && fileObject !== void 0 && fileObject.id),
179
217
  onClick: onMenuItemClick('saveas'),
180
218
  dataTest: "file-menu-saveas"
181
- }), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
219
+ }), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
182
220
  label: _index.default.t('Rename…'),
183
221
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconEdit24, {
184
222
  color: fileObject !== null && fileObject !== void 0 && fileObject.id && fileObject !== null && fileObject !== void 0 && (_fileObject$access3 = fileObject.access) !== null && _fileObject$access3 !== void 0 && _fileObject$access3.update ? iconActiveColor : iconInactiveColor
@@ -186,7 +224,7 @@ const FileMenu = _ref => {
186
224
  disabled: !(fileObject !== null && fileObject !== void 0 && fileObject.id && fileObject !== null && fileObject !== void 0 && (_fileObject$access4 = fileObject.access) !== null && _fileObject$access4 !== void 0 && _fileObject$access4.update),
187
225
  onClick: onMenuItemClick('rename'),
188
226
  dataTest: "file-menu-rename"
189
- }), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
227
+ }), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
190
228
  label: _index.default.t('Translate…'),
191
229
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconTranslate24, {
192
230
  color: fileObject !== null && fileObject !== void 0 && fileObject.id && fileObject !== null && fileObject !== void 0 && (_fileObject$access5 = fileObject.access) !== null && _fileObject$access5 !== void 0 && _fileObject$access5.update ? iconActiveColor : iconInactiveColor
@@ -194,7 +232,7 @@ const FileMenu = _ref => {
194
232
  disabled: !(fileObject !== null && fileObject !== void 0 && fileObject.id && fileObject !== null && fileObject !== void 0 && (_fileObject$access6 = fileObject.access) !== null && _fileObject$access6 !== void 0 && _fileObject$access6.update),
195
233
  onClick: onMenuItemClick('translate'),
196
234
  dataTest: "file-menu-translate"
197
- }), /*#__PURE__*/_react.default.createElement(_ui.MenuDivider, null), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
235
+ }), /*#__PURE__*/_react.default.createElement(_ui.MenuDivider, null), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
198
236
  label: _index.default.t('Share…'),
199
237
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconShare24, {
200
238
  color: fileObject !== null && fileObject !== void 0 && fileObject.id && fileObject !== null && fileObject !== void 0 && (_fileObject$access7 = fileObject.access) !== null && _fileObject$access7 !== void 0 && _fileObject$access7.manage ? iconActiveColor : iconInactiveColor
@@ -202,7 +240,7 @@ const FileMenu = _ref => {
202
240
  disabled: !(fileObject !== null && fileObject !== void 0 && fileObject.id && fileObject !== null && fileObject !== void 0 && (_fileObject$access8 = fileObject.access) !== null && _fileObject$access8 !== void 0 && _fileObject$access8.manage),
203
241
  onClick: onMenuItemClick('sharing'),
204
242
  dataTest: "file-menu-sharing"
205
- }), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
243
+ }), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
206
244
  label: _index.default.t('Get link…'),
207
245
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconLink24, {
208
246
  color: fileObject !== null && fileObject !== void 0 && fileObject.id ? iconActiveColor : iconInactiveColor
@@ -210,7 +248,7 @@ const FileMenu = _ref => {
210
248
  disabled: !(fileObject !== null && fileObject !== void 0 && fileObject.id),
211
249
  onClick: onMenuItemClick('getlink'),
212
250
  dataTest: "file-menu-getlink"
213
- }), /*#__PURE__*/_react.default.createElement(_ui.MenuDivider, null), /*#__PURE__*/_react.default.createElement(_index2.HoverMenuListItem, {
251
+ }), /*#__PURE__*/_react.default.createElement(_ui.MenuDivider, null), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
214
252
  label: _index.default.t('Delete'),
215
253
  destructive: true,
216
254
  icon: /*#__PURE__*/_react.default.createElement(_ui.IconDelete24, {
@@ -219,7 +257,7 @@ const FileMenu = _ref => {
219
257
  disabled: !(fileObject !== null && fileObject !== void 0 && fileObject.id && fileObject !== null && fileObject !== void 0 && (_fileObject$access10 = fileObject.access) !== null && _fileObject$access10 !== void 0 && _fileObject$access10.delete),
220
258
  onClick: onMenuItemClick('delete'),
221
259
  dataTest: "file-menu-delete"
222
- }))), renderDialog());
260
+ })))), renderDialog());
223
261
  };
224
262
 
225
263
  exports.FileMenu = FileMenu;