@dhis2/analytics 25.2.0 → 25.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +4065 -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/locales/nl/translations.json +5 -4
  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/locales/nl/translations.json +5 -4
  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
@@ -1,11 +1,12 @@
1
- import { IconAdd24, IconLaunch24, IconSave24, IconEdit24, IconTranslate24, IconShare24, IconLink24, IconDelete24, SharingDialog, colors, MenuDivider } from '@dhis2/ui';
1
+ import _JSXStyle from "styled-jsx/style";
2
+ import { IconAdd24, IconLaunch24, IconSave24, IconEdit24, IconTranslate24, IconShare24, IconLink24, IconDelete24, SharingDialog, colors, FlyoutMenu, Layer, MenuItem, MenuDivider, Popper } from '@dhis2/ui';
2
3
  import PropTypes from 'prop-types';
3
- import React, { useState } from 'react';
4
+ import React, { createRef, useState } from 'react';
4
5
  import i18n from '../../locales/index.js';
5
6
  import { OpenFileDialog } from '../OpenFileDialog/OpenFileDialog.js';
6
- import { HoverMenuListItem, HoverMenuList, HoverMenuDropdown } from '../Toolbar/index.js';
7
7
  import { TranslationDialog } from '../TranslationDialog/index.js';
8
8
  import { DeleteDialog } from './DeleteDialog.js';
9
+ import { fileMenuStyles } from './FileMenu.styles.js';
9
10
  import { GetLinkDialog } from './GetLinkDialog.js';
10
11
  import { RenameDialog } from './RenameDialog.js';
11
12
  import { SaveAsDialog } from './SaveAsDialog.js';
@@ -29,14 +30,24 @@ export const FileMenu = _ref => {
29
30
  onError,
30
31
  onTranslate
31
32
  } = _ref;
32
- const [currentDialog, setCurrentDialog] = useState(null);
33
+ const [menuIsOpen, setMenuIsOpen] = useState(false);
34
+ const [currentDialog, setCurrentDialog] = useState(null); // Escape key press closes the menu
35
+
36
+ const onKeyDown = e => {
37
+ if ((e === null || e === void 0 ? void 0 : e.keyCode) === 27) {
38
+ setMenuIsOpen(false);
39
+ }
40
+ };
33
41
 
34
42
  const onMenuItemClick = dialogToOpen => () => {
43
+ setMenuIsOpen(false);
35
44
  setCurrentDialog(dialogToOpen);
36
45
  };
37
46
 
38
47
  const onDialogClose = () => setCurrentDialog(null);
39
48
 
49
+ const toggleMenu = () => setMenuIsOpen(!menuIsOpen);
50
+
40
51
  const onDeleteConfirm = () => {
41
52
  // The dialog must be closed before calling the callback
42
53
  // otherwise the fileObject is changed to null before the
@@ -46,6 +57,8 @@ export const FileMenu = _ref => {
46
57
  onDelete();
47
58
  };
48
59
 
60
+ const buttonRef = /*#__PURE__*/createRef();
61
+
49
62
  const renderDialog = () => {
50
63
  switch (currentDialog) {
51
64
  case 'rename':
@@ -107,7 +120,19 @@ export const FileMenu = _ref => {
107
120
 
108
121
  const iconActiveColor = colors.grey700;
109
122
  const iconInactiveColor = colors.grey500;
110
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(OpenFileDialog, {
123
+ return /*#__PURE__*/React.createElement("div", {
124
+ onKeyDown: onKeyDown,
125
+ className: "jsx-".concat(fileMenuStyles.__hash)
126
+ }, /*#__PURE__*/React.createElement(_JSXStyle, {
127
+ id: fileMenuStyles.__hash
128
+ }, fileMenuStyles), /*#__PURE__*/React.createElement("div", {
129
+ ref: buttonRef,
130
+ className: "jsx-".concat(fileMenuStyles.__hash)
131
+ }, /*#__PURE__*/React.createElement("button", {
132
+ onClick: toggleMenu,
133
+ "data-test": "file-menu-toggle",
134
+ className: "jsx-".concat(fileMenuStyles.__hash) + " " + "menu-toggle"
135
+ }, i18n.t('File'))), /*#__PURE__*/React.createElement(OpenFileDialog, {
111
136
  open: currentDialog === 'open',
112
137
  type: fileType,
113
138
  filterVisTypes: filterVisTypes,
@@ -119,33 +144,45 @@ export const FileMenu = _ref => {
119
144
  },
120
145
  onNew: onNew,
121
146
  currentUser: currentUser
122
- }), /*#__PURE__*/React.createElement(HoverMenuDropdown, {
123
- label: i18n.t('File')
124
- }, /*#__PURE__*/React.createElement(HoverMenuList, {
147
+ }), menuIsOpen && /*#__PURE__*/React.createElement(Layer, {
148
+ onBackdropClick: toggleMenu,
149
+ position: "fixed",
150
+ level: 2000,
151
+ dataTest: "file-menu-toggle-layer"
152
+ }, /*#__PURE__*/React.createElement(Popper, {
153
+ reference: buttonRef,
154
+ placement: "bottom-start"
155
+ }, /*#__PURE__*/React.createElement(FlyoutMenu, {
125
156
  dataTest: "file-menu-container"
126
- }, /*#__PURE__*/React.createElement(HoverMenuListItem, {
157
+ }, /*#__PURE__*/React.createElement(MenuItem, {
127
158
  label: i18n.t('New'),
128
159
  icon: /*#__PURE__*/React.createElement(IconAdd24, {
129
160
  color: iconActiveColor
130
161
  }),
131
- onClick: onNew,
162
+ onClick: () => {
163
+ toggleMenu();
164
+ onNew();
165
+ },
132
166
  dataTest: "file-menu-new"
133
- }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(HoverMenuListItem, {
167
+ }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(MenuItem, {
134
168
  label: i18n.t('Open…'),
135
169
  icon: /*#__PURE__*/React.createElement(IconLaunch24, {
136
170
  color: iconActiveColor
137
171
  }),
138
172
  onClick: onMenuItemClick('open'),
139
173
  dataTest: "file-menu-open"
140
- }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
174
+ }), /*#__PURE__*/React.createElement(MenuItem, {
141
175
  label: fileObject !== null && fileObject !== void 0 && fileObject.id ? i18n.t('Save') : i18n.t('Save…'),
142
176
  icon: /*#__PURE__*/React.createElement(IconSave24, {
143
177
  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
144
178
  }),
145
179
  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),
146
- onClick: fileObject !== null && fileObject !== void 0 && fileObject.id ? onSave : onMenuItemClick('saveas'),
180
+ onClick: fileObject !== null && fileObject !== void 0 && fileObject.id ? () => {
181
+ toggleMenu();
182
+ onSave();
183
+ } : onMenuItemClick('saveas'),
147
184
  dataTest: "file-menu-save"
148
- }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
185
+ }), /*#__PURE__*/React.createElement(MenuItem, {
149
186
  label: i18n.t('Save as…'),
150
187
  icon: /*#__PURE__*/React.createElement(IconSave24, {
151
188
  color: !(onSaveAs && fileObject !== null && fileObject !== void 0 && fileObject.id) ? iconInactiveColor : iconActiveColor
@@ -153,7 +190,7 @@ export const FileMenu = _ref => {
153
190
  disabled: !(onSaveAs && fileObject !== null && fileObject !== void 0 && fileObject.id),
154
191
  onClick: onMenuItemClick('saveas'),
155
192
  dataTest: "file-menu-saveas"
156
- }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
193
+ }), /*#__PURE__*/React.createElement(MenuItem, {
157
194
  label: i18n.t('Rename…'),
158
195
  icon: /*#__PURE__*/React.createElement(IconEdit24, {
159
196
  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
@@ -161,7 +198,7 @@ export const FileMenu = _ref => {
161
198
  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),
162
199
  onClick: onMenuItemClick('rename'),
163
200
  dataTest: "file-menu-rename"
164
- }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
201
+ }), /*#__PURE__*/React.createElement(MenuItem, {
165
202
  label: i18n.t('Translate…'),
166
203
  icon: /*#__PURE__*/React.createElement(IconTranslate24, {
167
204
  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
@@ -169,7 +206,7 @@ export const FileMenu = _ref => {
169
206
  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),
170
207
  onClick: onMenuItemClick('translate'),
171
208
  dataTest: "file-menu-translate"
172
- }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(HoverMenuListItem, {
209
+ }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(MenuItem, {
173
210
  label: i18n.t('Share…'),
174
211
  icon: /*#__PURE__*/React.createElement(IconShare24, {
175
212
  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
@@ -177,7 +214,7 @@ export const FileMenu = _ref => {
177
214
  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),
178
215
  onClick: onMenuItemClick('sharing'),
179
216
  dataTest: "file-menu-sharing"
180
- }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
217
+ }), /*#__PURE__*/React.createElement(MenuItem, {
181
218
  label: i18n.t('Get link…'),
182
219
  icon: /*#__PURE__*/React.createElement(IconLink24, {
183
220
  color: fileObject !== null && fileObject !== void 0 && fileObject.id ? iconActiveColor : iconInactiveColor
@@ -185,7 +222,7 @@ export const FileMenu = _ref => {
185
222
  disabled: !(fileObject !== null && fileObject !== void 0 && fileObject.id),
186
223
  onClick: onMenuItemClick('getlink'),
187
224
  dataTest: "file-menu-getlink"
188
- }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(HoverMenuListItem, {
225
+ }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(MenuItem, {
189
226
  label: i18n.t('Delete'),
190
227
  destructive: true,
191
228
  icon: /*#__PURE__*/React.createElement(IconDelete24, {
@@ -194,7 +231,7 @@ export const FileMenu = _ref => {
194
231
  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),
195
232
  onClick: onMenuItemClick('delete'),
196
233
  dataTest: "file-menu-delete"
197
- }))), renderDialog());
234
+ })))), renderDialog());
198
235
  };
199
236
  FileMenu.defaultProps = {
200
237
  onDelete: Function.prototype,