@dhis2/analytics 25.2.3 → 26.0.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 (56) hide show
  1. package/build/cjs/__demo__/FileMenu.stories.js +8 -6
  2. package/build/cjs/__demo__/Toolbar.stories.js +77 -0
  3. package/build/cjs/components/FileMenu/FileMenu.js +21 -59
  4. package/build/cjs/components/FileMenu/__tests__/FileMenu.spec.js +318 -194
  5. package/build/cjs/components/Options/VisualizationOptions.js +3 -1
  6. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuBar.js +107 -0
  7. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuDropdown.js +66 -0
  8. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuList.js +94 -0
  9. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuListItem.js +99 -0
  10. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuListItem.styles.js +13 -0
  11. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +219 -0
  12. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +23 -0
  13. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +56 -0
  14. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +50 -0
  15. package/build/cjs/components/Toolbar/HoverMenuBar/index.js +37 -0
  16. package/build/cjs/components/Toolbar/InterpretationsAndDetailsToggler.js +50 -0
  17. package/build/cjs/components/Toolbar/MenuButton.styles.js +13 -0
  18. package/build/cjs/components/Toolbar/Toolbar.js +39 -0
  19. package/build/cjs/components/Toolbar/ToolbarSidebar.js +45 -0
  20. package/build/cjs/components/Toolbar/UpdateButton.js +57 -0
  21. package/build/cjs/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +50 -0
  22. package/build/cjs/components/Toolbar/__tests__/Toolbar.spec.js +24 -0
  23. package/build/cjs/components/Toolbar/__tests__/ToolbarSidebar.spec.js +30 -0
  24. package/build/cjs/components/Toolbar/__tests__/UpdateButton.spec.js +44 -0
  25. package/build/cjs/components/Toolbar/index.js +57 -0
  26. package/build/cjs/index.js +304 -46
  27. package/build/cjs/locales/en/translations.json +1 -0
  28. package/build/es/__demo__/FileMenu.stories.js +7 -6
  29. package/build/es/__demo__/Toolbar.stories.js +69 -0
  30. package/build/es/components/FileMenu/FileMenu.js +20 -57
  31. package/build/es/components/FileMenu/__tests__/FileMenu.spec.js +293 -189
  32. package/build/es/components/Options/VisualizationOptions.js +3 -1
  33. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuBar.js +90 -0
  34. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuDropdown.js +44 -0
  35. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuList.js +75 -0
  36. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuListItem.js +78 -0
  37. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuListItem.styles.js +4 -0
  38. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +168 -0
  39. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +16 -0
  40. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +49 -0
  41. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +41 -0
  42. package/build/es/components/Toolbar/HoverMenuBar/index.js +4 -0
  43. package/build/es/components/Toolbar/InterpretationsAndDetailsToggler.js +33 -0
  44. package/build/es/components/Toolbar/MenuButton.styles.js +4 -0
  45. package/build/es/components/Toolbar/Toolbar.js +24 -0
  46. package/build/es/components/Toolbar/ToolbarSidebar.js +29 -0
  47. package/build/es/components/Toolbar/UpdateButton.js +38 -0
  48. package/build/es/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +43 -0
  49. package/build/es/components/Toolbar/__tests__/Toolbar.spec.js +17 -0
  50. package/build/es/components/Toolbar/__tests__/ToolbarSidebar.spec.js +23 -0
  51. package/build/es/components/Toolbar/__tests__/UpdateButton.spec.js +37 -0
  52. package/build/es/components/Toolbar/index.js +5 -0
  53. package/build/es/index.js +1 -0
  54. package/build/es/locales/en/translations.json +1 -0
  55. package/package.json +3 -1
  56. package/CHANGELOG.md +0 -4072
@@ -0,0 +1,69 @@
1
+ import { storiesOf } from '@storybook/react';
2
+ import React, { useState } from 'react';
3
+ import { HoverMenuBar, HoverMenuDropdown, HoverMenuList, HoverMenuListItem, InterpretationsAndDetailsToggler, Toolbar, ToolbarSidebar, UpdateButton } from '../components/Toolbar/index.js';
4
+
5
+ function ToolbarWithState() {
6
+ const [isHidden, setIsHidden] = useState(false);
7
+ const [isSidebarShowing, setIsSidebarShowing] = useState(false);
8
+ return /*#__PURE__*/React.createElement(Toolbar, null, /*#__PURE__*/React.createElement(ToolbarSidebar, {
9
+ isHidden: isHidden
10
+ }, /*#__PURE__*/React.createElement("span", null, "Toolbar side bar"), /*#__PURE__*/React.createElement("a", {
11
+ style: {
12
+ paddingLeft: 12,
13
+ textDecoration: 'underline',
14
+ cursor: 'pointer'
15
+ },
16
+ onClick: () => setIsHidden(true)
17
+ }, "click to hide")), /*#__PURE__*/React.createElement(UpdateButton, null), /*#__PURE__*/React.createElement(HoverMenuBar, null, /*#__PURE__*/React.createElement(HoverMenuDropdown, {
18
+ label: "Menu A"
19
+ }, /*#__PURE__*/React.createElement(HoverMenuList, null, /*#__PURE__*/React.createElement(HoverMenuListItem, {
20
+ label: "Menu item A.1"
21
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
22
+ label: "Menu item A.2"
23
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
24
+ label: "Menu item A.3"
25
+ }))), /*#__PURE__*/React.createElement(HoverMenuDropdown, {
26
+ label: "Menu B"
27
+ }, /*#__PURE__*/React.createElement(HoverMenuList, null, /*#__PURE__*/React.createElement(HoverMenuListItem, {
28
+ label: "Menu item B.1"
29
+ }, /*#__PURE__*/React.createElement(HoverMenuListItem, {
30
+ label: "Menu item B.1.1"
31
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
32
+ label: "Menu item B.1.2"
33
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
34
+ label: "Menu item B.1.3"
35
+ })), /*#__PURE__*/React.createElement(HoverMenuListItem, {
36
+ label: "Menu item B.2"
37
+ }, /*#__PURE__*/React.createElement(HoverMenuListItem, {
38
+ label: "Menu item B.2.1"
39
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
40
+ label: "Menu item B.2.2"
41
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
42
+ label: "Menu item B.2.3"
43
+ })), /*#__PURE__*/React.createElement(HoverMenuListItem, {
44
+ label: "Menu item B.3",
45
+ disabled: true
46
+ }, /*#__PURE__*/React.createElement(HoverMenuListItem, {
47
+ label: "Menu item B.3.1"
48
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
49
+ label: "Menu item B.3.2"
50
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
51
+ label: "Menu item B.3.3"
52
+ })))), /*#__PURE__*/React.createElement(HoverMenuDropdown, {
53
+ label: "Menu C",
54
+ disabled: true
55
+ }, /*#__PURE__*/React.createElement(HoverMenuList, null, /*#__PURE__*/React.createElement(HoverMenuListItem, {
56
+ label: "Menu item C.1"
57
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
58
+ label: "Menu item C.2"
59
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
60
+ label: "Menu item C.3"
61
+ })))), /*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
62
+ isShowing: isSidebarShowing,
63
+ onClick: () => setIsSidebarShowing(current => !current)
64
+ }));
65
+ }
66
+
67
+ storiesOf('Toolbar', module).add('default', () => {
68
+ return /*#__PURE__*/React.createElement(ToolbarWithState, null);
69
+ });
@@ -1,12 +1,11 @@
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';
1
+ import { IconAdd24, IconLaunch24, IconSave24, IconEdit24, IconTranslate24, IconShare24, IconLink24, IconDelete24, SharingDialog, colors, MenuDivider } from '@dhis2/ui';
3
2
  import PropTypes from 'prop-types';
4
- import React, { createRef, useState } from 'react';
3
+ import React, { useState } from 'react';
5
4
  import i18n from '../../locales/index.js';
6
5
  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';
10
9
  import { GetLinkDialog } from './GetLinkDialog.js';
11
10
  import { RenameDialog } from './RenameDialog.js';
12
11
  import { SaveAsDialog } from './SaveAsDialog.js';
@@ -30,24 +29,14 @@ export const FileMenu = _ref => {
30
29
  onError,
31
30
  onTranslate
32
31
  } = _ref;
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
- };
32
+ const [currentDialog, setCurrentDialog] = useState(null);
41
33
 
42
34
  const onMenuItemClick = dialogToOpen => () => {
43
- setMenuIsOpen(false);
44
35
  setCurrentDialog(dialogToOpen);
45
36
  };
46
37
 
47
38
  const onDialogClose = () => setCurrentDialog(null);
48
39
 
49
- const toggleMenu = () => setMenuIsOpen(!menuIsOpen);
50
-
51
40
  const onDeleteConfirm = () => {
52
41
  // The dialog must be closed before calling the callback
53
42
  // otherwise the fileObject is changed to null before the
@@ -57,8 +46,6 @@ export const FileMenu = _ref => {
57
46
  onDelete();
58
47
  };
59
48
 
60
- const buttonRef = /*#__PURE__*/createRef();
61
-
62
49
  const renderDialog = () => {
63
50
  switch (currentDialog) {
64
51
  case 'rename':
@@ -120,19 +107,7 @@ export const FileMenu = _ref => {
120
107
 
121
108
  const iconActiveColor = colors.grey700;
122
109
  const iconInactiveColor = colors.grey500;
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, {
110
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(OpenFileDialog, {
136
111
  open: currentDialog === 'open',
137
112
  type: fileType,
138
113
  filterVisTypes: filterVisTypes,
@@ -144,45 +119,33 @@ export const FileMenu = _ref => {
144
119
  },
145
120
  onNew: onNew,
146
121
  currentUser: currentUser
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, {
122
+ }), /*#__PURE__*/React.createElement(HoverMenuDropdown, {
123
+ label: i18n.t('File')
124
+ }, /*#__PURE__*/React.createElement(HoverMenuList, {
156
125
  dataTest: "file-menu-container"
157
- }, /*#__PURE__*/React.createElement(MenuItem, {
126
+ }, /*#__PURE__*/React.createElement(HoverMenuListItem, {
158
127
  label: i18n.t('New'),
159
128
  icon: /*#__PURE__*/React.createElement(IconAdd24, {
160
129
  color: iconActiveColor
161
130
  }),
162
- onClick: () => {
163
- toggleMenu();
164
- onNew();
165
- },
131
+ onClick: onNew,
166
132
  dataTest: "file-menu-new"
167
- }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(MenuItem, {
133
+ }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(HoverMenuListItem, {
168
134
  label: i18n.t('Open…'),
169
135
  icon: /*#__PURE__*/React.createElement(IconLaunch24, {
170
136
  color: iconActiveColor
171
137
  }),
172
138
  onClick: onMenuItemClick('open'),
173
139
  dataTest: "file-menu-open"
174
- }), /*#__PURE__*/React.createElement(MenuItem, {
140
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
175
141
  label: fileObject !== null && fileObject !== void 0 && fileObject.id ? i18n.t('Save') : i18n.t('Save…'),
176
142
  icon: /*#__PURE__*/React.createElement(IconSave24, {
177
143
  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
178
144
  }),
179
145
  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),
180
- onClick: fileObject !== null && fileObject !== void 0 && fileObject.id ? () => {
181
- toggleMenu();
182
- onSave();
183
- } : onMenuItemClick('saveas'),
146
+ onClick: fileObject !== null && fileObject !== void 0 && fileObject.id ? onSave : onMenuItemClick('saveas'),
184
147
  dataTest: "file-menu-save"
185
- }), /*#__PURE__*/React.createElement(MenuItem, {
148
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
186
149
  label: i18n.t('Save as…'),
187
150
  icon: /*#__PURE__*/React.createElement(IconSave24, {
188
151
  color: !(onSaveAs && fileObject !== null && fileObject !== void 0 && fileObject.id) ? iconInactiveColor : iconActiveColor
@@ -190,7 +153,7 @@ export const FileMenu = _ref => {
190
153
  disabled: !(onSaveAs && fileObject !== null && fileObject !== void 0 && fileObject.id),
191
154
  onClick: onMenuItemClick('saveas'),
192
155
  dataTest: "file-menu-saveas"
193
- }), /*#__PURE__*/React.createElement(MenuItem, {
156
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
194
157
  label: i18n.t('Rename…'),
195
158
  icon: /*#__PURE__*/React.createElement(IconEdit24, {
196
159
  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
@@ -198,7 +161,7 @@ export const FileMenu = _ref => {
198
161
  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),
199
162
  onClick: onMenuItemClick('rename'),
200
163
  dataTest: "file-menu-rename"
201
- }), /*#__PURE__*/React.createElement(MenuItem, {
164
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
202
165
  label: i18n.t('Translate…'),
203
166
  icon: /*#__PURE__*/React.createElement(IconTranslate24, {
204
167
  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
@@ -206,7 +169,7 @@ export const FileMenu = _ref => {
206
169
  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),
207
170
  onClick: onMenuItemClick('translate'),
208
171
  dataTest: "file-menu-translate"
209
- }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(MenuItem, {
172
+ }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(HoverMenuListItem, {
210
173
  label: i18n.t('Share…'),
211
174
  icon: /*#__PURE__*/React.createElement(IconShare24, {
212
175
  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
@@ -214,7 +177,7 @@ export const FileMenu = _ref => {
214
177
  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),
215
178
  onClick: onMenuItemClick('sharing'),
216
179
  dataTest: "file-menu-sharing"
217
- }), /*#__PURE__*/React.createElement(MenuItem, {
180
+ }), /*#__PURE__*/React.createElement(HoverMenuListItem, {
218
181
  label: i18n.t('Get link…'),
219
182
  icon: /*#__PURE__*/React.createElement(IconLink24, {
220
183
  color: fileObject !== null && fileObject !== void 0 && fileObject.id ? iconActiveColor : iconInactiveColor
@@ -222,7 +185,7 @@ export const FileMenu = _ref => {
222
185
  disabled: !(fileObject !== null && fileObject !== void 0 && fileObject.id),
223
186
  onClick: onMenuItemClick('getlink'),
224
187
  dataTest: "file-menu-getlink"
225
- }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(MenuItem, {
188
+ }), /*#__PURE__*/React.createElement(MenuDivider, null), /*#__PURE__*/React.createElement(HoverMenuListItem, {
226
189
  label: i18n.t('Delete'),
227
190
  destructive: true,
228
191
  icon: /*#__PURE__*/React.createElement(IconDelete24, {
@@ -231,7 +194,7 @@ export const FileMenu = _ref => {
231
194
  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),
232
195
  onClick: onMenuItemClick('delete'),
233
196
  dataTest: "file-menu-delete"
234
- })))), renderDialog());
197
+ }))), renderDialog());
235
198
  };
236
199
  FileMenu.defaultProps = {
237
200
  onDelete: Function.prototype,