@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
@@ -1,55 +1,89 @@
1
- import { shallow } from 'enzyme';
1
+ import { CustomDataProvider } from '@dhis2/app-runtime';
2
+ import { render, screen } from '@testing-library/react';
3
+ import userEvent from '@testing-library/user-event';
2
4
  import React from 'react';
3
5
  import OrgUnitDimension from '../OrgUnitDimension.js';
4
- describe('The OrgUnitDimension component', () => {
5
- let props;
6
- let shallowOrgUnitDimension;
7
- const getWrapper = () => {
8
- if (!shallowOrgUnitDimension) {
9
- shallowOrgUnitDimension = shallow(/*#__PURE__*/React.createElement(OrgUnitDimension, props));
10
- }
11
- return shallowOrgUnitDimension;
6
+ jest.mock('@dhis2-ui/organisation-unit-tree', () => {
7
+ const lib = jest.requireActual('@dhis2-ui/organisation-unit-tree');
8
+ return {
9
+ ...lib,
10
+ OrganisationUnitTree: () => /*#__PURE__*/React.createElement("div", null, "Org unit tree component mock")
12
11
  };
13
- beforeEach(() => {
14
- props = {
15
- roots: [],
16
- selected: [],
17
- onSelect: jest.fn(),
18
- hideGroupSelect: false,
19
- hideLevelSelect: false,
20
- hideUserOrgUnits: false,
21
- warning: ''
22
- };
23
- shallowOrgUnitDimension = undefined;
24
- });
25
- it('matches the snapshot', () => {
26
- const wrapper = getWrapper();
27
- expect(wrapper).toMatchSnapshot();
12
+ });
13
+ describe('OrgUnitDimension', () => {
14
+ const onSelect = jest.fn();
15
+ const props = {
16
+ roots: [],
17
+ selected: [],
18
+ onSelect: onSelect,
19
+ hideGroupSelect: false,
20
+ hideLevelSelect: false,
21
+ hideUserOrgUnits: false,
22
+ warning: ''
23
+ };
24
+ const renderOrgUnitDimension = props => render(/*#__PURE__*/React.createElement(CustomDataProvider, {
25
+ data: {
26
+ organisationUnitLevels: {
27
+ organisationUnitLevels: []
28
+ },
29
+ organisationUnitGroups: {
30
+ organisationUnitGroups: []
31
+ }
32
+ }
33
+ }, /*#__PURE__*/React.createElement(OrgUnitDimension, props)));
34
+ beforeEach(() => onSelect.mockClear());
35
+ test('OrgUnitDimension is rendered correctly', async () => {
36
+ renderOrgUnitDimension(props);
37
+
38
+ // wait for the component to be loaded, here done by testing that the OrganisationUnitTree component is loaded
39
+ // avoid the act warning due to the snapshot being taken before async code is run
40
+ await screen.findByText('Org unit tree component mock');
41
+
42
+ // the top user org unit checkboxes are rendered
43
+ expect(screen.getByLabelText('User organisation unit')).toBeInTheDocument();
44
+ expect(screen.getByLabelText('User sub-units')).toBeInTheDocument();
45
+ expect(screen.getByLabelText('User sub-x2-units')).toBeInTheDocument();
46
+
47
+ // the OrganisationUnitTree component is rendered
48
+ expect(screen.getByText('Org unit tree component mock')).toBeInTheDocument();
49
+
50
+ // the level selector is rendered
51
+ expect(screen.getByText('Select a level')).toBeInTheDocument();
52
+
53
+ // the group selector is rendered
54
+ expect(screen.getByText('Select a group')).toBeInTheDocument();
55
+
56
+ // the Deselect all button is rendered
57
+ expect(screen.getByRole('button', {
58
+ name: 'Deselect all'
59
+ })).toBeInTheDocument();
28
60
  });
29
- it('calls onSelect when an organisation unit is selected', () => {
30
- const wrapper = getWrapper();
31
- const orgUnitTree = wrapper.find('OrganisationUnitTree');
32
- const testOrgUnit = {
33
- id: 'testId',
34
- path: '/testPath',
35
- displayName: 'Test Org Unit',
36
- checked: true
37
- };
38
- orgUnitTree.props().onChange(testOrgUnit);
39
- expect(props.onSelect).toHaveBeenCalledWith({
61
+ test('OrgUnitDimension calls onSelect when an organisation unit is selected', async () => {
62
+ const user = userEvent.setup();
63
+ renderOrgUnitDimension(props);
64
+ await user.click(screen.getByText('User organisation unit'));
65
+ expect(onSelect).toHaveBeenCalledWith({
40
66
  dimensionId: 'ou',
41
67
  items: [{
42
- id: 'testId',
43
- path: '/testPath',
44
- name: 'Test Org Unit'
68
+ id: 'USER_ORGUNIT',
69
+ displayName: 'User organisation unit'
45
70
  }]
46
71
  });
47
72
  });
48
- it('calls onSelect with an empty array when selection is cleared', () => {
49
- const wrapper = getWrapper();
50
- const deselectButton = wrapper.find('Button[onClick]');
51
- deselectButton.simulate('click');
52
- expect(props.onSelect).toHaveBeenCalledWith({
73
+ test('OrgUnitDimension calls onSelect with an empty array when selection is cleared', async () => {
74
+ const user = userEvent.setup();
75
+ renderOrgUnitDimension({
76
+ ...props,
77
+ // make some selection to enable the deselect all button
78
+ selected: [{
79
+ id: 'USER_ORGUNIT_CHILDREN',
80
+ name: 'User sub-units'
81
+ }]
82
+ });
83
+ await user.click(screen.getByRole('button', {
84
+ name: 'Deselect all'
85
+ }));
86
+ expect(onSelect).toHaveBeenLastCalledWith({
53
87
  dimensionId: 'ou',
54
88
  items: []
55
89
  });
@@ -6,27 +6,25 @@ import i18n from '../../locales/index.js';
6
6
  import styles from './styles/PeriodFilter.style.js';
7
7
  import { getFixedPeriodsOptions } from './utils/fixedPeriods.js';
8
8
  import { filterPeriodTypesById } from './utils/index.js';
9
- const FixedPeriodFilter = _ref => {
10
- let {
11
- allowedPeriodTypes,
12
- excludedPeriodTypes,
13
- currentPeriodType,
14
- currentYear,
15
- onSelectPeriodType,
16
- onSelectYear,
17
- dataTest
18
- } = _ref;
9
+ const EXCLUDED_PERIOD_TYPES_PROP_DEFAULT = [];
10
+ const FixedPeriodFilter = ({
11
+ allowedPeriodTypes,
12
+ excludedPeriodTypes = EXCLUDED_PERIOD_TYPES_PROP_DEFAULT,
13
+ currentPeriodType,
14
+ currentYear,
15
+ onSelectPeriodType,
16
+ onSelectYear,
17
+ dataTest
18
+ }) => {
19
19
  const onlyAllowedTypeIsSelected = Array.isArray(allowedPeriodTypes) && allowedPeriodTypes.length === 1 && allowedPeriodTypes[0] === currentPeriodType;
20
20
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
21
+ "data-test": dataTest,
21
22
  className: `jsx-${styles.__hash}` + " " + "leftSection"
22
23
  }, /*#__PURE__*/React.createElement(SingleSelectField, {
23
24
  label: i18n.t('Period type'),
24
- onChange: _ref2 => {
25
- let {
26
- selected
27
- } = _ref2;
28
- return onSelectPeriodType(selected);
29
- },
25
+ onChange: ({
26
+ selected
27
+ }) => onSelectPeriodType(selected),
30
28
  dense: true,
31
29
  selected: currentPeriodType,
32
30
  disabled: onlyAllowedTypeIsSelected,
@@ -45,21 +43,15 @@ const FixedPeriodFilter = _ref => {
45
43
  type: "number",
46
44
  placeholder: i18n.t('Select year'),
47
45
  value: currentYear,
48
- onChange: _ref3 => {
49
- let {
50
- value
51
- } = _ref3;
52
- return onSelectYear(value);
53
- },
46
+ onChange: ({
47
+ value
48
+ }) => onSelectYear(value),
54
49
  dense: true,
55
50
  dataTest: `${dataTest}-year`
56
51
  })), /*#__PURE__*/React.createElement(_JSXStyle, {
57
52
  id: styles.__hash
58
53
  }, styles));
59
54
  };
60
- FixedPeriodFilter.defaultProps = {
61
- excludedPeriodTypes: []
62
- };
63
55
  FixedPeriodFilter.propTypes = {
64
56
  currentPeriodType: PropTypes.string.isRequired,
65
57
  currentYear: PropTypes.string.isRequired,
@@ -10,8 +10,8 @@ import FixedPeriodFilter from './FixedPeriodFilter.js';
10
10
  import styles from './styles/FixedPeriodSelect.style.js';
11
11
  import { parsePeriodCode, getFixedPeriodsOptionsById as getPeriodById, getYearOffsetFromNow } from './utils/fixedPeriods.js';
12
12
  class FixedPeriodSelect extends Component {
13
- constructor() {
14
- super(...arguments);
13
+ constructor(...args) {
14
+ super(...args);
15
15
  _defineProperty(this, "state", {
16
16
  periodType: '',
17
17
  year: '',
@@ -31,24 +31,19 @@ class FixedPeriodSelect extends Component {
31
31
  });
32
32
  this.props.onChange();
33
33
  });
34
- _defineProperty(this, "onSelectPeriod", (_ref, event) => {
35
- let {
36
- selected: periodId
37
- } = _ref;
38
- const period = this.state.options.find(_ref2 => {
39
- let {
40
- id
41
- } = _ref2;
42
- return id === periodId;
43
- });
34
+ _defineProperty(this, "onSelectPeriod", ({
35
+ selected: periodId
36
+ }, event) => {
37
+ const period = this.state.options.find(({
38
+ id
39
+ }) => id === periodId);
44
40
  this.props.onChange(period, event);
45
41
  });
46
42
  }
47
- static getDerivedStateFromProps(_ref3) {
48
- let {
49
- value,
50
- allowedPeriodTypes
51
- } = _ref3;
43
+ static getDerivedStateFromProps({
44
+ value,
45
+ allowedPeriodTypes
46
+ }) {
52
47
  const period = parsePeriodCode(value, allowedPeriodTypes);
53
48
  if (!period) {
54
49
  return null;
@@ -91,10 +86,10 @@ class FixedPeriodSelect extends Component {
91
86
  }, styles));
92
87
  }
93
88
  }
94
- FixedPeriodSelect.defaultProps = {
89
+ _defineProperty(FixedPeriodSelect, "defaultProps", {
95
90
  dataTest: 'dhis2-analytics-fixedperiodselect',
96
91
  value: ''
97
- };
92
+ });
98
93
  FixedPeriodSelect.propTypes = {
99
94
  onChange: PropTypes.func.isRequired,
100
95
  allowedPeriodTypes: PropTypes.arrayOf(PropTypes.string),
@@ -11,15 +11,15 @@ const userSettingsQuery = {
11
11
  }
12
12
  }
13
13
  };
14
- const PeriodDimension = _ref => {
15
- let {
16
- onSelect,
17
- selectedPeriods,
18
- rightFooter,
19
- excludedPeriodTypes,
20
- infoBoxMessage,
21
- height
22
- } = _ref;
14
+ const SELECTED_PERIODS_PROP_DEFAULT = [];
15
+ const PeriodDimension = ({
16
+ onSelect,
17
+ selectedPeriods = SELECTED_PERIODS_PROP_DEFAULT,
18
+ rightFooter,
19
+ excludedPeriodTypes,
20
+ infoBoxMessage,
21
+ height
22
+ }) => {
23
23
  const {
24
24
  systemInfo
25
25
  } = useConfig();
@@ -63,7 +63,4 @@ PeriodDimension.propTypes = {
63
63
  rightFooter: PropTypes.node,
64
64
  selectedPeriods: PropTypes.array
65
65
  };
66
- PeriodDimension.defaultProps = {
67
- selectedPeriods: []
68
- };
69
66
  export default PeriodDimension;
@@ -14,36 +14,38 @@ import RelativePeriodFilter from './RelativePeriodFilter.js';
14
14
  import { getFixedPeriodsOptionsById } from './utils/fixedPeriods.js';
15
15
  import { MONTHLY, QUARTERLY } from './utils/index.js';
16
16
  import { getRelativePeriodsOptionsById } from './utils/relativePeriods.js';
17
- const RightHeader = _ref => {
18
- let {
19
- infoBoxMessage
20
- } = _ref;
21
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {
22
- className: `jsx-${styles.__hash}` + " " + "rightHeader"
23
- }, i18n.t('Selected Periods')), infoBoxMessage && /*#__PURE__*/React.createElement("div", {
24
- className: `jsx-${styles.__hash}` + " " + "info-container"
25
- }, /*#__PURE__*/React.createElement("div", {
26
- className: `jsx-${styles.__hash}`
27
- }, /*#__PURE__*/React.createElement(IconInfo16, null)), /*#__PURE__*/React.createElement("span", {
28
- className: `jsx-${styles.__hash}` + " " + "info-text"
29
- }, infoBoxMessage)), /*#__PURE__*/React.createElement(_JSXStyle, {
30
- id: styles.__hash
31
- }, styles));
32
- };
17
+ const RightHeader = ({
18
+ infoBoxMessage
19
+ }) => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {
20
+ className: `jsx-${styles.__hash}` + " " + "rightHeader"
21
+ }, i18n.t('Selected Periods')), infoBoxMessage && /*#__PURE__*/React.createElement("div", {
22
+ className: `jsx-${styles.__hash}` + " " + "info-container"
23
+ }, /*#__PURE__*/React.createElement("div", {
24
+ className: `jsx-${styles.__hash}`
25
+ }, /*#__PURE__*/React.createElement(IconInfo16, null)), /*#__PURE__*/React.createElement("span", {
26
+ className: `jsx-${styles.__hash}` + " " + "info-text"
27
+ }, infoBoxMessage)), /*#__PURE__*/React.createElement(_JSXStyle, {
28
+ id: styles.__hash
29
+ }, styles));
33
30
  RightHeader.propTypes = {
34
31
  infoBoxMessage: PropTypes.string
35
32
  };
36
- const PeriodTransfer = _ref2 => {
37
- let {
38
- onSelect,
39
- dataTest,
40
- selectedItems,
41
- rightFooter,
42
- excludedPeriodTypes,
43
- periodsSettings,
44
- infoBoxMessage,
45
- height = TRANSFER_HEIGHT
46
- } = _ref2;
33
+ const SELECTED_ITEMS_PROP_DEFAULT = [];
34
+ const EXCLUDED_PERIOD_TYPES_PROP_DEFAULT = [];
35
+ const PERIODS_SETTINGS_PROP_DEFAULT = {
36
+ calendar: 'gregory',
37
+ locale: 'en'
38
+ };
39
+ const PeriodTransfer = ({
40
+ onSelect,
41
+ dataTest,
42
+ selectedItems = SELECTED_ITEMS_PROP_DEFAULT,
43
+ rightFooter,
44
+ excludedPeriodTypes = EXCLUDED_PERIOD_TYPES_PROP_DEFAULT,
45
+ periodsSettings = PERIODS_SETTINGS_PROP_DEFAULT,
46
+ infoBoxMessage,
47
+ height = TRANSFER_HEIGHT
48
+ }) => {
47
49
  const defaultRelativePeriodType = excludedPeriodTypes.includes(MONTHLY) ? getRelativePeriodsOptionsById(QUARTERLY) : getRelativePeriodsOptionsById(MONTHLY);
48
50
  const defaultFixedPeriodType = excludedPeriodTypes.includes(MONTHLY) ? getFixedPeriodsOptionsById(QUARTERLY, periodsSettings) : getFixedPeriodsOptionsById(MONTHLY, periodsSettings);
49
51
  const now = getNowInCalendar(periodsSettings.calendar);
@@ -126,10 +128,9 @@ const PeriodTransfer = _ref2 => {
126
128
  id: styles.__hash
127
129
  }, styles));
128
130
  return /*#__PURE__*/React.createElement(Transfer, {
129
- onChange: _ref3 => {
130
- let {
131
- selected
132
- } = _ref3;
131
+ onChange: ({
132
+ selected
133
+ }) => {
133
134
  const formattedItems = selected.map(id => {
134
135
  const matchingItem = [...allPeriods, ...selectedItems].find(item => item.id === id);
135
136
  return {
@@ -151,39 +152,25 @@ const PeriodTransfer = _ref2 => {
151
152
  infoBoxMessage: infoBoxMessage
152
153
  }),
153
154
  rightFooter: rightFooter,
154
- options: [...allPeriods, ...selectedItems].map(_ref4 => {
155
- let {
156
- id,
157
- name
158
- } = _ref4;
159
- return {
160
- label: name,
161
- value: id
162
- };
163
- }),
164
- renderOption: _ref5 => {
165
- let {
166
- value,
167
- ...props
168
- } = _ref5;
169
- return /*#__PURE__*/React.createElement(TransferOption, _extends({}, props, {
170
- value: value,
171
- active: isActive(value),
172
- icon: PeriodIcon,
173
- dataTest: `${dataTest}-transfer-option`
174
- }));
175
- },
155
+ options: [...allPeriods, ...selectedItems].map(({
156
+ id,
157
+ name
158
+ }) => ({
159
+ label: name,
160
+ value: id
161
+ })),
162
+ renderOption: ({
163
+ value,
164
+ ...props
165
+ }) => /*#__PURE__*/React.createElement(TransferOption, _extends({}, props, {
166
+ value: value,
167
+ active: isActive(value),
168
+ icon: PeriodIcon,
169
+ dataTest: `${dataTest}-transfer-option`
170
+ })),
176
171
  dataTest: `${dataTest}-transfer`
177
172
  });
178
173
  };
179
- PeriodTransfer.defaultProps = {
180
- selectedItems: [],
181
- excludedPeriodTypes: [],
182
- periodsSettings: {
183
- calendar: 'gregory',
184
- locale: 'en'
185
- }
186
- };
187
174
  PeriodTransfer.propTypes = {
188
175
  onSelect: PropTypes.func.isRequired,
189
176
  dataTest: PropTypes.string,
@@ -6,36 +6,31 @@ import i18n from '../../locales/index.js';
6
6
  import styles from './styles/PeriodFilter.style.js';
7
7
  import { filterPeriodTypesById } from './utils/index.js';
8
8
  import { getRelativePeriodsOptions } from './utils/relativePeriods.js';
9
- const RelativePeriodFilter = _ref => {
10
- let {
11
- currentFilter,
12
- onSelectFilter,
13
- dataTest,
14
- excludedPeriodTypes
15
- } = _ref;
16
- return /*#__PURE__*/React.createElement("div", {
17
- className: `jsx-${styles.__hash}` + " " + "leftSection"
18
- }, /*#__PURE__*/React.createElement(SingleSelectField, {
19
- label: i18n.t('Period type'),
20
- onChange: _ref2 => {
21
- let {
22
- selected
23
- } = _ref2;
24
- return onSelectFilter(selected);
25
- },
26
- dense: true,
27
- selected: currentFilter,
28
- className: "filterElement",
29
- dataTest: dataTest
30
- }, filterPeriodTypesById(getRelativePeriodsOptions(), excludedPeriodTypes).map(option => /*#__PURE__*/React.createElement(SingleSelectOption, {
31
- key: option.id,
32
- value: option.id,
33
- label: option.name,
34
- dataTest: `${dataTest}-option-${option.id}`
35
- }))), /*#__PURE__*/React.createElement(_JSXStyle, {
36
- id: styles.__hash
37
- }, styles));
38
- };
9
+ const RelativePeriodFilter = ({
10
+ currentFilter,
11
+ onSelectFilter,
12
+ dataTest,
13
+ excludedPeriodTypes
14
+ }) => /*#__PURE__*/React.createElement("div", {
15
+ "data-test": dataTest,
16
+ className: `jsx-${styles.__hash}` + " " + "leftSection"
17
+ }, /*#__PURE__*/React.createElement(SingleSelectField, {
18
+ label: i18n.t('Period type'),
19
+ onChange: ({
20
+ selected
21
+ }) => onSelectFilter(selected),
22
+ dense: true,
23
+ selected: currentFilter,
24
+ className: "filterElement",
25
+ dataTest: `${dataTest}-period-type`
26
+ }, filterPeriodTypesById(getRelativePeriodsOptions(), excludedPeriodTypes).map(option => /*#__PURE__*/React.createElement(SingleSelectOption, {
27
+ key: option.id,
28
+ value: option.id,
29
+ label: option.name,
30
+ dataTest: `${dataTest}-period-type-option-${option.id}`
31
+ }))), /*#__PURE__*/React.createElement(_JSXStyle, {
32
+ id: styles.__hash
33
+ }, styles));
39
34
  RelativePeriodFilter.propTypes = {
40
35
  currentFilter: PropTypes.string.isRequired,
41
36
  onSelectFilter: PropTypes.func.isRequired,
@@ -1,24 +1,17 @@
1
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
2
  import React from 'react';
3
3
  import FixedPeriodSelect from '../FixedPeriodSelect.js';
4
- describe('The Fixed Period Single Select component', () => {
5
- let props;
6
- let shallowFixedPeriodSelect;
7
- const getWrapper = () => {
8
- if (!shallowFixedPeriodSelect) {
9
- shallowFixedPeriodSelect = shallow(/*#__PURE__*/React.createElement(FixedPeriodSelect, props));
10
- }
11
- return shallowFixedPeriodSelect;
4
+ test('FixedPeriodSelect renders correctly', () => {
5
+ const props = {
6
+ value: '201405',
7
+ onChange: () => {}
12
8
  };
13
- beforeEach(() => {
14
- props = {
15
- value: '201405',
16
- onChange: () => {}
17
- };
18
- shallowFixedPeriodSelect = undefined;
19
- });
20
- it('matches the snapshot', () => {
21
- const wrapper = getWrapper();
22
- expect(wrapper).toMatchSnapshot();
23
- });
9
+ render(/*#__PURE__*/React.createElement(FixedPeriodSelect, props));
10
+ expect(screen.getByTestId('dhis2-analytics-fixedperiodselect')).toBeInTheDocument();
11
+ expect(screen.getByText('Period type')).toBeInTheDocument();
12
+ expect(screen.getByText('Monthly')).toBeInTheDocument();
13
+ expect(screen.getByText('Year')).toBeInTheDocument();
14
+ const yearSelectEl = screen.getByPlaceholderText('Select year');
15
+ expect(yearSelectEl).toBeInTheDocument();
16
+ expect(yearSelectEl.value).toEqual('2014');
24
17
  });
@@ -1,4 +1,5 @@
1
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
+ import userEvent from '@testing-library/user-event';
2
3
  import React from 'react';
3
4
  import PeriodDimension from '../PeriodDimension.js';
4
5
  jest.mock('@dhis2/app-runtime', () => ({
@@ -13,26 +14,29 @@ jest.mock('@dhis2/app-runtime', () => ({
13
14
  }
14
15
  })
15
16
  }));
17
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
18
+ observe: jest.fn(),
19
+ unobserve: jest.fn(),
20
+ disconnect: jest.fn()
21
+ }));
16
22
  afterEach(jest.clearAllMocks);
17
- describe('The Period Dimension component', () => {
18
- let props;
19
- let shallowPeriodDimension;
20
- const getWrapper = () => {
21
- if (!shallowPeriodDimension) {
22
- shallowPeriodDimension = shallow(/*#__PURE__*/React.createElement(PeriodDimension, props));
23
- }
24
- return shallowPeriodDimension;
25
- };
26
- beforeEach(() => {
27
- props = {
28
- selectedPeriods: [],
29
- onSelect: jest.fn(),
30
- rightFooter: /*#__PURE__*/React.createElement(React.Fragment, null)
31
- };
32
- shallowPeriodDimension = undefined;
33
- });
34
- it('matches the snapshot', () => {
35
- const wrapper = getWrapper();
36
- expect(wrapper).toMatchSnapshot();
37
- });
23
+ const props = {
24
+ selectedPeriods: [],
25
+ onSelect: jest.fn(),
26
+ rightFooter: /*#__PURE__*/React.createElement(React.Fragment, null)
27
+ };
28
+ test('PeriodDimension renders the tabs for relative/fixed with relative pre-selected', () => {
29
+ render(/*#__PURE__*/React.createElement(PeriodDimension, props));
30
+ expect(screen.getByText('Relative periods')).toBeInTheDocument();
31
+ expect(screen.getByTestId('period-dimension-relative-period-filter')).toBeInTheDocument();
32
+ expect(screen.getByText('Fixed periods')).toBeInTheDocument();
33
+ });
34
+ test('PeriodDimension can toggle between relative and fixed period tab', async () => {
35
+ const user = userEvent.setup();
36
+ render(/*#__PURE__*/React.createElement(PeriodDimension, props));
37
+ expect(screen.getByText('Relative periods')).toBeInTheDocument();
38
+ const fixedPeriodButton = screen.getByText('Fixed periods');
39
+ expect(fixedPeriodButton).toBeInTheDocument();
40
+ await user.click(fixedPeriodButton);
41
+ expect(screen.getByTestId('period-dimension-fixed-period-filter')).toBeInTheDocument();
38
42
  });
@@ -37,13 +37,12 @@ export const PERIOD_TYPE_REGEX = {
37
37
  // YYYY"July"
38
38
  [FYAPR]: /^([0-9]{4})April$/ // YYYY"April"
39
39
  };
40
- const getPeriods = _ref => {
41
- let {
42
- periodType,
43
- config,
44
- fnFilter,
45
- periodSettings = {}
46
- } = _ref;
40
+ const getPeriods = ({
41
+ periodType,
42
+ config,
43
+ fnFilter,
44
+ periodSettings = {}
45
+ }) => {
47
46
  const offset = parseInt(config.offset, 10);
48
47
  const isFilter = config.filterFuturePeriods;
49
48
  const isReverse = periodType.match(/^FY|YEARLY/) ? true : config.reversePeriods;
@@ -17,8 +17,4 @@ export const FYNOV = 'FYNOV';
17
17
  export const FYOCT = 'FYOCT';
18
18
  export const FYJUL = 'FYJUL';
19
19
  export const FYAPR = 'FYAPR';
20
- export const filterPeriodTypesById = function () {
21
- let allPeriodTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
22
- let excludedPeriodTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
23
- return allPeriodTypes.filter(period => !excludedPeriodTypes.includes(period.id));
24
- };
20
+ export const filterPeriodTypesById = (allPeriodTypes = [], excludedPeriodTypes = []) => allPeriodTypes.filter(period => !excludedPeriodTypes.includes(period.id));
@@ -8,14 +8,13 @@ import { PivotTableBody } from './PivotTableBody.js';
8
8
  import { PivotTableContainer } from './PivotTableContainer.js';
9
9
  import { Provider } from './PivotTableEngineContext.js';
10
10
  import { PivotTableHead } from './PivotTableHead.js';
11
- const PivotTable = _ref => {
12
- let {
13
- visualization,
14
- data,
15
- legendSets,
16
- renderCounter,
17
- onToggleContextualMenu
18
- } = _ref;
11
+ const PivotTable = ({
12
+ visualization,
13
+ data,
14
+ legendSets,
15
+ renderCounter,
16
+ onToggleContextualMenu
17
+ }) => {
19
18
  const containerRef = useRef(undefined);
20
19
  const {
21
20
  width,