@dhis2/analytics 28.0.4 → 28.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/__demo__/OpenFileDialog.stories.js +19 -1
- package/build/cjs/__demo__/{PivotTable.stories.js → PivotTable.aggregate.stories.js} +38 -38
- package/build/cjs/__demo__/PivotTable.event.stories.js +440 -0
- package/build/cjs/__demo__/data/event/boolean.data.hidena.json +115 -0
- package/build/cjs/__demo__/data/event/boolean.data.json +125 -0
- package/build/cjs/__demo__/data/event/boolean.data.org.json +106 -0
- package/build/cjs/__demo__/data/event/boolean.visualization.json +160 -0
- package/build/cjs/__demo__/data/event/date.data.hidena.json +205 -0
- package/build/cjs/__demo__/data/event/date.data.json +215 -0
- package/build/cjs/__demo__/data/event/date.data.org.json +123 -0
- package/build/cjs/__demo__/data/event/date.visualization.json +160 -0
- package/build/cjs/__demo__/data/event/datetime.data.hidena.json +215 -0
- package/build/cjs/__demo__/data/event/datetime.data.json +225 -0
- package/build/cjs/__demo__/data/event/datetime.data.org.json +124 -0
- package/build/cjs/__demo__/data/event/datetime.visualization.json +148 -0
- package/build/cjs/__demo__/data/event/email.data.hidena.json +192 -0
- package/build/cjs/__demo__/data/event/email.data.json +202 -0
- package/build/cjs/__demo__/data/event/email.data.org.json +123 -0
- package/build/cjs/__demo__/data/event/email.visualization.json +148 -0
- package/build/cjs/__demo__/data/event/integer.data.hidena.json +165 -0
- package/build/cjs/__demo__/data/event/integer.data.json +175 -0
- package/build/cjs/__demo__/data/event/integer.data.org.json +120 -0
- package/build/cjs/__demo__/data/event/integer.visualization.json +163 -0
- package/build/cjs/__demo__/data/event/legendset.data.hidena.json +154 -0
- package/build/cjs/__demo__/data/event/legendset.data.json +164 -0
- package/build/cjs/__demo__/data/event/legendset.visualization.json +166 -0
- package/build/cjs/__demo__/data/event/optionset.data.hidena.json +125 -0
- package/build/cjs/__demo__/data/event/optionset.data.json +134 -0
- package/build/cjs/__demo__/data/event/optionset.data.org.json +125 -0
- package/build/cjs/__demo__/data/event/optionset.visualization.json +158 -0
- package/build/cjs/__demo__/data/event/time.data.hidena.json +165 -0
- package/build/cjs/__demo__/data/event/time.data.json +175 -0
- package/build/cjs/__demo__/data/event/time.data.org.json +128 -0
- package/build/cjs/__demo__/data/event/time.visualization.json +148 -0
- package/build/cjs/__demo__/data/event/yesonly.data.hidena.json +127 -0
- package/build/cjs/__demo__/data/event/yesonly.data.json +136 -0
- package/build/cjs/__demo__/data/event/yesonly.data.org.json +124 -0
- package/build/cjs/__demo__/data/event/yesonly.visualization.json +161 -0
- package/build/cjs/components/DataDimension/ItemSelector/ItemSelector.js +19 -22
- package/build/cjs/components/DimensionsPanel/List/DimensionList.js +3 -1
- package/build/cjs/components/DimensionsPanel/List/__tests__/DimensionItem.spec.js +48 -41
- package/build/cjs/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +110 -114
- package/build/cjs/components/DimensionsPanel/__tests__/DimensionsPanel.spec.js +36 -33
- package/build/cjs/components/FileMenu/__tests__/DeleteDialog.spec.js +24 -27
- package/build/cjs/components/FileMenu/__tests__/FileMenu.spec.js +51 -31
- package/build/cjs/components/FileMenu/__tests__/GetLinkDialog.spec.js +28 -31
- package/build/cjs/components/FileMenu/__tests__/RenameDialog.spec.js +17 -11
- package/build/cjs/components/FileMenu/__tests__/SaveAsDialog.spec.js +44 -37
- package/build/cjs/components/Filter/__tests__/Filter.spec.js +29 -34
- package/build/cjs/components/OpenFileDialog/CreatedByFilter.js +9 -1
- package/build/cjs/components/OpenFileDialog/OpenFileDialog.js +14 -34
- package/build/cjs/components/OpenFileDialog/VisTypeFilter.js +39 -1
- package/build/cjs/components/OpenFileDialog/__tests__/OpenFileDialog.spec.js +51 -0
- package/build/cjs/components/OrgUnitDimension/__tests__/OrgUnitDimension.spec.js +78 -44
- package/build/cjs/components/PeriodDimension/FixedPeriodFilter.js +1 -0
- package/build/cjs/components/PeriodDimension/RelativePeriodFilter.js +3 -2
- package/build/cjs/components/PeriodDimension/__tests__/FixedPeriodSingleSelect.spec.js +14 -21
- package/build/cjs/components/PeriodDimension/__tests__/PeriodDimension.spec.js +27 -23
- package/build/cjs/components/PivotTable/PivotTableColumnHeaderCell.js +3 -0
- package/build/cjs/components/PivotTable/PivotTableRowHeaderCell.js +2 -1
- package/build/cjs/components/RichText/Editor/__tests__/Editor.spec.js +6 -7
- package/build/cjs/components/RichText/Parser/__tests__/MdParser.spec.js +1 -1
- package/build/cjs/components/RichText/Parser/__tests__/Parser.spec.js +22 -23
- package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +52 -42
- package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +8 -8
- package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +23 -18
- package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +23 -17
- package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/__snapshots__/HoverMenuList.spec.js.snap +63 -0
- package/build/cjs/components/Toolbar/InterpretationsAndDetailsToggler.js +3 -1
- package/build/cjs/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +19 -18
- package/build/cjs/components/Toolbar/__tests__/Toolbar.spec.js +8 -8
- package/build/cjs/components/Toolbar/__tests__/ToolbarSidebar.spec.js +14 -11
- package/build/cjs/components/Toolbar/__tests__/UpdateButton.spec.js +16 -14
- package/build/cjs/components/TranslationDialog/TranslationModal/TranslationModal.js +2 -1
- package/build/cjs/components/TranslationDialog/TranslationModal/__tests__/TranslationModal.spec.js +25 -16
- package/build/cjs/index.js +8 -0
- package/build/cjs/locales/en/translations.json +1 -0
- package/build/cjs/modules/pivotTable/AdaptiveClippingController.js +2 -1
- package/build/cjs/modules/pivotTable/getHeaderForDisplay.js +4 -1
- package/build/cjs/modules/pivotTable/measureText.js +7 -6
- package/build/cjs/modules/response/event/__tests__/default.spec.js +77 -0
- package/build/cjs/modules/response/event/__tests__/optionSet.spec.js +35 -0
- package/build/cjs/modules/response/event/__tests__/response.spec.js +125 -0
- package/build/cjs/modules/response/event/default.js +65 -0
- package/build/cjs/modules/response/event/optionSet.js +36 -0
- package/build/cjs/modules/response/event/response.js +95 -0
- package/build/es/__demo__/OpenFileDialog.stories.js +17 -0
- package/build/es/__demo__/{PivotTable.stories.js → PivotTable.aggregate.stories.js} +38 -38
- package/build/es/__demo__/PivotTable.event.stories.js +414 -0
- package/build/es/__demo__/data/event/boolean.data.hidena.json +115 -0
- package/build/es/__demo__/data/event/boolean.data.json +125 -0
- package/build/es/__demo__/data/event/boolean.data.org.json +106 -0
- package/build/es/__demo__/data/event/boolean.visualization.json +160 -0
- package/build/es/__demo__/data/event/date.data.hidena.json +205 -0
- package/build/es/__demo__/data/event/date.data.json +215 -0
- package/build/es/__demo__/data/event/date.data.org.json +123 -0
- package/build/es/__demo__/data/event/date.visualization.json +160 -0
- package/build/es/__demo__/data/event/datetime.data.hidena.json +215 -0
- package/build/es/__demo__/data/event/datetime.data.json +225 -0
- package/build/es/__demo__/data/event/datetime.data.org.json +124 -0
- package/build/es/__demo__/data/event/datetime.visualization.json +148 -0
- package/build/es/__demo__/data/event/email.data.hidena.json +192 -0
- package/build/es/__demo__/data/event/email.data.json +202 -0
- package/build/es/__demo__/data/event/email.data.org.json +123 -0
- package/build/es/__demo__/data/event/email.visualization.json +148 -0
- package/build/es/__demo__/data/event/integer.data.hidena.json +165 -0
- package/build/es/__demo__/data/event/integer.data.json +175 -0
- package/build/es/__demo__/data/event/integer.data.org.json +120 -0
- package/build/es/__demo__/data/event/integer.visualization.json +163 -0
- package/build/es/__demo__/data/event/legendset.data.hidena.json +154 -0
- package/build/es/__demo__/data/event/legendset.data.json +164 -0
- package/build/es/__demo__/data/event/legendset.visualization.json +166 -0
- package/build/es/__demo__/data/event/optionset.data.hidena.json +125 -0
- package/build/es/__demo__/data/event/optionset.data.json +134 -0
- package/build/es/__demo__/data/event/optionset.data.org.json +125 -0
- package/build/es/__demo__/data/event/optionset.visualization.json +158 -0
- package/build/es/__demo__/data/event/time.data.hidena.json +165 -0
- package/build/es/__demo__/data/event/time.data.json +175 -0
- package/build/es/__demo__/data/event/time.data.org.json +128 -0
- package/build/es/__demo__/data/event/time.visualization.json +148 -0
- package/build/es/__demo__/data/event/yesonly.data.hidena.json +127 -0
- package/build/es/__demo__/data/event/yesonly.data.json +136 -0
- package/build/es/__demo__/data/event/yesonly.data.org.json +124 -0
- package/build/es/__demo__/data/event/yesonly.visualization.json +161 -0
- package/build/es/components/DataDimension/ItemSelector/ItemSelector.js +19 -22
- package/build/es/components/DimensionsPanel/List/DimensionList.js +3 -1
- package/build/es/components/DimensionsPanel/List/__tests__/DimensionItem.spec.js +47 -40
- package/build/es/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +110 -114
- package/build/es/components/DimensionsPanel/__tests__/DimensionsPanel.spec.js +35 -32
- package/build/es/components/FileMenu/__tests__/DeleteDialog.spec.js +23 -26
- package/build/es/components/FileMenu/__tests__/FileMenu.spec.js +52 -32
- package/build/es/components/FileMenu/__tests__/GetLinkDialog.spec.js +27 -30
- package/build/es/components/FileMenu/__tests__/RenameDialog.spec.js +18 -12
- package/build/es/components/FileMenu/__tests__/SaveAsDialog.spec.js +43 -36
- package/build/es/components/Filter/__tests__/Filter.spec.js +28 -33
- package/build/es/components/OpenFileDialog/CreatedByFilter.js +7 -0
- package/build/es/components/OpenFileDialog/OpenFileDialog.js +14 -35
- package/build/es/components/OpenFileDialog/VisTypeFilter.js +38 -1
- package/build/es/components/OpenFileDialog/__tests__/OpenFileDialog.spec.js +49 -0
- package/build/es/components/OrgUnitDimension/__tests__/OrgUnitDimension.spec.js +77 -43
- package/build/es/components/PeriodDimension/FixedPeriodFilter.js +1 -0
- package/build/es/components/PeriodDimension/RelativePeriodFilter.js +3 -2
- package/build/es/components/PeriodDimension/__tests__/FixedPeriodSingleSelect.spec.js +13 -20
- package/build/es/components/PeriodDimension/__tests__/PeriodDimension.spec.js +26 -22
- package/build/es/components/PivotTable/PivotTableColumnHeaderCell.js +3 -0
- package/build/es/components/PivotTable/PivotTableRowHeaderCell.js +2 -1
- package/build/es/components/RichText/Editor/__tests__/Editor.spec.js +7 -8
- package/build/es/components/RichText/Parser/__tests__/MdParser.spec.js +1 -1
- package/build/es/components/RichText/Parser/__tests__/Parser.spec.js +21 -22
- package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +53 -43
- package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +7 -7
- package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +23 -18
- package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +21 -15
- package/build/es/components/Toolbar/HoverMenuBar/__tests__/__snapshots__/HoverMenuList.spec.js.snap +63 -0
- package/build/es/components/Toolbar/InterpretationsAndDetailsToggler.js +3 -1
- package/build/es/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +18 -17
- package/build/es/components/Toolbar/__tests__/Toolbar.spec.js +7 -7
- package/build/es/components/Toolbar/__tests__/ToolbarSidebar.spec.js +13 -10
- package/build/es/components/Toolbar/__tests__/UpdateButton.spec.js +15 -13
- package/build/es/components/TranslationDialog/TranslationModal/TranslationModal.js +2 -1
- package/build/es/components/TranslationDialog/TranslationModal/__tests__/TranslationModal.spec.js +24 -15
- package/build/es/index.js +4 -0
- package/build/es/locales/en/translations.json +1 -0
- package/build/es/modules/pivotTable/AdaptiveClippingController.js +2 -1
- package/build/es/modules/pivotTable/getHeaderForDisplay.js +4 -1
- package/build/es/modules/pivotTable/measureText.js +7 -6
- package/build/es/modules/response/event/__tests__/default.spec.js +75 -0
- package/build/es/modules/response/event/__tests__/optionSet.spec.js +32 -0
- package/build/es/modules/response/event/__tests__/response.spec.js +122 -0
- package/build/es/modules/response/event/default.js +52 -0
- package/build/es/modules/response/event/optionSet.js +27 -0
- package/build/es/modules/response/event/response.js +86 -0
- package/package.json +2 -4
- package/build/cjs/components/OrgUnitDimension/__tests__/__snapshots__/OrgUnitDimension.spec.js.snap +0 -89
- package/build/cjs/components/PeriodDimension/__tests__/PeriodSelector.spec.js +0 -29
- package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap +0 -92
- package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +0 -16
- package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +0 -89
- package/build/es/components/OrgUnitDimension/__tests__/__snapshots__/OrgUnitDimension.spec.js.snap +0 -89
- package/build/es/components/PeriodDimension/__tests__/PeriodSelector.spec.js +0 -26
- package/build/es/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap +0 -92
- package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +0 -16
- package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +0 -89
- /package/build/cjs/__demo__/data/{avgTotalAggregationType.data.json → aggregate/avgTotalAggregationType.data.json} +0 -0
- /package/build/cjs/__demo__/data/{avgTotalAggregationType.metadata.json → aggregate/avgTotalAggregationType.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{avgTotalAggregationType.visualization.json → aggregate/avgTotalAggregationType.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{deep.data.json → aggregate/deep.data.json} +0 -0
- /package/build/cjs/__demo__/data/{deep.visualization.json → aggregate/deep.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{deepWithFilters.data.json → aggregate/deepWithFilters.data.json} +0 -0
- /package/build/cjs/__demo__/data/{deepWithFilters.visualization.json → aggregate/deepWithFilters.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{degs.data.json → aggregate/degs.data.json} +0 -0
- /package/build/cjs/__demo__/data/{degs.metadata.json → aggregate/degs.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{degs.visualization.json → aggregate/degs.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{diseaseWeeks.data.json → aggregate/diseaseWeeks.data.json} +0 -0
- /package/build/cjs/__demo__/data/{diseaseWeeks.metadata.json → aggregate/diseaseWeeks.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{diseaseWeeks.visualization.json → aggregate/diseaseWeeks.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{emptyColumns.data.json → aggregate/emptyColumns.data.json} +0 -0
- /package/build/cjs/__demo__/data/{emptyColumns.metadata.json → aggregate/emptyColumns.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{emptyColumns.visualization.json → aggregate/emptyColumns.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{emptyRows.data.json → aggregate/emptyRows.data.json} +0 -0
- /package/build/cjs/__demo__/data/{emptyRows.visualization.json → aggregate/emptyRows.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{hierarchy.data.json → aggregate/hierarchy.data.json} +0 -0
- /package/build/cjs/__demo__/data/{hierarchy.metadata.json → aggregate/hierarchy.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{hierarchy.visualization.json → aggregate/hierarchy.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{lastFiveYears.data.json → aggregate/lastFiveYears.data.json} +0 -0
- /package/build/cjs/__demo__/data/{lastFiveYears.metadata.json → aggregate/lastFiveYears.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{lastFiveYears.visualization.json → aggregate/lastFiveYears.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{narrative.data.json → aggregate/narrative.data.json} +0 -0
- /package/build/cjs/__demo__/data/{narrative.metadata.json → aggregate/narrative.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{narrative.visualization.json → aggregate/narrative.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{simple.data.json → aggregate/simple.data.json} +0 -0
- /package/build/cjs/__demo__/data/{simple.metadata.json → aggregate/simple.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{simple.visualization.json → aggregate/simple.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{target-with-legend.data.json → aggregate/target-with-legend.data.json} +0 -0
- /package/build/cjs/__demo__/data/{target-with-legend.metadata.json → aggregate/target-with-legend.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{target-with-legend.visualization.json → aggregate/target-with-legend.visualization.json} +0 -0
- /package/build/cjs/__demo__/data/{under-above-100.legendSet.json → aggregate/under-above-100.legendSet.json} +0 -0
- /package/build/cjs/__demo__/data/{weeklyColumns.data.json → aggregate/weeklyColumns.data.json} +0 -0
- /package/build/cjs/__demo__/data/{weeklyColumns.metadata.json → aggregate/weeklyColumns.metadata.json} +0 -0
- /package/build/cjs/__demo__/data/{weeklyColumns.visualization.json → aggregate/weeklyColumns.visualization.json} +0 -0
- /package/build/es/__demo__/data/{avgTotalAggregationType.data.json → aggregate/avgTotalAggregationType.data.json} +0 -0
- /package/build/es/__demo__/data/{avgTotalAggregationType.metadata.json → aggregate/avgTotalAggregationType.metadata.json} +0 -0
- /package/build/es/__demo__/data/{avgTotalAggregationType.visualization.json → aggregate/avgTotalAggregationType.visualization.json} +0 -0
- /package/build/es/__demo__/data/{deep.data.json → aggregate/deep.data.json} +0 -0
- /package/build/es/__demo__/data/{deep.visualization.json → aggregate/deep.visualization.json} +0 -0
- /package/build/es/__demo__/data/{deepWithFilters.data.json → aggregate/deepWithFilters.data.json} +0 -0
- /package/build/es/__demo__/data/{deepWithFilters.visualization.json → aggregate/deepWithFilters.visualization.json} +0 -0
- /package/build/es/__demo__/data/{degs.data.json → aggregate/degs.data.json} +0 -0
- /package/build/es/__demo__/data/{degs.metadata.json → aggregate/degs.metadata.json} +0 -0
- /package/build/es/__demo__/data/{degs.visualization.json → aggregate/degs.visualization.json} +0 -0
- /package/build/es/__demo__/data/{diseaseWeeks.data.json → aggregate/diseaseWeeks.data.json} +0 -0
- /package/build/es/__demo__/data/{diseaseWeeks.metadata.json → aggregate/diseaseWeeks.metadata.json} +0 -0
- /package/build/es/__demo__/data/{diseaseWeeks.visualization.json → aggregate/diseaseWeeks.visualization.json} +0 -0
- /package/build/es/__demo__/data/{emptyColumns.data.json → aggregate/emptyColumns.data.json} +0 -0
- /package/build/es/__demo__/data/{emptyColumns.metadata.json → aggregate/emptyColumns.metadata.json} +0 -0
- /package/build/es/__demo__/data/{emptyColumns.visualization.json → aggregate/emptyColumns.visualization.json} +0 -0
- /package/build/es/__demo__/data/{emptyRows.data.json → aggregate/emptyRows.data.json} +0 -0
- /package/build/es/__demo__/data/{emptyRows.visualization.json → aggregate/emptyRows.visualization.json} +0 -0
- /package/build/es/__demo__/data/{hierarchy.data.json → aggregate/hierarchy.data.json} +0 -0
- /package/build/es/__demo__/data/{hierarchy.metadata.json → aggregate/hierarchy.metadata.json} +0 -0
- /package/build/es/__demo__/data/{hierarchy.visualization.json → aggregate/hierarchy.visualization.json} +0 -0
- /package/build/es/__demo__/data/{lastFiveYears.data.json → aggregate/lastFiveYears.data.json} +0 -0
- /package/build/es/__demo__/data/{lastFiveYears.metadata.json → aggregate/lastFiveYears.metadata.json} +0 -0
- /package/build/es/__demo__/data/{lastFiveYears.visualization.json → aggregate/lastFiveYears.visualization.json} +0 -0
- /package/build/es/__demo__/data/{narrative.data.json → aggregate/narrative.data.json} +0 -0
- /package/build/es/__demo__/data/{narrative.metadata.json → aggregate/narrative.metadata.json} +0 -0
- /package/build/es/__demo__/data/{narrative.visualization.json → aggregate/narrative.visualization.json} +0 -0
- /package/build/es/__demo__/data/{simple.data.json → aggregate/simple.data.json} +0 -0
- /package/build/es/__demo__/data/{simple.metadata.json → aggregate/simple.metadata.json} +0 -0
- /package/build/es/__demo__/data/{simple.visualization.json → aggregate/simple.visualization.json} +0 -0
- /package/build/es/__demo__/data/{target-with-legend.data.json → aggregate/target-with-legend.data.json} +0 -0
- /package/build/es/__demo__/data/{target-with-legend.metadata.json → aggregate/target-with-legend.metadata.json} +0 -0
- /package/build/es/__demo__/data/{target-with-legend.visualization.json → aggregate/target-with-legend.visualization.json} +0 -0
- /package/build/es/__demo__/data/{under-above-100.legendSet.json → aggregate/under-above-100.legendSet.json} +0 -0
- /package/build/es/__demo__/data/{weeklyColumns.data.json → aggregate/weeklyColumns.data.json} +0 -0
- /package/build/es/__demo__/data/{weeklyColumns.metadata.json → aggregate/weeklyColumns.metadata.json} +0 -0
- /package/build/es/__demo__/data/{weeklyColumns.visualization.json → aggregate/weeklyColumns.visualization.json} +0 -0
package/build/cjs/components/TranslationDialog/TranslationModal/__tests__/TranslationModal.spec.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var _appRuntime = require("@dhis2/app-runtime");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
6
6
|
var _TranslationModal = require("../TranslationModal.js");
|
|
7
7
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
const mockUseTranslationResults = jest.fn(() => ({
|
|
@@ -12,19 +12,26 @@ const mockUseTranslationResults = jest.fn(() => ({
|
|
|
12
12
|
jest.mock('../useTranslationsResults.js', () => ({
|
|
13
13
|
useTranslationsResults: args => mockUseTranslationResults(args)
|
|
14
14
|
}));
|
|
15
|
-
describe('
|
|
16
|
-
let shallowTranslationModal;
|
|
15
|
+
describe('TranslationDialog component', () => {
|
|
17
16
|
let props;
|
|
18
17
|
const onClose = jest.fn();
|
|
19
18
|
const onTranslationSaved = jest.fn();
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
const renderTranslationModalComponent = props => {
|
|
20
|
+
return (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_appRuntime.CustomDataProvider, {
|
|
21
|
+
data: {
|
|
22
|
+
i18n: {
|
|
23
|
+
name: 'Name',
|
|
24
|
+
description: 'Description'
|
|
25
|
+
},
|
|
26
|
+
'locales/db': [{
|
|
27
|
+
locale: 'en',
|
|
28
|
+
name: 'English',
|
|
29
|
+
displayName: 'English'
|
|
30
|
+
}]
|
|
31
|
+
}
|
|
32
|
+
}, /*#__PURE__*/_react2.default.createElement(_TranslationModal.TranslationModal, props)));
|
|
25
33
|
};
|
|
26
34
|
beforeEach(() => {
|
|
27
|
-
shallowTranslationModal = undefined;
|
|
28
35
|
props = {
|
|
29
36
|
fieldsToTranslate: ['name', 'description'],
|
|
30
37
|
objectToTranslate: {
|
|
@@ -35,15 +42,17 @@ describe('The Translation Dialog component', () => {
|
|
|
35
42
|
onTranslationSaved
|
|
36
43
|
};
|
|
37
44
|
});
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
test('renders a Modal component', () => {
|
|
46
|
+
renderTranslationModalComponent(props);
|
|
47
|
+
expect(_react.screen.getByTestId('dhis2-analytics-translation-modal')).toBeInTheDocument();
|
|
40
48
|
});
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
test("renders a ModalTitle containing the object's name", () => {
|
|
50
|
+
renderTranslationModalComponent(props);
|
|
51
|
+
expect(_react.screen.getByText(`Translate: ${props.objectToTranslate.name}`)).toBeInTheDocument();
|
|
43
52
|
});
|
|
44
53
|
test.each(['https://dhis2.tld/path/api/visualization/object-id', 'https://dhis2.tld/path/api/42/visualization/object-id'])('uses the correct resource for the translation endpoint', href => {
|
|
45
54
|
props.objectToTranslate.href = href;
|
|
46
|
-
|
|
55
|
+
renderTranslationModalComponent(props);
|
|
47
56
|
expect(mockUseTranslationResults).toHaveBeenCalled();
|
|
48
57
|
expect(mockUseTranslationResults).toHaveBeenCalledWith({
|
|
49
58
|
resource: 'visualization/object-id'
|
package/build/cjs/index.js
CHANGED
|
@@ -220,6 +220,7 @@ var _exportNames = {
|
|
|
220
220
|
HIDE_EMPTY_ROW_ITEMS_BEFORE_FIRST_AFTER_LAST: true,
|
|
221
221
|
HIDE_EMPTY_ROW_ITEMS_ALL: true,
|
|
222
222
|
formatValue: true,
|
|
223
|
+
transformEventAggregateResponse: true,
|
|
223
224
|
COLOR_SET_DEFAULT: true,
|
|
224
225
|
COLOR_SET_BASIC: true,
|
|
225
226
|
COLOR_SET_EXTENDED: true,
|
|
@@ -1857,6 +1858,12 @@ Object.defineProperty(exports, "preparePayloadForSaveAs", {
|
|
|
1857
1858
|
return _utils.preparePayloadForSaveAs;
|
|
1858
1859
|
}
|
|
1859
1860
|
});
|
|
1861
|
+
Object.defineProperty(exports, "transformEventAggregateResponse", {
|
|
1862
|
+
enumerable: true,
|
|
1863
|
+
get: function () {
|
|
1864
|
+
return _response.transformResponse;
|
|
1865
|
+
}
|
|
1866
|
+
});
|
|
1860
1867
|
Object.defineProperty(exports, "useCachedDataQuery", {
|
|
1861
1868
|
enumerable: true,
|
|
1862
1869
|
get: function () {
|
|
@@ -1981,6 +1988,7 @@ var _fontStyle = require("./modules/fontStyle.js");
|
|
|
1981
1988
|
var _legends = require("./modules/legends.js");
|
|
1982
1989
|
var _hideEmptyRowItems = require("./modules/hideEmptyRowItems.js");
|
|
1983
1990
|
var _renderValue = require("./modules/renderValue.js");
|
|
1991
|
+
var _response = require("./modules/response/event/response.js");
|
|
1984
1992
|
var _colorSets = require("./visualizations/util/colors/colorSets.js");
|
|
1985
1993
|
var _index10 = require("./components/PeriodDimension/utils/index.js");
|
|
1986
1994
|
var _relativePeriods = require("./components/PeriodDimension/utils/relativePeriods.js");
|
|
@@ -80,7 +80,8 @@ class AdaptiveClippingController {
|
|
|
80
80
|
if (isColumn) {
|
|
81
81
|
var _axis$sizes$index;
|
|
82
82
|
const headerSize = this.measureText(label, {
|
|
83
|
-
maxWidth: isLeafHeader ? Math.max(_pivotTableConstants.CLIPPED_CELL_MIN_SIZE, ((_axis$sizes$index = axis.sizes[index]) === null || _axis$sizes$index === void 0 ? void 0 : _axis$sizes$index.size) || 0) : 0
|
|
83
|
+
maxWidth: isLeafHeader ? Math.max(_pivotTableConstants.CLIPPED_CELL_MIN_SIZE, ((_axis$sizes$index = axis.sizes[index]) === null || _axis$sizes$index === void 0 ? void 0 : _axis$sizes$index.size) || 0) : 0,
|
|
84
|
+
...header.style
|
|
84
85
|
});
|
|
85
86
|
this.addSize({
|
|
86
87
|
row: -headerStack.length + level,
|
|
@@ -6,16 +6,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.measureTextWithWrapping = void 0;
|
|
7
7
|
var _pivotTableConstants = require("./pivotTableConstants.js");
|
|
8
8
|
let canvas;
|
|
9
|
-
const getContext = fontSize => {
|
|
9
|
+
const getContext = (fontSize = 11, fontFamily = 'Roboto, Arial, sans-serif') => {
|
|
10
10
|
if (!canvas) {
|
|
11
11
|
canvas = document.createElement('canvas');
|
|
12
12
|
}
|
|
13
13
|
const ctx = canvas.getContext('2d');
|
|
14
|
-
ctx.font = `${fontSize}px
|
|
14
|
+
ctx.font = `${fontSize}px ${fontFamily}`;
|
|
15
15
|
return ctx;
|
|
16
16
|
};
|
|
17
|
-
const measureText = (text, fontSize
|
|
18
|
-
const ctx = getContext(fontSize);
|
|
17
|
+
const measureText = (text, fontSize, fontFamily) => {
|
|
18
|
+
const ctx = getContext(fontSize, fontFamily);
|
|
19
19
|
const textMetrics = ctx.measureText(text);
|
|
20
20
|
return textMetrics.width;
|
|
21
21
|
};
|
|
@@ -23,7 +23,8 @@ const measureTextWithWrapping = (text, {
|
|
|
23
23
|
fontSize = 11,
|
|
24
24
|
maxWidth = _pivotTableConstants.CLIPPED_CELL_MAX_SIZE,
|
|
25
25
|
justifyBuffer = _pivotTableConstants.WRAPPED_TEXT_JUSTIFY_BUFFER,
|
|
26
|
-
lineHeight = _pivotTableConstants.WRAPPED_TEXT_LINE_HEIGHT
|
|
26
|
+
lineHeight = _pivotTableConstants.WRAPPED_TEXT_LINE_HEIGHT,
|
|
27
|
+
fontFamily
|
|
27
28
|
}) => {
|
|
28
29
|
if (!text) {
|
|
29
30
|
return {
|
|
@@ -42,7 +43,7 @@ const measureTextWithWrapping = (text, {
|
|
|
42
43
|
const words = paragraphs.shift().split(/\s+/);
|
|
43
44
|
while (words.length) {
|
|
44
45
|
const nextWord = (currentLineWidth === 0 ? '' : ' ') + words.shift();
|
|
45
|
-
const nextWordWidth = measureText(nextWord, fontSize);
|
|
46
|
+
const nextWordWidth = measureText(nextWord, fontSize, fontFamily);
|
|
46
47
|
if (maxWidth && currentLineWidth + nextWordWidth > maxWidth) {
|
|
47
48
|
if (currentLineWidth <= maxWidth - justifyBuffer) {
|
|
48
49
|
// Wrapping this word would cause an unnaturally short line
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _valueTypes = require("../../../valueTypes.js");
|
|
4
|
+
var _default = require("../default.js");
|
|
5
|
+
var _response = require("../response.js");
|
|
6
|
+
const testId = 'Zj7UnCAulEk.qrur9Dvnyt5';
|
|
7
|
+
describe('default', () => {
|
|
8
|
+
// applyDefaultHandler is tested by response.spec.js
|
|
9
|
+
|
|
10
|
+
describe('getUnique', () => {
|
|
11
|
+
it('removes duplicate string numbers', () => {
|
|
12
|
+
const arr = ['2', '10', '2', '01', '1', '-1', '-1', '1', '10'];
|
|
13
|
+
expect((0, _default.getUnique)(arr)).toEqual(['2', '10', '01', '1', '-1']);
|
|
14
|
+
});
|
|
15
|
+
it('treats "01" and "1" as different strings', () => {
|
|
16
|
+
const arr = ['01', '1', '01'];
|
|
17
|
+
expect((0, _default.getUnique)(arr)).toEqual(['01', '1']);
|
|
18
|
+
});
|
|
19
|
+
it('handles empty array', () => {
|
|
20
|
+
expect((0, _default.getUnique)([])).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
it('preserves order of first occurrence', () => {
|
|
23
|
+
const arr = ['2', '1', '2', '1'];
|
|
24
|
+
expect((0, _default.getUnique)(arr)).toEqual(['2', '1']);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('getValuesUniqueSortedAsc', () => {
|
|
28
|
+
it('sorts string numbers numerically', () => {
|
|
29
|
+
expect((0, _default.getValuesUniqueSortedAsc)(['1', '10', '-1', '5', '5', '3'], _valueTypes.VALUE_TYPE_NUMBER)).toEqual(['-1', '1', '3', '5', '10']);
|
|
30
|
+
});
|
|
31
|
+
it('sorts non-numeric strings as strings', () => {
|
|
32
|
+
expect((0, _default.getValuesUniqueSortedAsc)(['1995-04-18 13:54:00.0', '1991-12-03 12:02:00.0', '1992-01-05 12:51:00.0', '1991-05-21 14:46:00.0', '1998-03-01 11:21:00.0', '1991-09-02 10:21:00.0', '1992-01-04 12:02:00.0', '1991-12-02 12:01:00.0', '1990-01-25 14:51:00.0', '1991-05-22 14:47:00.0'])).toEqual(['1990-01-25 14:51:00.0', '1991-05-21 14:46:00.0', '1991-05-22 14:47:00.0', '1991-09-02 10:21:00.0', '1991-12-02 12:01:00.0', '1991-12-03 12:02:00.0', '1992-01-04 12:02:00.0', '1992-01-05 12:51:00.0', '1995-04-18 13:54:00.0', '1998-03-01 11:21:00.0']);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe('getPrefixedValue', () => {
|
|
36
|
+
it('returns prefix and value separated by a colon', () => {
|
|
37
|
+
expect((0, _default.getPrefixedValue)('123', 'id')).toBe(`id${_response.PREFIX_SEPARATOR}123`);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('getItems', () => {
|
|
41
|
+
it('returns an object with prefixed keys and correct names', () => {
|
|
42
|
+
expect((0, _default.getItems)(['1', '2'], testId)).toEqual({
|
|
43
|
+
[testId + `${_response.PREFIX_SEPARATOR}1`]: {
|
|
44
|
+
name: '1'
|
|
45
|
+
},
|
|
46
|
+
[testId + `${_response.PREFIX_SEPARATOR}2`]: {
|
|
47
|
+
name: '2'
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
it('uses the formatter if one is provided', () => {
|
|
52
|
+
expect((0, _default.getItems)(['world'], 'hello', {
|
|
53
|
+
itemFormatter: str => str.toUpperCase()
|
|
54
|
+
})).toEqual({
|
|
55
|
+
[`hello${_response.PREFIX_SEPARATOR}world`]: {
|
|
56
|
+
name: 'WORLD'
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('getDimensions', () => {
|
|
62
|
+
it('returns an object with dimensionId as key and correctly prefixed values', () => {
|
|
63
|
+
expect((0, _default.getDimensions)(['1', '2'], testId)).toEqual({
|
|
64
|
+
[testId]: [testId + `${_response.PREFIX_SEPARATOR}1`, testId + `${_response.PREFIX_SEPARATOR}2`]
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('getRows', () => {
|
|
69
|
+
it('prefixes value at headerIndex for each row', () => {
|
|
70
|
+
const rows = [['a', '1', 'x'], ['b', '2', 'y']];
|
|
71
|
+
expect((0, _default.getRows)(rows, 1, testId)).toEqual([['a', `${testId}${_response.PREFIX_SEPARATOR}1`, 'x'], ['b', `${testId}${_response.PREFIX_SEPARATOR}2`, 'y']]);
|
|
72
|
+
});
|
|
73
|
+
it('handles empty rows array', () => {
|
|
74
|
+
expect((0, _default.getRows)([], 1, 'a')).toEqual([]);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _optionsetDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/optionset.data.hidena.json"));
|
|
4
|
+
var _optionsetDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/optionset.data.org.json"));
|
|
5
|
+
var _optionSet = require("../optionSet.js");
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
const testOptionCodeIdMap1 = {
|
|
8
|
+
ONE: 'optionId1',
|
|
9
|
+
TWO: 'optionId2'
|
|
10
|
+
};
|
|
11
|
+
const testOptionCodeIdMap2 = {
|
|
12
|
+
ONE: 'optionId3',
|
|
13
|
+
TWO: 'optionId4'
|
|
14
|
+
};
|
|
15
|
+
describe('optionSet', () => {
|
|
16
|
+
// applyOptionSetHandler is tested by response.spec.js
|
|
17
|
+
|
|
18
|
+
describe('getOptionCodeIdMap', () => {
|
|
19
|
+
it('should create an option code:id object', () => {
|
|
20
|
+
const testId = _optionsetDataHidena.default.headers[0].name;
|
|
21
|
+
const testOptionIds = _optionsetDataHidena.default.metaData.dimensions[testId];
|
|
22
|
+
const testOptionItems = _optionsetDataHidena.default.metaData.items;
|
|
23
|
+
expect((0, _optionSet.getOptionCodeIdMap)(testOptionIds, testOptionItems)).toEqual(testOptionCodeIdMap1);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Test the solution for two option sets with shared option codes
|
|
28
|
+
describe('getOptionIdRows', () => {
|
|
29
|
+
it('should replace option codes with ids in the right index', () => {
|
|
30
|
+
const optionSet1Rows = (0, _optionSet.getOptionIdRows)(_optionsetDataOrg.default.rows, testOptionCodeIdMap1, 0);
|
|
31
|
+
const optionSet1And2Rows = (0, _optionSet.getOptionIdRows)(optionSet1Rows, testOptionCodeIdMap2, 1);
|
|
32
|
+
expect(optionSet1And2Rows).toEqual(_optionsetDataHidena.default.rows);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _booleanDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/boolean.data.hidena.json"));
|
|
4
|
+
var _booleanData = _interopRequireDefault(require("../../../../__demo__/data/event/boolean.data.json"));
|
|
5
|
+
var _booleanDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/boolean.data.org.json"));
|
|
6
|
+
var _dateDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/date.data.hidena.json"));
|
|
7
|
+
var _dateData = _interopRequireDefault(require("../../../../__demo__/data/event/date.data.json"));
|
|
8
|
+
var _dateDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/date.data.org.json"));
|
|
9
|
+
var _datetimeDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/datetime.data.hidena.json"));
|
|
10
|
+
var _datetimeData = _interopRequireDefault(require("../../../../__demo__/data/event/datetime.data.json"));
|
|
11
|
+
var _datetimeDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/datetime.data.org.json"));
|
|
12
|
+
var _emailDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/email.data.hidena.json"));
|
|
13
|
+
var _emailData = _interopRequireDefault(require("../../../../__demo__/data/event/email.data.json"));
|
|
14
|
+
var _emailDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/email.data.org.json"));
|
|
15
|
+
var _integerDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/integer.data.hidena.json"));
|
|
16
|
+
var _integerData = _interopRequireDefault(require("../../../../__demo__/data/event/integer.data.json"));
|
|
17
|
+
var _integerDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/integer.data.org.json"));
|
|
18
|
+
var _optionsetDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/optionset.data.hidena.json"));
|
|
19
|
+
var _optionsetData = _interopRequireDefault(require("../../../../__demo__/data/event/optionset.data.json"));
|
|
20
|
+
var _optionsetDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/optionset.data.org.json"));
|
|
21
|
+
var _timeDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/time.data.hidena.json"));
|
|
22
|
+
var _timeData = _interopRequireDefault(require("../../../../__demo__/data/event/time.data.json"));
|
|
23
|
+
var _timeDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/time.data.org.json"));
|
|
24
|
+
var _yesonlyDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/yesonly.data.hidena.json"));
|
|
25
|
+
var _yesonlyData = _interopRequireDefault(require("../../../../__demo__/data/event/yesonly.data.json"));
|
|
26
|
+
var _yesonlyDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/yesonly.data.org.json"));
|
|
27
|
+
var _valueTypes = require("../../../valueTypes.js");
|
|
28
|
+
var _response = require("../response.js");
|
|
29
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
30
|
+
describe('response', () => {
|
|
31
|
+
describe('getItemFormatterByValueType', () => {
|
|
32
|
+
it('should return the correct formatter and format correctly', () => {
|
|
33
|
+
expect((0, _response.getItemFormatterByValueType)(_valueTypes.VALUE_TYPE_BOOLEAN)('1')).toBe('Yes');
|
|
34
|
+
expect((0, _response.getItemFormatterByValueType)(_valueTypes.VALUE_TYPE_BOOLEAN)('0')).toBe('No');
|
|
35
|
+
expect((0, _response.getItemFormatterByValueType)(_valueTypes.VALUE_TYPE_TRUE_ONLY)('1')).toBe('Yes');
|
|
36
|
+
expect((0, _response.getItemFormatterByValueType)(_valueTypes.VALUE_TYPE_AGE)('1985-01-01 00:00:00.0')).toBe('1985-01-01');
|
|
37
|
+
expect((0, _response.getItemFormatterByValueType)(_valueTypes.VALUE_TYPE_DATE)('2023-01-01 00:00:00.0')).toBe('2023-01-01');
|
|
38
|
+
expect((0, _response.getItemFormatterByValueType)(_valueTypes.VALUE_TYPE_DATETIME)('2023-01-01 12:00:00.0')).toBe('2023-01-01 12:00');
|
|
39
|
+
expect((0, _response.getItemFormatterByValueType)(_valueTypes.VALUE_TYPE_PERCENTAGE)('50.0')).toBe('50');
|
|
40
|
+
expect((0, _response.getItemFormatterByValueType)('NOT_A_TYPE')).toBe(undefined);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('transformResponse', () => {
|
|
44
|
+
describe('boolean', () => {
|
|
45
|
+
it('transforms response', () => {
|
|
46
|
+
expect((0, _response.transformResponse)(_booleanDataOrg.default)).toEqual(_booleanData.default);
|
|
47
|
+
});
|
|
48
|
+
it('transforms response and hides N/A data', () => {
|
|
49
|
+
expect((0, _response.transformResponse)(_booleanDataOrg.default, {
|
|
50
|
+
hideNaData: true
|
|
51
|
+
})).toEqual(_booleanDataHidena.default);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('date', () => {
|
|
55
|
+
it('transforms response', () => {
|
|
56
|
+
expect((0, _response.transformResponse)(_dateDataOrg.default)).toEqual(_dateData.default);
|
|
57
|
+
});
|
|
58
|
+
it('transforms response and hides N/A data', () => {
|
|
59
|
+
expect((0, _response.transformResponse)(_dateDataOrg.default, {
|
|
60
|
+
hideNaData: true
|
|
61
|
+
})).toEqual(_dateDataHidena.default);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('datetime', () => {
|
|
65
|
+
it('transforms response', () => {
|
|
66
|
+
expect((0, _response.transformResponse)(_datetimeDataOrg.default)).toEqual(_datetimeData.default);
|
|
67
|
+
});
|
|
68
|
+
it('transforms response and hides N/A data', () => {
|
|
69
|
+
expect((0, _response.transformResponse)(_datetimeDataOrg.default, {
|
|
70
|
+
hideNaData: true
|
|
71
|
+
})).toEqual(_datetimeDataHidena.default);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('numeric', () => {
|
|
75
|
+
it('transforms response', () => {
|
|
76
|
+
expect((0, _response.transformResponse)(_integerDataOrg.default)).toEqual(_integerData.default);
|
|
77
|
+
});
|
|
78
|
+
it('transforms response and hides N/A data', () => {
|
|
79
|
+
expect((0, _response.transformResponse)(_integerDataOrg.default, {
|
|
80
|
+
hideNaData: true
|
|
81
|
+
})).toEqual(_integerDataHidena.default);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
describe('option set', () => {
|
|
85
|
+
it('transforms response with non-unique codes across two option sets', () => {
|
|
86
|
+
expect((0, _response.transformResponse)(_optionsetDataOrg.default)).toEqual(_optionsetData.default);
|
|
87
|
+
});
|
|
88
|
+
it('transforms response with non-unique codes across two option sets and hides N/A data', () => {
|
|
89
|
+
expect((0, _response.transformResponse)(_optionsetDataOrg.default, {
|
|
90
|
+
hideNaData: true
|
|
91
|
+
})).toEqual(_optionsetDataHidena.default);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('text', () => {
|
|
95
|
+
it('transforms response', () => {
|
|
96
|
+
expect((0, _response.transformResponse)(_emailDataOrg.default)).toEqual(_emailData.default);
|
|
97
|
+
});
|
|
98
|
+
it('transforms response and hides N/A data', () => {
|
|
99
|
+
expect((0, _response.transformResponse)(_emailDataOrg.default, {
|
|
100
|
+
hideNaData: true
|
|
101
|
+
})).toEqual(_emailDataHidena.default);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('time', () => {
|
|
105
|
+
it('transforms response', () => {
|
|
106
|
+
expect((0, _response.transformResponse)(_timeDataOrg.default)).toEqual(_timeData.default);
|
|
107
|
+
});
|
|
108
|
+
it('transforms response and hides N/A data', () => {
|
|
109
|
+
expect((0, _response.transformResponse)(_timeDataOrg.default, {
|
|
110
|
+
hideNaData: true
|
|
111
|
+
})).toEqual(_timeDataHidena.default);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
describe('yes only', () => {
|
|
115
|
+
it('transforms response', () => {
|
|
116
|
+
expect((0, _response.transformResponse)(_yesonlyDataOrg.default)).toEqual(_yesonlyData.default);
|
|
117
|
+
});
|
|
118
|
+
it('transforms response and hides N/A data', () => {
|
|
119
|
+
expect((0, _response.transformResponse)(_yesonlyDataOrg.default, {
|
|
120
|
+
hideNaData: true
|
|
121
|
+
})).toEqual(_yesonlyDataHidena.default);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getValuesUniqueSortedAsc = exports.getUnique = exports.getRows = exports.getPrefixedValue = exports.getItems = exports.getDimensions = exports.applyDefaultHandler = void 0;
|
|
7
|
+
var _valueTypes = require("../../valueTypes.js");
|
|
8
|
+
var _response = require("./response.js");
|
|
9
|
+
const getUnique = array => [...new Set(array)];
|
|
10
|
+
exports.getUnique = getUnique;
|
|
11
|
+
const getValuesUniqueSortedAsc = (values, valueType = _valueTypes.VALUE_TYPE_TEXT) => (0, _valueTypes.isNumericValueType)(valueType) || (0, _valueTypes.isBooleanValueType)(valueType) ? getUnique(values).map(x => [Number(x), x]).sort((a, b) => a[0] - b[0]).map(arr => arr[1]) : getUnique(values).slice().sort((a, b) => a.localeCompare(b));
|
|
12
|
+
exports.getValuesUniqueSortedAsc = getValuesUniqueSortedAsc;
|
|
13
|
+
const getPrefixedValue = (value, prefix) => `${prefix}${_response.PREFIX_SEPARATOR}${value}`;
|
|
14
|
+
exports.getPrefixedValue = getPrefixedValue;
|
|
15
|
+
const getItems = (values, dimensionId, {
|
|
16
|
+
itemFormatter
|
|
17
|
+
} = {}) => values.reduce((items, value) => {
|
|
18
|
+
items[getPrefixedValue(value, dimensionId)] = {
|
|
19
|
+
name: itemFormatter ? itemFormatter(value) : value
|
|
20
|
+
};
|
|
21
|
+
return items;
|
|
22
|
+
}, {});
|
|
23
|
+
exports.getItems = getItems;
|
|
24
|
+
const getDimensions = (values, dimensionId) => ({
|
|
25
|
+
[dimensionId]: values.map(value => getPrefixedValue(value, dimensionId))
|
|
26
|
+
});
|
|
27
|
+
exports.getDimensions = getDimensions;
|
|
28
|
+
const getRows = (rows, headerIndex, dimensionId) => {
|
|
29
|
+
let row;
|
|
30
|
+
let value;
|
|
31
|
+
return rows.map(r => {
|
|
32
|
+
value = r[headerIndex];
|
|
33
|
+
if (value !== _response.NA_VALUE) {
|
|
34
|
+
row = [...r];
|
|
35
|
+
row[headerIndex] = getPrefixedValue(row[headerIndex], dimensionId);
|
|
36
|
+
return row;
|
|
37
|
+
}
|
|
38
|
+
return r;
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
exports.getRows = getRows;
|
|
42
|
+
const applyDefaultHandler = (response, headerIndex, {
|
|
43
|
+
itemFormatter
|
|
44
|
+
} = {}) => {
|
|
45
|
+
const header = response.headers[headerIndex];
|
|
46
|
+
const uniqueSortedValuesAsc = getValuesUniqueSortedAsc(response.rows.map(row => row[headerIndex]).filter(value => value !== _response.NA_VALUE), header.valueType);
|
|
47
|
+
return {
|
|
48
|
+
...response,
|
|
49
|
+
metaData: {
|
|
50
|
+
...response.metaData,
|
|
51
|
+
items: {
|
|
52
|
+
...response.metaData.items,
|
|
53
|
+
...getItems(uniqueSortedValuesAsc, header.name, {
|
|
54
|
+
itemFormatter
|
|
55
|
+
})
|
|
56
|
+
},
|
|
57
|
+
dimensions: {
|
|
58
|
+
...response.metaData.dimensions,
|
|
59
|
+
...getDimensions(uniqueSortedValuesAsc, header.name)
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
rows: [...getRows(response.rows, headerIndex, header.name)]
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
exports.applyDefaultHandler = applyDefaultHandler;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getOptionIdRows = exports.getOptionCodeIdMap = exports.applyOptionSetHandler = void 0;
|
|
7
|
+
var _response = require("./response.js");
|
|
8
|
+
const getOptionCodeIdMap = (optionIds, items) => optionIds.reduce((map, optionId) => {
|
|
9
|
+
map[items[optionId].code] = optionId;
|
|
10
|
+
return map;
|
|
11
|
+
}, {});
|
|
12
|
+
exports.getOptionCodeIdMap = getOptionCodeIdMap;
|
|
13
|
+
const getOptionIdRows = (rows, optionCodeIdMap, headerIndex) => {
|
|
14
|
+
let value;
|
|
15
|
+
let row;
|
|
16
|
+
return rows.map(r => {
|
|
17
|
+
value = r[headerIndex];
|
|
18
|
+
if (value !== _response.NA_VALUE) {
|
|
19
|
+
row = [...r];
|
|
20
|
+
row[headerIndex] = optionCodeIdMap[value];
|
|
21
|
+
return row;
|
|
22
|
+
}
|
|
23
|
+
return r;
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
exports.getOptionIdRows = getOptionIdRows;
|
|
27
|
+
const applyOptionSetHandler = (response, headerIndex) => {
|
|
28
|
+
const header = response.headers[headerIndex];
|
|
29
|
+
const optionIds = response.metaData.dimensions[header.name];
|
|
30
|
+
const optionCodeIdMap = getOptionCodeIdMap(optionIds, response.metaData.items);
|
|
31
|
+
return {
|
|
32
|
+
...response,
|
|
33
|
+
rows: getOptionIdRows(response.rows, optionCodeIdMap, headerIndex)
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
exports.applyOptionSetHandler = applyOptionSetHandler;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.transformResponse = exports.getItemFormatterByValueType = exports.UNSUPPORTED_VALUE_TYPES = exports.PREFIX_SEPARATOR = exports.NA_VALUE_ITEM = exports.NA_VALUE = void 0;
|
|
7
|
+
var _d2I18n = _interopRequireDefault(require("@dhis2/d2-i18n"));
|
|
8
|
+
var _predefinedDimensions = require("../../predefinedDimensions.js");
|
|
9
|
+
var _valueTypes = require("../../valueTypes.js");
|
|
10
|
+
var _default = require("./default.js");
|
|
11
|
+
var _optionSet = require("./optionSet.js");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
const PREFIX_SEPARATOR = exports.PREFIX_SEPARATOR = '_';
|
|
14
|
+
const NA_VALUE = exports.NA_VALUE = '';
|
|
15
|
+
const NA_VALUE_ITEM = exports.NA_VALUE_ITEM = {
|
|
16
|
+
name: _d2I18n.default.t('No value'),
|
|
17
|
+
style: {
|
|
18
|
+
fontStyle: 'italic',
|
|
19
|
+
color: '#6C7787',
|
|
20
|
+
fontFamily: 'monospace',
|
|
21
|
+
letterSpacing: '-0.3px'
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const UNSUPPORTED_VALUE_TYPES = exports.UNSUPPORTED_VALUE_TYPES = [_valueTypes.VALUE_TYPE_COORDINATE, _valueTypes.VALUE_TYPE_GEOJSON, _valueTypes.VALUE_TYPE_FILE_RESOURCE, _valueTypes.VALUE_TYPE_IMAGE, _valueTypes.VALUE_TYPE_MULTI_TEXT, _valueTypes.VALUE_TYPE_REFERENCE];
|
|
25
|
+
const getItemFormatterByValueType = valueType => {
|
|
26
|
+
switch (valueType) {
|
|
27
|
+
case _valueTypes.VALUE_TYPE_AGE:
|
|
28
|
+
case _valueTypes.VALUE_TYPE_DATE:
|
|
29
|
+
return name => name.replace(/ 00:00:00\.0$/, '');
|
|
30
|
+
case _valueTypes.VALUE_TYPE_BOOLEAN:
|
|
31
|
+
case _valueTypes.VALUE_TYPE_TRUE_ONLY:
|
|
32
|
+
return name => name === '1' ? _d2I18n.default.t('Yes') : _d2I18n.default.t('No');
|
|
33
|
+
case _valueTypes.VALUE_TYPE_DATETIME:
|
|
34
|
+
return name => name.replace(/:00\.0$/, '');
|
|
35
|
+
case _valueTypes.VALUE_TYPE_PERCENTAGE:
|
|
36
|
+
return name => name.endsWith('.0') ? name.slice(0, -2) : name;
|
|
37
|
+
default:
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.getItemFormatterByValueType = getItemFormatterByValueType;
|
|
42
|
+
const transformResponse = (response, {
|
|
43
|
+
hideNaData = false
|
|
44
|
+
} = {}) => {
|
|
45
|
+
// Do not modify the original response
|
|
46
|
+
// Rows is mapped by the handlers
|
|
47
|
+
let transformedResponse = {
|
|
48
|
+
...response,
|
|
49
|
+
metaData: {
|
|
50
|
+
...response.metaData,
|
|
51
|
+
items: {
|
|
52
|
+
...response.metaData.items
|
|
53
|
+
},
|
|
54
|
+
dimensions: {
|
|
55
|
+
...response.metaData.dimensions
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// Add index to all headers
|
|
61
|
+
// Include only headers that are "meta" and skip "pe" and "ou"
|
|
62
|
+
const metaHeaders = response.headers.map((header, index) => ({
|
|
63
|
+
...header,
|
|
64
|
+
index
|
|
65
|
+
})).filter(header => Boolean(header.meta) && ![_predefinedDimensions.DIMENSION_ID_PERIOD, _predefinedDimensions.DIMENSION_ID_ORGUNIT].includes(header.name));
|
|
66
|
+
|
|
67
|
+
// Legendsets use uids and do not need transformation
|
|
68
|
+
// Skip unsupported value types
|
|
69
|
+
// Option set and Boolean have separate handlers
|
|
70
|
+
// All other types use default handler with specific item formatter
|
|
71
|
+
metaHeaders.forEach(header => {
|
|
72
|
+
if (!(header.legendSet || UNSUPPORTED_VALUE_TYPES.includes(header.valueType))) {
|
|
73
|
+
if (header.optionSet) {
|
|
74
|
+
transformedResponse = (0, _optionSet.applyOptionSetHandler)(transformedResponse, header.index);
|
|
75
|
+
} else {
|
|
76
|
+
transformedResponse = (0, _default.applyDefaultHandler)(transformedResponse, header.index, {
|
|
77
|
+
itemFormatter: getItemFormatterByValueType(header.valueType)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// Add "No value" dimension item if "Hide NA data" option is disabled
|
|
84
|
+
// Only add if there is at least one empty value
|
|
85
|
+
if (!hideNaData) {
|
|
86
|
+
metaHeaders.forEach(header => {
|
|
87
|
+
if (response.rows.map(row => row[header.index]).includes(NA_VALUE)) {
|
|
88
|
+
transformedResponse.metaData.dimensions[header.name] = [...transformedResponse.metaData.dimensions[header.name], NA_VALUE];
|
|
89
|
+
transformedResponse.metaData.items[NA_VALUE] = NA_VALUE_ITEM;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return transformedResponse;
|
|
94
|
+
};
|
|
95
|
+
exports.transformResponse = transformResponse;
|
|
@@ -40,6 +40,23 @@ export const ListOfVisualizationsWithVisTypeFilterAndDividerNoDefaultVisType = (
|
|
|
40
40
|
ListOfVisualizationsWithVisTypeFilterAndDividerNoDefaultVisType.story = {
|
|
41
41
|
name: 'List of visualizations with vis type filter and divider (no default vis type)'
|
|
42
42
|
};
|
|
43
|
+
const filterVisTypesWithGroups = [{
|
|
44
|
+
type: VIS_TYPE_GROUP_ALL
|
|
45
|
+
}, {
|
|
46
|
+
type: VIS_TYPE_GROUP_CHARTS
|
|
47
|
+
}];
|
|
48
|
+
export const ListOfVisualizationsWithVisTypeGroupFilterNoDefaultVisType = () => /*#__PURE__*/React.createElement(OpenFileDialog, {
|
|
49
|
+
type: "visualization",
|
|
50
|
+
filterVisTypes: filterVisTypesWithGroups,
|
|
51
|
+
onClose: Function.prototype,
|
|
52
|
+
onFileSelect: onFileSelect,
|
|
53
|
+
onNew: Function.prototype,
|
|
54
|
+
open: true,
|
|
55
|
+
currentUser: user
|
|
56
|
+
});
|
|
57
|
+
ListOfVisualizationsWithVisTypeGroupFilterNoDefaultVisType.story = {
|
|
58
|
+
name: 'List of visualizations with only vis type group filter (no default vis type)'
|
|
59
|
+
};
|
|
43
60
|
export const ListOfMapsNoVisTypeFilter = () => /*#__PURE__*/React.createElement(OpenFileDialog, {
|
|
44
61
|
type: "map",
|
|
45
62
|
onClose: Function.prototype,
|