@dhis2/analytics 28.0.3 → 28.0.5

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 (496) hide show
  1. package/build/cjs/__demo__/DataDimension.stories.js +1 -2
  2. package/build/cjs/__demo__/Filter.stories.js +1 -2
  3. package/build/cjs/__demo__/FixedPeriodSelect.stories.js +1 -2
  4. package/build/cjs/__demo__/OpenFileDialog.stories.js +19 -1
  5. package/build/cjs/__demo__/OrgUnitDimension.stories.js +1 -2
  6. package/build/cjs/__demo__/PivotTable.stories.js +166 -224
  7. package/build/cjs/__demo__/ScatterPlotPdfExport.stories.js +1 -2
  8. package/build/cjs/__demo__/SingleValue.stories.js +1 -2
  9. package/build/cjs/__demo__/Toolbar.stories.js +1 -2
  10. package/build/cjs/api/__tests__/dimensions.spec.js +1 -2
  11. package/build/cjs/api/analytics/Analytics.js +8 -9
  12. package/build/cjs/api/analytics/AnalyticsBase.js +58 -77
  13. package/build/cjs/api/analytics/AnalyticsRequest.js +1 -2
  14. package/build/cjs/api/analytics/AnalyticsRequestBase.js +18 -21
  15. package/build/cjs/api/analytics/AnalyticsRequestPropertiesMixin.js +19 -38
  16. package/build/cjs/api/analytics/AnalyticsResponseHeader.js +5 -7
  17. package/build/cjs/api/analytics/__tests__/AnalyticsBase.spec.js +9 -12
  18. package/build/cjs/api/analytics/__tests__/AnalyticsRequest.spec.js +8 -2
  19. package/build/cjs/api/analytics/utils.js +11 -17
  20. package/build/cjs/api/dimensions.js +119 -148
  21. package/build/cjs/api/expression.js +39 -60
  22. package/build/cjs/api/organisationUnits.js +23 -35
  23. package/build/cjs/components/AboutAOUnit/AboutAOUnit.js +12 -20
  24. package/build/cjs/components/CachedDataQueryProvider.js +7 -9
  25. package/build/cjs/components/DashboardPluginWrapper/DashboardPluginWrapper.js +18 -22
  26. package/build/cjs/components/DataDimension/Calculation/CalculationModal.js +44 -61
  27. package/build/cjs/components/DataDimension/Calculation/DataElementOption.js +5 -6
  28. package/build/cjs/components/DataDimension/Calculation/DataElementSelector.js +29 -38
  29. package/build/cjs/components/DataDimension/Calculation/DndContext.js +29 -37
  30. package/build/cjs/components/DataDimension/Calculation/DraggingItem.js +5 -6
  31. package/build/cjs/components/DataDimension/Calculation/DropZone.js +4 -5
  32. package/build/cjs/components/DataDimension/Calculation/FormulaField.js +29 -32
  33. package/build/cjs/components/DataDimension/Calculation/FormulaItem.js +14 -16
  34. package/build/cjs/components/DataDimension/Calculation/MathOperatorSelector.js +23 -29
  35. package/build/cjs/components/DataDimension/Calculation/Operator.js +6 -7
  36. package/build/cjs/components/DataDimension/DataDimension.js +20 -32
  37. package/build/cjs/components/DataDimension/Info/CalculationInfo.js +14 -22
  38. package/build/cjs/components/DataDimension/Info/DataElementInfo.js +23 -36
  39. package/build/cjs/components/DataDimension/Info/DataElementOperandInfo.js +30 -44
  40. package/build/cjs/components/DataDimension/Info/DataSetInfo.js +26 -39
  41. package/build/cjs/components/DataDimension/Info/EventDataItemInfo.js +21 -34
  42. package/build/cjs/components/DataDimension/Info/IndicatorInfo.js +21 -32
  43. package/build/cjs/components/DataDimension/Info/InfoPopover.js +6 -7
  44. package/build/cjs/components/DataDimension/Info/InfoTable.js +39 -52
  45. package/build/cjs/components/DataDimension/Info/OptionInfo.js +13 -20
  46. package/build/cjs/components/DataDimension/Info/ProgramIndicatorInfo.js +46 -58
  47. package/build/cjs/components/DataDimension/ItemOptionsSelector/ItemOptionsSelector.js +22 -32
  48. package/build/cjs/components/DataDimension/ItemSelector/DataTypeSelector.js +6 -7
  49. package/build/cjs/components/DataDimension/ItemSelector/DetailSelector.js +5 -6
  50. package/build/cjs/components/DataDimension/ItemSelector/GroupSelector.js +10 -12
  51. package/build/cjs/components/DataDimension/ItemSelector/ItemSelector.js +86 -104
  52. package/build/cjs/components/DataDimension/ItemSelector/MetricSelector.js +5 -6
  53. package/build/cjs/components/DataDimension/SourceEmptyPlaceholder.js +10 -13
  54. package/build/cjs/components/DataDimension/TransferOption.js +35 -39
  55. package/build/cjs/components/DimensionMenu.js +13 -14
  56. package/build/cjs/components/DimensionsPanel/DimensionsPanel.js +8 -9
  57. package/build/cjs/components/DimensionsPanel/List/DimensionItem.js +12 -13
  58. package/build/cjs/components/DimensionsPanel/List/DimensionList.js +12 -11
  59. package/build/cjs/components/DimensionsPanel/List/OptionsButton.js +8 -11
  60. package/build/cjs/components/DimensionsPanel/List/RecommendedIcon.js +10 -13
  61. package/build/cjs/components/DimensionsPanel/List/__tests__/DimensionItem.spec.js +48 -41
  62. package/build/cjs/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +110 -114
  63. package/build/cjs/components/DimensionsPanel/__tests__/DimensionsPanel.spec.js +36 -33
  64. package/build/cjs/components/DynamicDimension/DynamicDimension.js +9 -13
  65. package/build/cjs/components/DynamicDimension/ItemSelector.js +25 -38
  66. package/build/cjs/components/FileMenu/DeleteDialog.js +11 -16
  67. package/build/cjs/components/FileMenu/FileMenu.js +19 -30
  68. package/build/cjs/components/FileMenu/GetLinkDialog.js +7 -7
  69. package/build/cjs/components/FileMenu/RenameDialog.js +13 -21
  70. package/build/cjs/components/FileMenu/SaveAsDialog.js +13 -21
  71. package/build/cjs/components/FileMenu/__tests__/DeleteDialog.spec.js +24 -27
  72. package/build/cjs/components/FileMenu/__tests__/FileMenu.spec.js +55 -31
  73. package/build/cjs/components/FileMenu/__tests__/GetLinkDialog.spec.js +35 -39
  74. package/build/cjs/components/FileMenu/__tests__/RenameDialog.spec.js +17 -11
  75. package/build/cjs/components/FileMenu/__tests__/SaveAsDialog.spec.js +44 -37
  76. package/build/cjs/components/FileMenu/utils.js +10 -12
  77. package/build/cjs/components/Filter/Filter.js +21 -27
  78. package/build/cjs/components/Filter/__tests__/Filter.spec.js +29 -34
  79. package/build/cjs/components/Interpretations/InterpretationModal/Comment.js +8 -10
  80. package/build/cjs/components/Interpretations/InterpretationModal/CommentAddForm.js +10 -15
  81. package/build/cjs/components/Interpretations/InterpretationModal/CommentDeleteButton.js +10 -15
  82. package/build/cjs/components/Interpretations/InterpretationModal/CommentUpdateForm.js +12 -17
  83. package/build/cjs/components/Interpretations/InterpretationModal/InterpretationModal.js +19 -25
  84. package/build/cjs/components/Interpretations/InterpretationModal/InterpretationThread.js +12 -14
  85. package/build/cjs/components/Interpretations/InterpretationsUnit/InterpretationForm.js +12 -17
  86. package/build/cjs/components/Interpretations/InterpretationsUnit/InterpretationList.js +10 -11
  87. package/build/cjs/components/Interpretations/InterpretationsUnit/InterpretationsUnit.js +23 -33
  88. package/build/cjs/components/Interpretations/common/Interpretation/Interpretation.js +13 -15
  89. package/build/cjs/components/Interpretations/common/Interpretation/InterpretationDeleteButton.js +7 -11
  90. package/build/cjs/components/Interpretations/common/Interpretation/InterpretationSharingLink.js +5 -7
  91. package/build/cjs/components/Interpretations/common/Interpretation/InterpretationUpdateForm.js +15 -23
  92. package/build/cjs/components/Interpretations/common/Interpretation/useLike.js +5 -6
  93. package/build/cjs/components/Interpretations/common/Message/Message.js +6 -7
  94. package/build/cjs/components/Interpretations/common/Message/MessageButtonStrip.js +8 -11
  95. package/build/cjs/components/Interpretations/common/Message/MessageEditorContainer.js +18 -21
  96. package/build/cjs/components/Interpretations/common/Message/MessageIconButton.js +34 -40
  97. package/build/cjs/components/Interpretations/common/Message/MessageInput.js +1 -2
  98. package/build/cjs/components/Interpretations/common/Message/MessageStatsBar.js +8 -11
  99. package/build/cjs/components/LegendKey/LegendKey.js +3 -4
  100. package/build/cjs/components/OfflineTooltip.js +18 -26
  101. package/build/cjs/components/OpenFileDialog/CreatedByFilter.js +28 -26
  102. package/build/cjs/components/OpenFileDialog/CustomSelectOption.js +23 -26
  103. package/build/cjs/components/OpenFileDialog/DateField.js +3 -4
  104. package/build/cjs/components/OpenFileDialog/FileList.js +19 -22
  105. package/build/cjs/components/OpenFileDialog/NameFilter.js +15 -21
  106. package/build/cjs/components/OpenFileDialog/OpenFileDialog.js +50 -79
  107. package/build/cjs/components/OpenFileDialog/PaginationControls.js +22 -28
  108. package/build/cjs/components/OpenFileDialog/VisTypeFilter.js +65 -36
  109. package/build/cjs/components/OpenFileDialog/__tests__/OpenFileDialog.spec.js +51 -0
  110. package/build/cjs/components/Options/VisualizationOptions.js +35 -46
  111. package/build/cjs/components/OrgUnitDimension/OrgUnitDimension.js +38 -60
  112. package/build/cjs/components/OrgUnitDimension/__tests__/OrgUnitDimension.spec.js +78 -44
  113. package/build/cjs/components/PeriodDimension/FixedPeriodFilter.js +17 -25
  114. package/build/cjs/components/PeriodDimension/FixedPeriodSelect.js +15 -21
  115. package/build/cjs/components/PeriodDimension/PeriodDimension.js +9 -12
  116. package/build/cjs/components/PeriodDimension/PeriodTransfer.js +49 -63
  117. package/build/cjs/components/PeriodDimension/RelativePeriodFilter.js +25 -30
  118. package/build/cjs/components/PeriodDimension/__tests__/FixedPeriodSingleSelect.spec.js +14 -21
  119. package/build/cjs/components/PeriodDimension/__tests__/PeriodDimension.spec.js +27 -23
  120. package/build/cjs/components/PeriodDimension/utils/fixedPeriods.js +6 -7
  121. package/build/cjs/components/PeriodDimension/utils/index.js +1 -5
  122. package/build/cjs/components/PivotTable/PivotTable.js +8 -10
  123. package/build/cjs/components/PivotTable/PivotTableBody.js +20 -29
  124. package/build/cjs/components/PivotTable/PivotTableCell.js +8 -12
  125. package/build/cjs/components/PivotTable/PivotTableClippedAxis.js +14 -17
  126. package/build/cjs/components/PivotTable/PivotTableColumnHeaderCell.js +7 -8
  127. package/build/cjs/components/PivotTable/PivotTableColumnHeaders.js +22 -29
  128. package/build/cjs/components/PivotTable/PivotTableContainer.js +5 -6
  129. package/build/cjs/components/PivotTable/PivotTableDimensionLabelCell.js +4 -5
  130. package/build/cjs/components/PivotTable/PivotTableEmptyCell.js +3 -4
  131. package/build/cjs/components/PivotTable/PivotTableEmptyRow.js +4 -5
  132. package/build/cjs/components/PivotTable/PivotTableEngineContext.js +5 -7
  133. package/build/cjs/components/PivotTable/PivotTableHead.js +13 -16
  134. package/build/cjs/components/PivotTable/PivotTableHeaderCell.js +8 -9
  135. package/build/cjs/components/PivotTable/PivotTableRow.js +20 -27
  136. package/build/cjs/components/PivotTable/PivotTableRowHeaderCell.js +5 -6
  137. package/build/cjs/components/PivotTable/PivotTableSortIcon.js +4 -5
  138. package/build/cjs/components/PivotTable/PivotTableTitleRow.js +19 -24
  139. package/build/cjs/components/PivotTable/PivotTableTitleRows.js +4 -5
  140. package/build/cjs/components/PivotTable/PivotTableValueCell.js +6 -8
  141. package/build/cjs/components/RichText/Editor/Editor.js +70 -85
  142. package/build/cjs/components/RichText/Editor/__tests__/Editor.spec.js +6 -7
  143. package/build/cjs/components/RichText/Parser/Parser.js +5 -10
  144. package/build/cjs/components/RichText/Parser/__tests__/MdParser.spec.js +1 -1
  145. package/build/cjs/components/RichText/Parser/__tests__/Parser.spec.js +22 -23
  146. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuBar.js +20 -24
  147. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuDropdown.js +8 -13
  148. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuList.js +9 -17
  149. package/build/cjs/components/Toolbar/HoverMenuBar/HoverMenuListItem.js +11 -16
  150. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +56 -47
  151. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +8 -8
  152. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +30 -23
  153. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +23 -17
  154. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/__snapshots__/HoverMenuList.spec.js.snap +63 -0
  155. package/build/cjs/components/Toolbar/InterpretationsAndDetailsToggler.js +17 -21
  156. package/build/cjs/components/Toolbar/Toolbar.js +10 -16
  157. package/build/cjs/components/Toolbar/ToolbarSidebar.js +12 -18
  158. package/build/cjs/components/Toolbar/UpdateButton.js +18 -24
  159. package/build/cjs/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +19 -18
  160. package/build/cjs/components/Toolbar/__tests__/Toolbar.spec.js +8 -8
  161. package/build/cjs/components/Toolbar/__tests__/ToolbarSidebar.spec.js +14 -11
  162. package/build/cjs/components/Toolbar/__tests__/UpdateButton.spec.js +16 -14
  163. package/build/cjs/components/TransferOption.js +14 -15
  164. package/build/cjs/components/TranslationDialog/TranslationModal/LocalesSelect.js +19 -27
  165. package/build/cjs/components/TranslationDialog/TranslationModal/TranslationForm.js +17 -25
  166. package/build/cjs/components/TranslationDialog/TranslationModal/TranslationModal.js +9 -10
  167. package/build/cjs/components/TranslationDialog/TranslationModal/TranslationModalActions.js +18 -27
  168. package/build/cjs/components/TranslationDialog/TranslationModal/__tests__/TranslationModal.spec.js +25 -16
  169. package/build/cjs/components/TranslationDialog/TranslationModal/useTranslationsResults.js +3 -4
  170. package/build/cjs/components/UserMention/UserList.js +6 -7
  171. package/build/cjs/components/UserMention/UserMentionWrapper.js +13 -20
  172. package/build/cjs/components/UserMention/useUserSearchResults.js +12 -16
  173. package/build/cjs/components/VisTypeIcon.js +5 -6
  174. package/build/cjs/index.js +38 -39
  175. package/build/cjs/locales/ar_IQ/translations.json +20 -11
  176. package/build/cjs/locales/cs/translations.json +2 -0
  177. package/build/cjs/locales/en/translations.json +1 -0
  178. package/build/cjs/locales/es/translations.json +2 -0
  179. package/build/cjs/locales/fr/translations.json +2 -0
  180. package/build/cjs/locales/id/translations.json +20 -11
  181. package/build/cjs/locales/index.js +62 -62
  182. package/build/cjs/locales/lo/translations.json +2 -0
  183. package/build/cjs/locales/nb/translations.json +2 -0
  184. package/build/cjs/locales/prs/translations.json +2 -0
  185. package/build/cjs/locales/ps/translations.json +2 -0
  186. package/build/cjs/locales/pt/translations.json +2 -0
  187. package/build/cjs/locales/pt_BR/translations.json +2 -0
  188. package/build/cjs/locales/ru/translations.json +2 -0
  189. package/build/cjs/locales/si/translations.json +20 -11
  190. package/build/cjs/locales/sv/translations.json +20 -11
  191. package/build/cjs/locales/tet/translations.json +20 -11
  192. package/build/cjs/locales/tg/translations.json +2 -0
  193. package/build/cjs/locales/uk/translations.json +2 -0
  194. package/build/cjs/locales/ur/translations.json +2 -0
  195. package/build/cjs/locales/uz_UZ_Cyrl/translations.json +2 -0
  196. package/build/cjs/locales/uz_UZ_Latn/translations.json +4 -2
  197. package/build/cjs/locales/vi/translations.json +2 -0
  198. package/build/cjs/locales/zh/translations.json +2 -0
  199. package/build/cjs/locales/zh_CN/translations.json +17 -15
  200. package/build/cjs/modules/__tests__/expressions.spec.js +4 -5
  201. package/build/cjs/modules/__tests__/isNumeric.spec.js +33 -0
  202. package/build/cjs/modules/dimensionListItem.js +4 -5
  203. package/build/cjs/modules/expressions.js +3 -9
  204. package/build/cjs/modules/getPWAInstallationStatus.js +7 -9
  205. package/build/cjs/modules/layout/dimensionCreate.js +1 -3
  206. package/build/cjs/modules/layout/dimensionIsValid.js +3 -4
  207. package/build/cjs/modules/legends.js +5 -6
  208. package/build/cjs/modules/outliers/index.js +5 -6
  209. package/build/cjs/modules/outliers/iqr.js +4 -6
  210. package/build/cjs/modules/outliers/modZScore.js +6 -14
  211. package/build/cjs/modules/outliers/zScore.js +3 -4
  212. package/build/cjs/modules/pivotTable/AdaptiveClippingController.js +12 -16
  213. package/build/cjs/modules/pivotTable/PivotTableEngine.js +48 -59
  214. package/build/cjs/modules/pivotTable/clipAxis.js +7 -8
  215. package/build/cjs/modules/pivotTable/clipPartitionedAxis.js +9 -10
  216. package/build/cjs/modules/pivotTable/getHeaderForDisplay.js +8 -9
  217. package/build/cjs/modules/pivotTable/measureText.js +7 -9
  218. package/build/cjs/modules/pivotTable/useParentSize.js +1 -2
  219. package/build/cjs/modules/pivotTable/useScrollPosition.js +1 -2
  220. package/build/cjs/modules/pivotTable/useTableClipping.js +6 -7
  221. package/build/cjs/modules/relativeItems/index.js +1 -4
  222. package/build/cjs/modules/renderValue.js +1 -2
  223. package/build/cjs/modules/utils.js +11 -2
  224. package/build/cjs/visualizations/config/adapters/dhis_highcharts/addTrendLines.js +3 -8
  225. package/build/cjs/visualizations/config/adapters/dhis_highcharts/axis.js +7 -10
  226. package/build/cjs/visualizations/config/adapters/dhis_highcharts/customAxes.js +2 -5
  227. package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/index.js +7 -8
  228. package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueBackgroundColor.js +1 -2
  229. package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/index.js +6 -7
  230. package/build/cjs/visualizations/config/adapters/dhis_highcharts/getFormatter.js +2 -3
  231. package/build/cjs/visualizations/config/adapters/dhis_highcharts/getSteps.js +2 -3
  232. package/build/cjs/visualizations/config/adapters/dhis_highcharts/getTrimmedConfig.js +3 -4
  233. package/build/cjs/visualizations/config/adapters/dhis_highcharts/index.js +8 -10
  234. package/build/cjs/visualizations/config/adapters/dhis_highcharts/legend.js +6 -7
  235. package/build/cjs/visualizations/config/adapters/dhis_highcharts/legendSet.js +22 -26
  236. package/build/cjs/visualizations/config/adapters/dhis_highcharts/plotOptions.js +8 -9
  237. package/build/cjs/visualizations/config/adapters/dhis_highcharts/series/index.js +18 -20
  238. package/build/cjs/visualizations/config/adapters/dhis_highcharts/series/pie.js +1 -4
  239. package/build/cjs/visualizations/config/adapters/dhis_highcharts/subtitle/index.js +1 -2
  240. package/build/cjs/visualizations/config/adapters/dhis_highcharts/yAxis/gauge.js +1 -3
  241. package/build/cjs/visualizations/config/index.js +11 -12
  242. package/build/cjs/visualizations/config/validators/dhis/index.js +3 -4
  243. package/build/cjs/visualizations/index.js +1 -4
  244. package/build/cjs/visualizations/store/adapters/dhis_highcharts/index.js +7 -8
  245. package/build/cjs/visualizations/store/index.js +15 -17
  246. package/build/cjs/visualizations/store/validators/dhis/index.js +5 -6
  247. package/build/cjs/visualizations/util/getFilterText.js +3 -6
  248. package/build/cjs/visualizations/util/shouldUseContrastColor.js +1 -2
  249. package/build/es/__demo__/OpenFileDialog.stories.js +17 -0
  250. package/build/es/__demo__/PivotTable.stories.js +165 -222
  251. package/build/es/api/__tests__/dimensions.spec.js +1 -2
  252. package/build/es/api/analytics/Analytics.js +8 -9
  253. package/build/es/api/analytics/AnalyticsBase.js +58 -77
  254. package/build/es/api/analytics/AnalyticsRequest.js +1 -2
  255. package/build/es/api/analytics/AnalyticsRequestBase.js +18 -21
  256. package/build/es/api/analytics/AnalyticsRequestPropertiesMixin.js +19 -38
  257. package/build/es/api/analytics/AnalyticsResponseHeader.js +5 -7
  258. package/build/es/api/analytics/__tests__/AnalyticsBase.spec.js +8 -10
  259. package/build/es/api/analytics/__tests__/AnalyticsRequest.spec.js +8 -2
  260. package/build/es/api/analytics/utils.js +11 -17
  261. package/build/es/api/dimensions.js +119 -148
  262. package/build/es/api/expression.js +39 -60
  263. package/build/es/api/organisationUnits.js +23 -35
  264. package/build/es/components/AboutAOUnit/AboutAOUnit.js +11 -18
  265. package/build/es/components/CachedDataQueryProvider.js +6 -7
  266. package/build/es/components/DashboardPluginWrapper/DashboardPluginWrapper.js +17 -20
  267. package/build/es/components/DataDimension/Calculation/CalculationModal.js +43 -59
  268. package/build/es/components/DataDimension/Calculation/DataElementOption.js +5 -6
  269. package/build/es/components/DataDimension/Calculation/DataElementSelector.js +28 -36
  270. package/build/es/components/DataDimension/Calculation/DndContext.js +28 -35
  271. package/build/es/components/DataDimension/Calculation/DraggingItem.js +5 -6
  272. package/build/es/components/DataDimension/Calculation/DropZone.js +4 -5
  273. package/build/es/components/DataDimension/Calculation/FormulaField.js +29 -32
  274. package/build/es/components/DataDimension/Calculation/FormulaItem.js +13 -14
  275. package/build/es/components/DataDimension/Calculation/MathOperatorSelector.js +23 -29
  276. package/build/es/components/DataDimension/Calculation/Operator.js +6 -7
  277. package/build/es/components/DataDimension/DataDimension.js +19 -30
  278. package/build/es/components/DataDimension/Info/CalculationInfo.js +13 -20
  279. package/build/es/components/DataDimension/Info/DataElementInfo.js +23 -36
  280. package/build/es/components/DataDimension/Info/DataElementOperandInfo.js +29 -42
  281. package/build/es/components/DataDimension/Info/DataSetInfo.js +26 -39
  282. package/build/es/components/DataDimension/Info/EventDataItemInfo.js +21 -34
  283. package/build/es/components/DataDimension/Info/IndicatorInfo.js +20 -30
  284. package/build/es/components/DataDimension/Info/InfoPopover.js +6 -7
  285. package/build/es/components/DataDimension/Info/InfoTable.js +39 -52
  286. package/build/es/components/DataDimension/Info/OptionInfo.js +13 -20
  287. package/build/es/components/DataDimension/Info/ProgramIndicatorInfo.js +45 -56
  288. package/build/es/components/DataDimension/ItemOptionsSelector/ItemOptionsSelector.js +21 -30
  289. package/build/es/components/DataDimension/ItemSelector/DataTypeSelector.js +6 -7
  290. package/build/es/components/DataDimension/ItemSelector/DetailSelector.js +5 -6
  291. package/build/es/components/DataDimension/ItemSelector/GroupSelector.js +9 -10
  292. package/build/es/components/DataDimension/ItemSelector/ItemSelector.js +85 -102
  293. package/build/es/components/DataDimension/ItemSelector/MetricSelector.js +5 -6
  294. package/build/es/components/DataDimension/SourceEmptyPlaceholder.js +10 -13
  295. package/build/es/components/DataDimension/TransferOption.js +35 -39
  296. package/build/es/components/DimensionMenu.js +13 -14
  297. package/build/es/components/DimensionsPanel/DimensionsPanel.js +7 -7
  298. package/build/es/components/DimensionsPanel/List/DimensionItem.js +11 -11
  299. package/build/es/components/DimensionsPanel/List/DimensionList.js +11 -9
  300. package/build/es/components/DimensionsPanel/List/OptionsButton.js +8 -11
  301. package/build/es/components/DimensionsPanel/List/RecommendedIcon.js +10 -13
  302. package/build/es/components/DimensionsPanel/List/__tests__/DimensionItem.spec.js +47 -40
  303. package/build/es/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +110 -114
  304. package/build/es/components/DimensionsPanel/__tests__/DimensionsPanel.spec.js +35 -32
  305. package/build/es/components/DynamicDimension/DynamicDimension.js +9 -13
  306. package/build/es/components/DynamicDimension/ItemSelector.js +24 -36
  307. package/build/es/components/FileMenu/DeleteDialog.js +10 -14
  308. package/build/es/components/FileMenu/FileMenu.js +18 -28
  309. package/build/es/components/FileMenu/GetLinkDialog.js +7 -7
  310. package/build/es/components/FileMenu/RenameDialog.js +12 -19
  311. package/build/es/components/FileMenu/SaveAsDialog.js +12 -19
  312. package/build/es/components/FileMenu/__tests__/DeleteDialog.spec.js +23 -26
  313. package/build/es/components/FileMenu/__tests__/FileMenu.spec.js +56 -32
  314. package/build/es/components/FileMenu/__tests__/GetLinkDialog.spec.js +34 -38
  315. package/build/es/components/FileMenu/__tests__/RenameDialog.spec.js +18 -12
  316. package/build/es/components/FileMenu/__tests__/SaveAsDialog.spec.js +43 -36
  317. package/build/es/components/FileMenu/utils.js +10 -12
  318. package/build/es/components/Filter/Filter.js +21 -27
  319. package/build/es/components/Filter/__tests__/Filter.spec.js +28 -33
  320. package/build/es/components/Interpretations/InterpretationModal/Comment.js +7 -8
  321. package/build/es/components/Interpretations/InterpretationModal/CommentAddForm.js +9 -13
  322. package/build/es/components/Interpretations/InterpretationModal/CommentDeleteButton.js +9 -13
  323. package/build/es/components/Interpretations/InterpretationModal/CommentUpdateForm.js +11 -15
  324. package/build/es/components/Interpretations/InterpretationModal/InterpretationModal.js +18 -23
  325. package/build/es/components/Interpretations/InterpretationModal/InterpretationThread.js +11 -12
  326. package/build/es/components/Interpretations/InterpretationsUnit/InterpretationForm.js +11 -15
  327. package/build/es/components/Interpretations/InterpretationsUnit/InterpretationList.js +10 -11
  328. package/build/es/components/Interpretations/InterpretationsUnit/InterpretationsUnit.js +22 -31
  329. package/build/es/components/Interpretations/common/Interpretation/Interpretation.js +12 -13
  330. package/build/es/components/Interpretations/common/Interpretation/InterpretationDeleteButton.js +7 -11
  331. package/build/es/components/Interpretations/common/Interpretation/InterpretationSharingLink.js +4 -5
  332. package/build/es/components/Interpretations/common/Interpretation/InterpretationUpdateForm.js +14 -21
  333. package/build/es/components/Interpretations/common/Interpretation/useLike.js +5 -6
  334. package/build/es/components/Interpretations/common/Message/Message.js +6 -7
  335. package/build/es/components/Interpretations/common/Message/MessageButtonStrip.js +8 -11
  336. package/build/es/components/Interpretations/common/Message/MessageEditorContainer.js +18 -21
  337. package/build/es/components/Interpretations/common/Message/MessageIconButton.js +34 -40
  338. package/build/es/components/Interpretations/common/Message/MessageStatsBar.js +8 -11
  339. package/build/es/components/LegendKey/LegendKey.js +3 -4
  340. package/build/es/components/OfflineTooltip.js +18 -26
  341. package/build/es/components/OpenFileDialog/CreatedByFilter.js +26 -25
  342. package/build/es/components/OpenFileDialog/CustomSelectOption.js +23 -26
  343. package/build/es/components/OpenFileDialog/DateField.js +3 -4
  344. package/build/es/components/OpenFileDialog/FileList.js +19 -22
  345. package/build/es/components/OpenFileDialog/NameFilter.js +15 -21
  346. package/build/es/components/OpenFileDialog/OpenFileDialog.js +49 -78
  347. package/build/es/components/OpenFileDialog/PaginationControls.js +22 -28
  348. package/build/es/components/OpenFileDialog/VisTypeFilter.js +64 -36
  349. package/build/es/components/OpenFileDialog/__tests__/OpenFileDialog.spec.js +49 -0
  350. package/build/es/components/Options/VisualizationOptions.js +34 -44
  351. package/build/es/components/OrgUnitDimension/OrgUnitDimension.js +37 -58
  352. package/build/es/components/OrgUnitDimension/__tests__/OrgUnitDimension.spec.js +77 -43
  353. package/build/es/components/PeriodDimension/FixedPeriodFilter.js +17 -25
  354. package/build/es/components/PeriodDimension/FixedPeriodSelect.js +14 -19
  355. package/build/es/components/PeriodDimension/PeriodDimension.js +9 -12
  356. package/build/es/components/PeriodDimension/PeriodTransfer.js +48 -61
  357. package/build/es/components/PeriodDimension/RelativePeriodFilter.js +25 -30
  358. package/build/es/components/PeriodDimension/__tests__/FixedPeriodSingleSelect.spec.js +13 -20
  359. package/build/es/components/PeriodDimension/__tests__/PeriodDimension.spec.js +26 -22
  360. package/build/es/components/PeriodDimension/utils/fixedPeriods.js +6 -7
  361. package/build/es/components/PeriodDimension/utils/index.js +1 -5
  362. package/build/es/components/PivotTable/PivotTable.js +7 -8
  363. package/build/es/components/PivotTable/PivotTableBody.js +20 -29
  364. package/build/es/components/PivotTable/PivotTableCell.js +8 -12
  365. package/build/es/components/PivotTable/PivotTableClippedAxis.js +14 -17
  366. package/build/es/components/PivotTable/PivotTableColumnHeaderCell.js +7 -8
  367. package/build/es/components/PivotTable/PivotTableColumnHeaders.js +22 -29
  368. package/build/es/components/PivotTable/PivotTableContainer.js +5 -6
  369. package/build/es/components/PivotTable/PivotTableDimensionLabelCell.js +4 -5
  370. package/build/es/components/PivotTable/PivotTableEmptyCell.js +3 -4
  371. package/build/es/components/PivotTable/PivotTableEmptyRow.js +4 -5
  372. package/build/es/components/PivotTable/PivotTableEngineContext.js +4 -5
  373. package/build/es/components/PivotTable/PivotTableHead.js +13 -16
  374. package/build/es/components/PivotTable/PivotTableHeaderCell.js +8 -9
  375. package/build/es/components/PivotTable/PivotTableRow.js +20 -27
  376. package/build/es/components/PivotTable/PivotTableRowHeaderCell.js +5 -6
  377. package/build/es/components/PivotTable/PivotTableSortIcon.js +4 -5
  378. package/build/es/components/PivotTable/PivotTableTitleRow.js +18 -22
  379. package/build/es/components/PivotTable/PivotTableTitleRows.js +4 -5
  380. package/build/es/components/PivotTable/PivotTableValueCell.js +5 -6
  381. package/build/es/components/RichText/Editor/Editor.js +69 -83
  382. package/build/es/components/RichText/Editor/__tests__/Editor.spec.js +7 -8
  383. package/build/es/components/RichText/Parser/Parser.js +4 -8
  384. package/build/es/components/RichText/Parser/__tests__/MdParser.spec.js +1 -1
  385. package/build/es/components/RichText/Parser/__tests__/Parser.spec.js +21 -22
  386. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuBar.js +20 -23
  387. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuDropdown.js +7 -11
  388. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuList.js +8 -15
  389. package/build/es/components/Toolbar/HoverMenuBar/HoverMenuListItem.js +10 -14
  390. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +57 -48
  391. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +7 -7
  392. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +27 -20
  393. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +21 -15
  394. package/build/es/components/Toolbar/HoverMenuBar/__tests__/__snapshots__/HoverMenuList.spec.js.snap +63 -0
  395. package/build/es/components/Toolbar/InterpretationsAndDetailsToggler.js +17 -21
  396. package/build/es/components/Toolbar/Toolbar.js +10 -16
  397. package/build/es/components/Toolbar/ToolbarSidebar.js +12 -18
  398. package/build/es/components/Toolbar/UpdateButton.js +18 -24
  399. package/build/es/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +18 -17
  400. package/build/es/components/Toolbar/__tests__/Toolbar.spec.js +7 -7
  401. package/build/es/components/Toolbar/__tests__/ToolbarSidebar.spec.js +13 -10
  402. package/build/es/components/Toolbar/__tests__/UpdateButton.spec.js +15 -13
  403. package/build/es/components/TransferOption.js +14 -15
  404. package/build/es/components/TranslationDialog/TranslationModal/LocalesSelect.js +19 -27
  405. package/build/es/components/TranslationDialog/TranslationModal/TranslationForm.js +16 -23
  406. package/build/es/components/TranslationDialog/TranslationModal/TranslationModal.js +8 -8
  407. package/build/es/components/TranslationDialog/TranslationModal/TranslationModalActions.js +18 -27
  408. package/build/es/components/TranslationDialog/TranslationModal/__tests__/TranslationModal.spec.js +24 -15
  409. package/build/es/components/TranslationDialog/TranslationModal/useTranslationsResults.js +3 -4
  410. package/build/es/components/UserMention/UserList.js +6 -7
  411. package/build/es/components/UserMention/UserMentionWrapper.js +12 -18
  412. package/build/es/components/UserMention/useUserSearchResults.js +12 -16
  413. package/build/es/components/VisTypeIcon.js +5 -6
  414. package/build/es/locales/ar_IQ/translations.json +20 -11
  415. package/build/es/locales/cs/translations.json +2 -0
  416. package/build/es/locales/en/translations.json +1 -0
  417. package/build/es/locales/es/translations.json +2 -0
  418. package/build/es/locales/fr/translations.json +2 -0
  419. package/build/es/locales/id/translations.json +20 -11
  420. package/build/es/locales/lo/translations.json +2 -0
  421. package/build/es/locales/nb/translations.json +2 -0
  422. package/build/es/locales/prs/translations.json +2 -0
  423. package/build/es/locales/ps/translations.json +2 -0
  424. package/build/es/locales/pt/translations.json +2 -0
  425. package/build/es/locales/pt_BR/translations.json +2 -0
  426. package/build/es/locales/ru/translations.json +2 -0
  427. package/build/es/locales/si/translations.json +20 -11
  428. package/build/es/locales/sv/translations.json +20 -11
  429. package/build/es/locales/tet/translations.json +20 -11
  430. package/build/es/locales/tg/translations.json +2 -0
  431. package/build/es/locales/uk/translations.json +2 -0
  432. package/build/es/locales/ur/translations.json +2 -0
  433. package/build/es/locales/uz_UZ_Cyrl/translations.json +2 -0
  434. package/build/es/locales/uz_UZ_Latn/translations.json +4 -2
  435. package/build/es/locales/vi/translations.json +2 -0
  436. package/build/es/locales/zh/translations.json +2 -0
  437. package/build/es/locales/zh_CN/translations.json +17 -15
  438. package/build/es/modules/__tests__/expressions.spec.js +4 -5
  439. package/build/es/modules/__tests__/isNumeric.spec.js +31 -0
  440. package/build/es/modules/dimensionListItem.js +4 -5
  441. package/build/es/modules/expressions.js +3 -9
  442. package/build/es/modules/getPWAInstallationStatus.js +7 -9
  443. package/build/es/modules/layout/dimensionCreate.js +1 -3
  444. package/build/es/modules/layout/dimensionIsValid.js +3 -4
  445. package/build/es/modules/legends.js +5 -6
  446. package/build/es/modules/outliers/index.js +2 -3
  447. package/build/es/modules/outliers/iqr.js +4 -6
  448. package/build/es/modules/outliers/modZScore.js +6 -14
  449. package/build/es/modules/outliers/zScore.js +3 -4
  450. package/build/es/modules/pivotTable/AdaptiveClippingController.js +12 -16
  451. package/build/es/modules/pivotTable/PivotTableEngine.js +48 -59
  452. package/build/es/modules/pivotTable/clipAxis.js +7 -8
  453. package/build/es/modules/pivotTable/clipPartitionedAxis.js +9 -10
  454. package/build/es/modules/pivotTable/getHeaderForDisplay.js +8 -9
  455. package/build/es/modules/pivotTable/measureText.js +7 -9
  456. package/build/es/modules/pivotTable/useParentSize.js +1 -2
  457. package/build/es/modules/pivotTable/useScrollPosition.js +1 -2
  458. package/build/es/modules/pivotTable/useTableClipping.js +6 -7
  459. package/build/es/modules/relativeItems/index.js +1 -4
  460. package/build/es/modules/renderValue.js +1 -2
  461. package/build/es/modules/utils.js +9 -1
  462. package/build/es/visualizations/config/adapters/dhis_highcharts/addTrendLines.js +3 -8
  463. package/build/es/visualizations/config/adapters/dhis_highcharts/axis.js +2 -5
  464. package/build/es/visualizations/config/adapters/dhis_highcharts/customAxes.js +2 -5
  465. package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/index.js +7 -8
  466. package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueBackgroundColor.js +1 -2
  467. package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/index.js +6 -7
  468. package/build/es/visualizations/config/adapters/dhis_highcharts/getFormatter.js +1 -1
  469. package/build/es/visualizations/config/adapters/dhis_highcharts/getSteps.js +1 -1
  470. package/build/es/visualizations/config/adapters/dhis_highcharts/getTrimmedConfig.js +3 -4
  471. package/build/es/visualizations/config/adapters/dhis_highcharts/index.js +7 -8
  472. package/build/es/visualizations/config/adapters/dhis_highcharts/legend.js +6 -7
  473. package/build/es/visualizations/config/adapters/dhis_highcharts/legendSet.js +22 -26
  474. package/build/es/visualizations/config/adapters/dhis_highcharts/plotOptions.js +8 -9
  475. package/build/es/visualizations/config/adapters/dhis_highcharts/series/index.js +18 -20
  476. package/build/es/visualizations/config/adapters/dhis_highcharts/series/pie.js +1 -4
  477. package/build/es/visualizations/config/adapters/dhis_highcharts/yAxis/gauge.js +1 -3
  478. package/build/es/visualizations/config/index.js +11 -12
  479. package/build/es/visualizations/config/validators/dhis/index.js +3 -4
  480. package/build/es/visualizations/index.js +1 -4
  481. package/build/es/visualizations/store/adapters/dhis_highcharts/index.js +7 -8
  482. package/build/es/visualizations/store/index.js +15 -17
  483. package/build/es/visualizations/store/validators/dhis/index.js +5 -6
  484. package/build/es/visualizations/util/getFilterText.js +3 -6
  485. package/build/es/visualizations/util/shouldUseContrastColor.js +1 -2
  486. package/package.json +13 -15
  487. package/build/cjs/components/OrgUnitDimension/__tests__/__snapshots__/OrgUnitDimension.spec.js.snap +0 -89
  488. package/build/cjs/components/PeriodDimension/__tests__/PeriodSelector.spec.js +0 -29
  489. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap +0 -93
  490. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +0 -17
  491. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +0 -89
  492. package/build/es/components/OrgUnitDimension/__tests__/__snapshots__/OrgUnitDimension.spec.js.snap +0 -89
  493. package/build/es/components/PeriodDimension/__tests__/PeriodSelector.spec.js +0 -26
  494. package/build/es/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap +0 -93
  495. package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +0 -17
  496. package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +0 -89
@@ -6,12 +6,11 @@ import React from 'react';
6
6
  import i18n from '../../locales/index.js';
7
7
  import { styles } from './GetLinkDialog.styles.js';
8
8
  import { supportedFileTypes, appPathFor } from './utils.js';
9
- export const GetLinkDialog = _ref => {
10
- let {
11
- type,
12
- id,
13
- onClose
14
- } = _ref;
9
+ export const GetLinkDialog = ({
10
+ type,
11
+ id,
12
+ onClose
13
+ }) => {
15
14
  const {
16
15
  apiVersion,
17
16
  baseUrl
@@ -32,7 +31,8 @@ export const GetLinkDialog = _ref => {
32
31
  }, appUrl), /*#__PURE__*/React.createElement(Button, {
33
32
  icon: /*#__PURE__*/React.createElement(IconCopy24, null),
34
33
  small: true,
35
- onClick: () => navigator.clipboard.writeText(appUrl)
34
+ onClick: () => navigator.clipboard.writeText(appUrl),
35
+ "aria-label": i18n.t('Copy to clipboard')
36
36
  }))), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, null, /*#__PURE__*/React.createElement(Button, {
37
37
  onClick: onClose,
38
38
  secondary: true
@@ -5,13 +5,12 @@ import React, { useState } from 'react';
5
5
  import i18n from '../../locales/index.js';
6
6
  import { modalStyles } from './FileMenu.styles.js';
7
7
  import { supportedFileTypes, labelForFileType } from './utils.js';
8
- export const RenameDialog = _ref => {
9
- let {
10
- type,
11
- object,
12
- onClose,
13
- onRename
14
- } = _ref;
8
+ export const RenameDialog = ({
9
+ type,
10
+ object,
11
+ onClose,
12
+ onRename
13
+ }) => {
15
14
  const [name, setName] = useState(object.name);
16
15
  const [description, setDescription] = useState(object.description);
17
16
  const renameObject = () => {
@@ -34,23 +33,17 @@ export const RenameDialog = _ref => {
34
33
  label: i18n.t('Name'),
35
34
  required: true,
36
35
  value: name,
37
- onChange: _ref2 => {
38
- let {
39
- value
40
- } = _ref2;
41
- return setName(value);
42
- },
36
+ onChange: ({
37
+ value
38
+ }) => setName(value),
43
39
  dataTest: "file-menu-rename-modal-name"
44
40
  }), /*#__PURE__*/React.createElement(TextAreaField, {
45
41
  label: i18n.t('Description'),
46
42
  value: description,
47
43
  rows: 3,
48
- onChange: _ref3 => {
49
- let {
50
- value
51
- } = _ref3;
52
- return setDescription(value);
53
- },
44
+ onChange: ({
45
+ value
46
+ }) => setDescription(value),
54
47
  dataTest: "file-menu-rename-modal-description"
55
48
  }))), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, null, /*#__PURE__*/React.createElement(Button, {
56
49
  onClick: onClose,
@@ -6,13 +6,12 @@ import i18n from '../../locales/index.js';
6
6
  import { modalStyles } from './FileMenu.styles.js';
7
7
  import { supportedFileTypes, labelForFileType } from './utils.js';
8
8
  const NAME_MAXLENGTH = 230;
9
- export const SaveAsDialog = _ref => {
10
- let {
11
- type,
12
- object,
13
- onClose,
14
- onSaveAs
15
- } = _ref;
9
+ export const SaveAsDialog = ({
10
+ type,
11
+ object,
12
+ onClose,
13
+ onSaveAs
14
+ }) => {
16
15
  const [name, setName] = useState(object !== null && object !== void 0 && object.displayName || object !== null && object !== void 0 && object.name ? i18n.t('{{- objectName}} (copy)', {
17
16
  objectName: object.name
18
17
  }) : '');
@@ -38,23 +37,17 @@ export const SaveAsDialog = _ref => {
38
37
  }, /*#__PURE__*/React.createElement(InputField, {
39
38
  label: i18n.t('Name'),
40
39
  value: name,
41
- onChange: _ref2 => {
42
- let {
43
- value
44
- } = _ref2;
45
- return setName(value.substring(0, NAME_MAXLENGTH));
46
- },
40
+ onChange: ({
41
+ value
42
+ }) => setName(value.substring(0, NAME_MAXLENGTH)),
47
43
  dataTest: "file-menu-saveas-modal-name"
48
44
  }), /*#__PURE__*/React.createElement(TextAreaField, {
49
45
  label: i18n.t('Description'),
50
46
  value: description,
51
47
  rows: 3,
52
- onChange: _ref3 => {
53
- let {
54
- value
55
- } = _ref3;
56
- return setDescription(value);
57
- },
48
+ onChange: ({
49
+ value
50
+ }) => setDescription(value),
58
51
  dataTest: "file-menu-saveas-modal-description"
59
52
  }))), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, null, /*#__PURE__*/React.createElement(Button, {
60
53
  onClick: onClose,
@@ -1,33 +1,30 @@
1
- import { Button, Modal, ModalTitle } from '@dhis2/ui';
2
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
+ import userEvent from '@testing-library/user-event';
3
3
  import React from 'react';
4
4
  import { DeleteDialog } from '../DeleteDialog.js';
5
- describe('The FileMenu - DeleteDialog component', () => {
6
- let shallowDeleteDialog;
7
- let props;
8
- const onClose = jest.fn();
9
- const getDeleteDialogComponent = props => {
10
- if (!shallowDeleteDialog) {
11
- shallowDeleteDialog = shallow(/*#__PURE__*/React.createElement(DeleteDialog, props));
12
- }
13
- return shallowDeleteDialog;
5
+ describe('FileMenu - DeleteDialog component', () => {
6
+ const props = {
7
+ type: 'visualization',
8
+ id: 'delete-test',
9
+ onClose: jest.fn()
14
10
  };
15
- beforeEach(() => {
16
- shallowDeleteDialog = undefined;
17
- props = {
18
- type: 'visualization',
19
- id: 'delete-test',
20
- onClose
21
- };
11
+ test('renders a Modal component', () => {
12
+ render(/*#__PURE__*/React.createElement(DeleteDialog, props));
13
+ const modalComponent = screen.getByTestId('file-menu-delete-modal');
14
+ expect(modalComponent).toBeInTheDocument();
22
15
  });
23
- it('renders a Modal component', () => {
24
- expect(getDeleteDialogComponent(props).find(Modal)).toHaveLength(1);
16
+ test('renders a ModalTitle containing the type prop', () => {
17
+ render(/*#__PURE__*/React.createElement(DeleteDialog, props));
18
+ const modalTitleComponent = screen.getByText(`Delete ${props.type}`);
19
+ expect(modalTitleComponent).toBeInTheDocument();
25
20
  });
26
- it('renders a ModalTitle containing the type prop', () => {
27
- expect(getDeleteDialogComponent(props).find(ModalTitle).childAt(0).text()).toEqual(`Delete ${props.type}`);
28
- });
29
- it('calls the onClose callback when the Cancel button is clicked', () => {
30
- getDeleteDialogComponent(props).find(Button).first().simulate('click');
31
- expect(onClose).toHaveBeenCalled();
21
+ test('calls the onClose callback when the Cancel button is clicked', async () => {
22
+ const user = userEvent.setup();
23
+ render(/*#__PURE__*/React.createElement(DeleteDialog, props));
24
+ const cancelButton = screen.getByRole('button', {
25
+ name: 'Cancel'
26
+ });
27
+ await user.click(cancelButton);
28
+ expect(props.onClose).toHaveBeenCalledTimes(1);
32
29
  });
33
30
  });
@@ -1,5 +1,6 @@
1
1
  import { CustomDataProvider } from '@dhis2/app-runtime';
2
- import { render, fireEvent, screen, getByText } from '@testing-library/react';
2
+ import { render, screen, getByText } from '@testing-library/react';
3
+ import userEvent from '@testing-library/user-event';
3
4
  import '@testing-library/jest-dom';
4
5
  import React from 'react';
5
6
  import { HoverMenuBar } from '../../Toolbar/index.js';
@@ -13,7 +14,7 @@ jest.mock('../../TranslationDialog/TranslationModal/useTranslationsResults.js',
13
14
  fetching: true
14
15
  })
15
16
  }));
16
- describe('The FileMenu component ', () => {
17
+ describe('FileMenu component ', () => {
17
18
  const onDelete = jest.fn();
18
19
  const onError = jest.fn();
19
20
  const onNew = jest.fn();
@@ -51,8 +52,7 @@ describe('The FileMenu component ', () => {
51
52
  href: 'http://dhis2.org'
52
53
  }
53
54
  };
54
- const renderFileMenu = function () {
55
- let customProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
55
+ const renderFileMenu = (customProps = {}) => {
56
56
  const props = {
57
57
  ...baseProps,
58
58
  ...customProps
@@ -69,6 +69,19 @@ describe('The FileMenu component ', () => {
69
69
  userAccesses: [],
70
70
  userGroupAccesses: []
71
71
  }
72
+ },
73
+ visualizations: {
74
+ pager: {
75
+ page: 1,
76
+ pageSize: 50
77
+ },
78
+ visualizations: [{
79
+ id: 'vis1',
80
+ displayName: 'Visualization 1',
81
+ type: 'VISUALIZATION',
82
+ created: '2025-07-23T15:04:16.864',
83
+ lastUpdated: '2025-07-23T15:04:16.864'
84
+ }]
72
85
  }
73
86
  };
74
87
  return render(/*#__PURE__*/React.createElement(CustomDataProvider, {
@@ -76,7 +89,8 @@ describe('The FileMenu component ', () => {
76
89
  }, /*#__PURE__*/React.createElement(HoverMenuBar, null, /*#__PURE__*/React.createElement(FileMenu, props))));
77
90
  };
78
91
  const openDropdown = async () => {
79
- fireEvent.click(screen.getByTestId('dhis2-analytics-hovermenudropdown'));
92
+ const user = userEvent.setup();
93
+ await user.click(screen.getByTestId('dhis2-analytics-hovermenudropdown'));
80
94
  expect(await screen.findByTestId('file-menu-container')).toBeVisible();
81
95
  };
82
96
  const MENU_ITEMS = {
@@ -128,20 +142,20 @@ describe('The FileMenu component ', () => {
128
142
  }
129
143
  }
130
144
  };
131
- it('renders a button', () => {
145
+ test('renders a button', () => {
132
146
  renderFileMenu();
133
147
  expect(screen.getAllByTestId('dhis2-analytics-hovermenudropdown')).toHaveLength(1);
134
148
  const button = screen.getByTestId('dhis2-analytics-hovermenudropdown');
135
149
  expect(button).toBeVisible();
136
150
  expect(button).toHaveTextContent('File');
137
151
  });
138
- it('opens when clicking the button', async () => {
152
+ test('opens when clicking the button', async () => {
139
153
  renderFileMenu();
140
154
  expect(screen.queryByTestId('file-menu-container')).not.toBeInTheDocument();
141
155
  await openDropdown();
142
156
  expect(await screen.findByTestId('file-menu-container')).toBeVisible();
143
157
  });
144
- it('renders some enabled buttons regardless of the access settings', async () => {
158
+ test('renders some enabled buttons regardless of the access settings', async () => {
145
159
  renderFileMenu();
146
160
  await openDropdown();
147
161
  assertMenuItemsDisabledState([{
@@ -152,7 +166,7 @@ describe('The FileMenu component ', () => {
152
166
  disabled: false
153
167
  }]);
154
168
  });
155
- it('renders some disabled buttons when no fileObject is present', async () => {
169
+ test('renders some disabled buttons when no fileObject is present', async () => {
156
170
  renderFileMenu();
157
171
  await openDropdown();
158
172
  assertMenuItemsDisabledState([{
@@ -175,7 +189,7 @@ describe('The FileMenu component ', () => {
175
189
  disabled: true
176
190
  }]);
177
191
  });
178
- it('renders some enabled buttons when update access is granted', async () => {
192
+ test('renders some enabled buttons when update access is granted', async () => {
179
193
  const customProps = {
180
194
  fileObject: {
181
195
  id: 'test',
@@ -199,7 +213,7 @@ describe('The FileMenu component ', () => {
199
213
  disabled: false
200
214
  }]);
201
215
  });
202
- it('renders enabled Delete button when delete access is granted', async () => {
216
+ test('renders enabled Delete button when delete access is granted', async () => {
203
217
  const customProps = {
204
218
  fileObject: {
205
219
  id: 'test',
@@ -217,7 +231,7 @@ describe('The FileMenu component ', () => {
217
231
  disabled: false
218
232
  }]);
219
233
  });
220
- it('renders enabled Share button when manage access is granted', async () => {
234
+ test('renders enabled Share button when manage access is granted', async () => {
221
235
  const customProps = {
222
236
  fileObject: {
223
237
  id: 'test',
@@ -235,50 +249,56 @@ describe('The FileMenu component ', () => {
235
249
  disabled: false
236
250
  }]);
237
251
  });
238
- it('renders the OpenFileDialog component when the Open button is clicked', async () => {
252
+ test('renders the OpenFileDialog component when the Open button is clicked', async () => {
253
+ const user = userEvent.setup();
239
254
  renderFileMenu();
240
255
  await openDropdown();
241
- fireEvent.click(screen.getByTestId(MENU_ITEMS.OPEN.testId));
256
+ await user.click(screen.getByTestId(MENU_ITEMS.OPEN.testId));
242
257
  expect(await screen.findByText('Open a visualization', {
243
258
  selector: 'h1'
244
259
  })).toBeVisible();
245
260
  });
246
- it('renders the RenameDialog when the Rename button is clicked', async () => {
261
+ test('renders the RenameDialog when the Rename button is clicked', async () => {
262
+ const user = userEvent.setup();
247
263
  renderFileMenu(fullAccessProps);
248
264
  await openDropdown();
249
- fireEvent.click(screen.getByTestId(MENU_ITEMS.RENAME.testId));
265
+ await user.click(screen.getByTestId(MENU_ITEMS.RENAME.testId));
250
266
  expect(await screen.findByText('Rename visualization', {
251
267
  selector: 'h1'
252
268
  })).toBeVisible();
253
269
  });
254
- it('renders the TranslationDialog when the Translate button is clicked', async () => {
270
+ test('renders the TranslationDialog when the Translate button is clicked', async () => {
271
+ const user = userEvent.setup();
255
272
  renderFileMenu(fullAccessProps);
256
273
  await openDropdown();
257
- fireEvent.click(screen.getByTestId(MENU_ITEMS.TRANSLATE.testId));
274
+ await user.click(screen.getByTestId(MENU_ITEMS.TRANSLATE.testId));
258
275
  expect(await screen.findByText('Translate', {
259
276
  exact: false,
260
277
  selector: 'h1'
261
278
  })).toBeVisible();
262
279
  });
263
- it('renders the SharingDialog when the Share button is clicked', async () => {
280
+ test('renders the SharingDialog when the Share button is clicked', async () => {
281
+ const user = userEvent.setup();
264
282
  renderFileMenu(fullAccessProps);
265
283
  await openDropdown();
266
- fireEvent.click(screen.getByTestId(MENU_ITEMS.SHARE.testId));
284
+ await user.click(screen.getByTestId(MENU_ITEMS.SHARE.testId));
267
285
  expect(await screen.findByText('Sharing and access', {
268
286
  selector: 'h1'
269
287
  })).toBeVisible();
270
288
  });
271
- it('renders the GetLinkDialog when the Get link button is clicked', async () => {
289
+ test('renders the GetLinkDialog when the Get link button is clicked', async () => {
290
+ const user = userEvent.setup();
272
291
  const url = 'http://localhost/dhis-web-data-visualizer/#/test';
273
292
  renderFileMenu(fullAccessProps);
274
293
  await openDropdown();
275
- fireEvent.click(screen.getByTestId(MENU_ITEMS.GET_LINK.testId));
294
+ await user.click(screen.getByTestId(MENU_ITEMS.GET_LINK.testId));
276
295
  expect(await screen.findByTestId('dhis2-uicore-modal')).toBeVisible();
277
296
  expect(screen.getByRole('link', {
278
297
  name: url
279
298
  })).toHaveAttribute('href', url);
280
299
  });
281
- it('renders the DeleteDialog when the Delete button is clicked', async () => {
300
+ test('renders the DeleteDialog when the Delete button is clicked', async () => {
301
+ const user = userEvent.setup();
282
302
  const customProps = {
283
303
  fileObject: {
284
304
  id: 'delete-test',
@@ -291,20 +311,22 @@ describe('The FileMenu component ', () => {
291
311
  };
292
312
  renderFileMenu(customProps);
293
313
  await openDropdown();
294
- fireEvent.click(screen.getByTestId(MENU_ITEMS.DELETE.testId));
314
+ await user.click(screen.getByTestId(MENU_ITEMS.DELETE.testId));
295
315
  expect(await screen.findByText('Delete visualization', {
296
316
  selector: 'h1'
297
317
  })).toBeVisible();
298
318
  });
299
- it('renders the SaveAsDialog when the Save as… button is clicked', async () => {
319
+ test('renders the SaveAsDialog when the Save as… button is clicked', async () => {
320
+ const user = userEvent.setup();
300
321
  renderFileMenu(fullAccessProps);
301
322
  await openDropdown();
302
- fireEvent.click(screen.getByTestId(MENU_ITEMS.SAVE_AS.testId));
323
+ await user.click(screen.getByTestId(MENU_ITEMS.SAVE_AS.testId));
303
324
  expect(await screen.findByText('Save visualization as', {
304
325
  selector: 'h1'
305
326
  })).toBeVisible();
306
327
  });
307
- it('renders the SaveAsDialog when the Save… button is clicked but no fileObject is present', async () => {
328
+ test('renders the SaveAsDialog when the Save… button is clicked but no fileObject is present', async () => {
329
+ const user = userEvent.setup();
308
330
  const customProps = {
309
331
  fileObject: {
310
332
  // NOTE: no `id` field
@@ -315,22 +337,24 @@ describe('The FileMenu component ', () => {
315
337
  };
316
338
  renderFileMenu(customProps);
317
339
  await openDropdown();
318
- fireEvent.click(screen.getByTestId(MENU_ITEMS.SAVE.testId));
340
+ await user.click(screen.getByTestId(MENU_ITEMS.SAVE.testId));
319
341
  expect(await screen.findByText('Save visualization as', {
320
342
  selector: 'h1'
321
343
  })).toBeVisible();
322
344
  });
323
- it('calls the onSave callback when the Save button is clicked and a fileObject is present', async () => {
345
+ test('calls the onSave callback when the Save button is clicked and a fileObject is present', async () => {
346
+ const user = userEvent.setup();
324
347
  renderFileMenu(fullAccessProps);
325
348
  await openDropdown();
326
- fireEvent.click(screen.getByTestId(MENU_ITEMS.SAVE.testId));
349
+ await user.click(screen.getByTestId(MENU_ITEMS.SAVE.testId));
327
350
  expect(screen.queryByText('Open a visualization')).not.toBeVisible();
328
351
  expect(onSave).toHaveBeenCalledTimes(1);
329
352
  });
330
- it('calls the onNew callback when the New button is clicked', async () => {
353
+ test('calls the onNew callback when the New button is clicked', async () => {
354
+ const user = userEvent.setup();
331
355
  renderFileMenu();
332
356
  await openDropdown();
333
- fireEvent.click(screen.getByTestId(MENU_ITEMS.NEW.testId));
357
+ await user.click(screen.getByTestId(MENU_ITEMS.NEW.testId));
334
358
  expect(screen.queryByText('Open a visualization')).not.toBeVisible();
335
359
  expect(onNew).toHaveBeenCalledTimes(1);
336
360
  });
@@ -1,5 +1,5 @@
1
- import { Button, Modal } from '@dhis2/ui';
2
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
+ import userEvent from '@testing-library/user-event';
3
3
  import React from 'react';
4
4
  import { GetLinkDialog } from '../GetLinkDialog.js';
5
5
  const testBaseUrl = 'http://host.tld/test/';
@@ -42,49 +42,45 @@ const tests = [{
42
42
  id: 'map-id-2',
43
43
  expected: 'http://localhost/dhis-web-maps/#/map-id-2'
44
44
  }];
45
- describe('The FileMenu - GetLinkDialog component', () => {
46
- let shallowGetLinkDialog;
45
+ describe('FileMenu - GetLinkDialog component', () => {
47
46
  const onClose = jest.fn();
48
- const getGetLinkDialogComponent = props => {
49
- if (!shallowGetLinkDialog) {
50
- shallowGetLinkDialog = shallow(/*#__PURE__*/React.createElement(GetLinkDialog, props));
51
- }
52
- return shallowGetLinkDialog;
47
+ const props = {
48
+ type: tests[0].type,
49
+ id: tests[0].id,
50
+ onClose
53
51
  };
54
- beforeEach(() => {
55
- shallowGetLinkDialog = undefined;
52
+ test('renders a Modal component', () => {
53
+ render(/*#__PURE__*/React.createElement(GetLinkDialog, props));
54
+ const modalComponent = screen.getByTestId('dhis2-uicore-modal');
55
+ expect(modalComponent).toBeInTheDocument();
56
+ expect(screen.getByLabelText('Close modal dialog')).toBeInTheDocument();
56
57
  });
57
- it('renders a Modal component', () => {
58
- expect(getGetLinkDialogComponent({
59
- type: tests[0].type,
60
- id: tests[0].id
61
- }).find(Modal)).toHaveLength(1);
58
+ test('calls the onClose callback when the Close button is clicked', async () => {
59
+ const user = userEvent.setup();
60
+ render(/*#__PURE__*/React.createElement(GetLinkDialog, props));
61
+ const closeButton = screen.getByRole('button', {
62
+ name: 'Close'
63
+ });
64
+ await user.click(closeButton);
65
+ expect(onClose).toHaveBeenCalledTimes(1);
62
66
  });
63
- test.each(tests)('renders a <a> tag containing the correct app path and id', _ref => {
64
- let {
65
- apiVersion,
66
- baseUrl,
67
- type,
68
- id,
69
- expected
70
- } = _ref;
67
+ test.each(tests)('renders a <a> tag containing the correct app path and id', ({
68
+ apiVersion,
69
+ baseUrl,
70
+ type,
71
+ id,
72
+ expected
73
+ }) => {
71
74
  mockUseConfig.mockReturnValueOnce({
72
75
  apiVersion: apiVersion || 42,
73
76
  baseUrl
74
77
  });
75
- const href = getGetLinkDialogComponent({
76
- type,
77
- id,
78
- onClose
79
- }).find('a').prop('href');
80
- expect(href).toMatch(expected);
81
- });
82
- it('calls the onClose callback when the Close button is clicked', () => {
83
- getGetLinkDialogComponent({
84
- type: tests[0].type,
85
- id: tests[0].id,
86
- onClose
87
- }).find(Button).at(1).simulate('click');
88
- expect(onClose).toHaveBeenCalled();
78
+ render(/*#__PURE__*/React.createElement(GetLinkDialog, {
79
+ onClose: onClose,
80
+ type: type,
81
+ id: id
82
+ }));
83
+ const anchorElement = screen.getByRole('link');
84
+ expect(anchorElement.href).toMatch(expected);
89
85
  });
90
86
  });
@@ -1,9 +1,9 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
- import '@testing-library/jest-dom';
3
- import { render, fireEvent, screen, within } from '@testing-library/react';
2
+ import { render, screen, within } from '@testing-library/react';
3
+ import userEvent from '@testing-library/user-event';
4
4
  import React from 'react';
5
5
  import { RenameDialog } from '../RenameDialog.js';
6
- describe('The FileMenu - RenameDialog component', () => {
6
+ describe('FileMenu - RenameDialog component', () => {
7
7
  const onClose = jest.fn();
8
8
  const onRename = jest.fn();
9
9
  const props = {
@@ -18,18 +18,18 @@ describe('The FileMenu - RenameDialog component', () => {
18
18
  jest.resetAllMocks();
19
19
  jest.clearAllMocks();
20
20
  });
21
- it('renders a Modal component with the correct heading', () => {
21
+ test('renders a Modal component with the correct heading', () => {
22
22
  render(/*#__PURE__*/React.createElement(RenameDialog, props));
23
23
  expect(screen.getAllByTestId('file-menu-rename-modal')).toHaveLength(1);
24
24
  expect(screen.getByRole('heading')).toHaveTextContent('Rename visualization');
25
25
  });
26
- it('renders a InputField for name', () => {
26
+ test('renders a InputField for name', () => {
27
27
  render(/*#__PURE__*/React.createElement(RenameDialog, props));
28
28
  expect(screen.getByTestId('file-menu-rename-modal-name')).toBeInTheDocument();
29
29
  expect(screen.getByText('Name')).toBeInTheDocument();
30
30
  expect(screen.getByText('Name')).toBeVisible();
31
31
  });
32
- it('renders a InputField for name with prefilled value if name is in object prop', () => {
32
+ test('renders a InputField for name with prefilled value if name is in object prop', () => {
33
33
  render(/*#__PURE__*/React.createElement(RenameDialog, _extends({}, props, {
34
34
  object: {
35
35
  ...props.object,
@@ -41,7 +41,7 @@ describe('The FileMenu - RenameDialog component', () => {
41
41
  expect(inputElement).toBeInTheDocument();
42
42
  expect(inputElement).toHaveValue('Vis test');
43
43
  });
44
- it('renders a TextAreaField for description', () => {
44
+ test('renders a TextAreaField for description', () => {
45
45
  render(/*#__PURE__*/React.createElement(RenameDialog, props));
46
46
 
47
47
  // Locate the label by its text
@@ -52,7 +52,7 @@ describe('The FileMenu - RenameDialog component', () => {
52
52
  expect(descriptionField).toBeInTheDocument();
53
53
  expect(descriptionField).toBeVisible();
54
54
  });
55
- it('renders a TextAreaField for description with prefilled value if description is in object prop', () => {
55
+ test('renders a TextAreaField for description with prefilled value if description is in object prop', () => {
56
56
  render(/*#__PURE__*/React.createElement(RenameDialog, _extends({}, props, {
57
57
  object: {
58
58
  ...props.object,
@@ -68,15 +68,21 @@ describe('The FileMenu - RenameDialog component', () => {
68
68
  expect(descriptionField).toBeInTheDocument();
69
69
  expect(descriptionField).toHaveValue('Long explanation of the visualization');
70
70
  });
71
- it('calls the onClose callback when the Cancel button is clicked', async () => {
71
+ test('calls the onClose callback when the Cancel button is clicked', async () => {
72
+ const user = userEvent.setup();
72
73
  render(/*#__PURE__*/React.createElement(RenameDialog, props));
73
- await fireEvent.click(screen.getByTestId('file-menu-rename-modal-cancel'));
74
+ await user.click(screen.getByRole('button', {
75
+ name: 'Cancel'
76
+ }));
74
77
  expect(onClose).toHaveBeenCalled();
75
78
  expect(onRename).not.toHaveBeenCalled();
76
79
  });
77
- it('calls the onRename callback when the Rename button is clicked', async () => {
80
+ test('calls the onRename callback when the Rename button is clicked', async () => {
81
+ const user = userEvent.setup();
78
82
  render(/*#__PURE__*/React.createElement(RenameDialog, props));
79
- await fireEvent.click(screen.getByTestId('file-menu-rename-modal-rename'));
83
+ await user.click(screen.getByRole('button', {
84
+ name: 'Rename'
85
+ }));
80
86
  expect(onRename).toHaveBeenCalled();
81
87
  expect(onClose).toHaveBeenCalled();
82
88
  });