@dhis2/analytics 28.0.5 → 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.
Files changed (177) hide show
  1. package/build/cjs/__demo__/{PivotTable.stories.js → PivotTable.aggregate.stories.js} +38 -38
  2. package/build/cjs/__demo__/PivotTable.event.stories.js +440 -0
  3. package/build/cjs/__demo__/data/event/boolean.data.hidena.json +115 -0
  4. package/build/cjs/__demo__/data/event/boolean.data.json +125 -0
  5. package/build/cjs/__demo__/data/event/boolean.data.org.json +106 -0
  6. package/build/cjs/__demo__/data/event/boolean.visualization.json +160 -0
  7. package/build/cjs/__demo__/data/event/date.data.hidena.json +205 -0
  8. package/build/cjs/__demo__/data/event/date.data.json +215 -0
  9. package/build/cjs/__demo__/data/event/date.data.org.json +123 -0
  10. package/build/cjs/__demo__/data/event/date.visualization.json +160 -0
  11. package/build/cjs/__demo__/data/event/datetime.data.hidena.json +215 -0
  12. package/build/cjs/__demo__/data/event/datetime.data.json +225 -0
  13. package/build/cjs/__demo__/data/event/datetime.data.org.json +124 -0
  14. package/build/cjs/__demo__/data/event/datetime.visualization.json +148 -0
  15. package/build/cjs/__demo__/data/event/email.data.hidena.json +192 -0
  16. package/build/cjs/__demo__/data/event/email.data.json +202 -0
  17. package/build/cjs/__demo__/data/event/email.data.org.json +123 -0
  18. package/build/cjs/__demo__/data/event/email.visualization.json +148 -0
  19. package/build/cjs/__demo__/data/event/integer.data.hidena.json +165 -0
  20. package/build/cjs/__demo__/data/event/integer.data.json +175 -0
  21. package/build/cjs/__demo__/data/event/integer.data.org.json +120 -0
  22. package/build/cjs/__demo__/data/event/integer.visualization.json +163 -0
  23. package/build/cjs/__demo__/data/event/legendset.data.hidena.json +154 -0
  24. package/build/cjs/__demo__/data/event/legendset.data.json +164 -0
  25. package/build/cjs/__demo__/data/event/legendset.visualization.json +166 -0
  26. package/build/cjs/__demo__/data/event/optionset.data.hidena.json +125 -0
  27. package/build/cjs/__demo__/data/event/optionset.data.json +134 -0
  28. package/build/cjs/__demo__/data/event/optionset.data.org.json +125 -0
  29. package/build/cjs/__demo__/data/event/optionset.visualization.json +158 -0
  30. package/build/cjs/__demo__/data/event/time.data.hidena.json +165 -0
  31. package/build/cjs/__demo__/data/event/time.data.json +175 -0
  32. package/build/cjs/__demo__/data/event/time.data.org.json +128 -0
  33. package/build/cjs/__demo__/data/event/time.visualization.json +148 -0
  34. package/build/cjs/__demo__/data/event/yesonly.data.hidena.json +127 -0
  35. package/build/cjs/__demo__/data/event/yesonly.data.json +136 -0
  36. package/build/cjs/__demo__/data/event/yesonly.data.org.json +124 -0
  37. package/build/cjs/__demo__/data/event/yesonly.visualization.json +161 -0
  38. package/build/cjs/components/DataDimension/ItemSelector/ItemSelector.js +19 -22
  39. package/build/cjs/components/PivotTable/PivotTableColumnHeaderCell.js +3 -0
  40. package/build/cjs/components/PivotTable/PivotTableRowHeaderCell.js +2 -1
  41. package/build/cjs/index.js +8 -0
  42. package/build/cjs/locales/en/translations.json +1 -0
  43. package/build/cjs/modules/pivotTable/AdaptiveClippingController.js +2 -1
  44. package/build/cjs/modules/pivotTable/getHeaderForDisplay.js +4 -1
  45. package/build/cjs/modules/pivotTable/measureText.js +7 -6
  46. package/build/cjs/modules/response/event/__tests__/default.spec.js +77 -0
  47. package/build/cjs/modules/response/event/__tests__/optionSet.spec.js +35 -0
  48. package/build/cjs/modules/response/event/__tests__/response.spec.js +125 -0
  49. package/build/cjs/modules/response/event/default.js +65 -0
  50. package/build/cjs/modules/response/event/optionSet.js +36 -0
  51. package/build/cjs/modules/response/event/response.js +95 -0
  52. package/build/es/__demo__/{PivotTable.stories.js → PivotTable.aggregate.stories.js} +38 -38
  53. package/build/es/__demo__/PivotTable.event.stories.js +414 -0
  54. package/build/es/__demo__/data/event/boolean.data.hidena.json +115 -0
  55. package/build/es/__demo__/data/event/boolean.data.json +125 -0
  56. package/build/es/__demo__/data/event/boolean.data.org.json +106 -0
  57. package/build/es/__demo__/data/event/boolean.visualization.json +160 -0
  58. package/build/es/__demo__/data/event/date.data.hidena.json +205 -0
  59. package/build/es/__demo__/data/event/date.data.json +215 -0
  60. package/build/es/__demo__/data/event/date.data.org.json +123 -0
  61. package/build/es/__demo__/data/event/date.visualization.json +160 -0
  62. package/build/es/__demo__/data/event/datetime.data.hidena.json +215 -0
  63. package/build/es/__demo__/data/event/datetime.data.json +225 -0
  64. package/build/es/__demo__/data/event/datetime.data.org.json +124 -0
  65. package/build/es/__demo__/data/event/datetime.visualization.json +148 -0
  66. package/build/es/__demo__/data/event/email.data.hidena.json +192 -0
  67. package/build/es/__demo__/data/event/email.data.json +202 -0
  68. package/build/es/__demo__/data/event/email.data.org.json +123 -0
  69. package/build/es/__demo__/data/event/email.visualization.json +148 -0
  70. package/build/es/__demo__/data/event/integer.data.hidena.json +165 -0
  71. package/build/es/__demo__/data/event/integer.data.json +175 -0
  72. package/build/es/__demo__/data/event/integer.data.org.json +120 -0
  73. package/build/es/__demo__/data/event/integer.visualization.json +163 -0
  74. package/build/es/__demo__/data/event/legendset.data.hidena.json +154 -0
  75. package/build/es/__demo__/data/event/legendset.data.json +164 -0
  76. package/build/es/__demo__/data/event/legendset.visualization.json +166 -0
  77. package/build/es/__demo__/data/event/optionset.data.hidena.json +125 -0
  78. package/build/es/__demo__/data/event/optionset.data.json +134 -0
  79. package/build/es/__demo__/data/event/optionset.data.org.json +125 -0
  80. package/build/es/__demo__/data/event/optionset.visualization.json +158 -0
  81. package/build/es/__demo__/data/event/time.data.hidena.json +165 -0
  82. package/build/es/__demo__/data/event/time.data.json +175 -0
  83. package/build/es/__demo__/data/event/time.data.org.json +128 -0
  84. package/build/es/__demo__/data/event/time.visualization.json +148 -0
  85. package/build/es/__demo__/data/event/yesonly.data.hidena.json +127 -0
  86. package/build/es/__demo__/data/event/yesonly.data.json +136 -0
  87. package/build/es/__demo__/data/event/yesonly.data.org.json +124 -0
  88. package/build/es/__demo__/data/event/yesonly.visualization.json +161 -0
  89. package/build/es/components/DataDimension/ItemSelector/ItemSelector.js +19 -22
  90. package/build/es/components/PivotTable/PivotTableColumnHeaderCell.js +3 -0
  91. package/build/es/components/PivotTable/PivotTableRowHeaderCell.js +2 -1
  92. package/build/es/index.js +4 -0
  93. package/build/es/locales/en/translations.json +1 -0
  94. package/build/es/modules/pivotTable/AdaptiveClippingController.js +2 -1
  95. package/build/es/modules/pivotTable/getHeaderForDisplay.js +4 -1
  96. package/build/es/modules/pivotTable/measureText.js +7 -6
  97. package/build/es/modules/response/event/__tests__/default.spec.js +75 -0
  98. package/build/es/modules/response/event/__tests__/optionSet.spec.js +32 -0
  99. package/build/es/modules/response/event/__tests__/response.spec.js +122 -0
  100. package/build/es/modules/response/event/default.js +52 -0
  101. package/build/es/modules/response/event/optionSet.js +27 -0
  102. package/build/es/modules/response/event/response.js +86 -0
  103. package/package.json +1 -1
  104. /package/build/cjs/__demo__/data/{avgTotalAggregationType.data.json → aggregate/avgTotalAggregationType.data.json} +0 -0
  105. /package/build/cjs/__demo__/data/{avgTotalAggregationType.metadata.json → aggregate/avgTotalAggregationType.metadata.json} +0 -0
  106. /package/build/cjs/__demo__/data/{avgTotalAggregationType.visualization.json → aggregate/avgTotalAggregationType.visualization.json} +0 -0
  107. /package/build/cjs/__demo__/data/{deep.data.json → aggregate/deep.data.json} +0 -0
  108. /package/build/cjs/__demo__/data/{deep.visualization.json → aggregate/deep.visualization.json} +0 -0
  109. /package/build/cjs/__demo__/data/{deepWithFilters.data.json → aggregate/deepWithFilters.data.json} +0 -0
  110. /package/build/cjs/__demo__/data/{deepWithFilters.visualization.json → aggregate/deepWithFilters.visualization.json} +0 -0
  111. /package/build/cjs/__demo__/data/{degs.data.json → aggregate/degs.data.json} +0 -0
  112. /package/build/cjs/__demo__/data/{degs.metadata.json → aggregate/degs.metadata.json} +0 -0
  113. /package/build/cjs/__demo__/data/{degs.visualization.json → aggregate/degs.visualization.json} +0 -0
  114. /package/build/cjs/__demo__/data/{diseaseWeeks.data.json → aggregate/diseaseWeeks.data.json} +0 -0
  115. /package/build/cjs/__demo__/data/{diseaseWeeks.metadata.json → aggregate/diseaseWeeks.metadata.json} +0 -0
  116. /package/build/cjs/__demo__/data/{diseaseWeeks.visualization.json → aggregate/diseaseWeeks.visualization.json} +0 -0
  117. /package/build/cjs/__demo__/data/{emptyColumns.data.json → aggregate/emptyColumns.data.json} +0 -0
  118. /package/build/cjs/__demo__/data/{emptyColumns.metadata.json → aggregate/emptyColumns.metadata.json} +0 -0
  119. /package/build/cjs/__demo__/data/{emptyColumns.visualization.json → aggregate/emptyColumns.visualization.json} +0 -0
  120. /package/build/cjs/__demo__/data/{emptyRows.data.json → aggregate/emptyRows.data.json} +0 -0
  121. /package/build/cjs/__demo__/data/{emptyRows.visualization.json → aggregate/emptyRows.visualization.json} +0 -0
  122. /package/build/cjs/__demo__/data/{hierarchy.data.json → aggregate/hierarchy.data.json} +0 -0
  123. /package/build/cjs/__demo__/data/{hierarchy.metadata.json → aggregate/hierarchy.metadata.json} +0 -0
  124. /package/build/cjs/__demo__/data/{hierarchy.visualization.json → aggregate/hierarchy.visualization.json} +0 -0
  125. /package/build/cjs/__demo__/data/{lastFiveYears.data.json → aggregate/lastFiveYears.data.json} +0 -0
  126. /package/build/cjs/__demo__/data/{lastFiveYears.metadata.json → aggregate/lastFiveYears.metadata.json} +0 -0
  127. /package/build/cjs/__demo__/data/{lastFiveYears.visualization.json → aggregate/lastFiveYears.visualization.json} +0 -0
  128. /package/build/cjs/__demo__/data/{narrative.data.json → aggregate/narrative.data.json} +0 -0
  129. /package/build/cjs/__demo__/data/{narrative.metadata.json → aggregate/narrative.metadata.json} +0 -0
  130. /package/build/cjs/__demo__/data/{narrative.visualization.json → aggregate/narrative.visualization.json} +0 -0
  131. /package/build/cjs/__demo__/data/{simple.data.json → aggregate/simple.data.json} +0 -0
  132. /package/build/cjs/__demo__/data/{simple.metadata.json → aggregate/simple.metadata.json} +0 -0
  133. /package/build/cjs/__demo__/data/{simple.visualization.json → aggregate/simple.visualization.json} +0 -0
  134. /package/build/cjs/__demo__/data/{target-with-legend.data.json → aggregate/target-with-legend.data.json} +0 -0
  135. /package/build/cjs/__demo__/data/{target-with-legend.metadata.json → aggregate/target-with-legend.metadata.json} +0 -0
  136. /package/build/cjs/__demo__/data/{target-with-legend.visualization.json → aggregate/target-with-legend.visualization.json} +0 -0
  137. /package/build/cjs/__demo__/data/{under-above-100.legendSet.json → aggregate/under-above-100.legendSet.json} +0 -0
  138. /package/build/cjs/__demo__/data/{weeklyColumns.data.json → aggregate/weeklyColumns.data.json} +0 -0
  139. /package/build/cjs/__demo__/data/{weeklyColumns.metadata.json → aggregate/weeklyColumns.metadata.json} +0 -0
  140. /package/build/cjs/__demo__/data/{weeklyColumns.visualization.json → aggregate/weeklyColumns.visualization.json} +0 -0
  141. /package/build/es/__demo__/data/{avgTotalAggregationType.data.json → aggregate/avgTotalAggregationType.data.json} +0 -0
  142. /package/build/es/__demo__/data/{avgTotalAggregationType.metadata.json → aggregate/avgTotalAggregationType.metadata.json} +0 -0
  143. /package/build/es/__demo__/data/{avgTotalAggregationType.visualization.json → aggregate/avgTotalAggregationType.visualization.json} +0 -0
  144. /package/build/es/__demo__/data/{deep.data.json → aggregate/deep.data.json} +0 -0
  145. /package/build/es/__demo__/data/{deep.visualization.json → aggregate/deep.visualization.json} +0 -0
  146. /package/build/es/__demo__/data/{deepWithFilters.data.json → aggregate/deepWithFilters.data.json} +0 -0
  147. /package/build/es/__demo__/data/{deepWithFilters.visualization.json → aggregate/deepWithFilters.visualization.json} +0 -0
  148. /package/build/es/__demo__/data/{degs.data.json → aggregate/degs.data.json} +0 -0
  149. /package/build/es/__demo__/data/{degs.metadata.json → aggregate/degs.metadata.json} +0 -0
  150. /package/build/es/__demo__/data/{degs.visualization.json → aggregate/degs.visualization.json} +0 -0
  151. /package/build/es/__demo__/data/{diseaseWeeks.data.json → aggregate/diseaseWeeks.data.json} +0 -0
  152. /package/build/es/__demo__/data/{diseaseWeeks.metadata.json → aggregate/diseaseWeeks.metadata.json} +0 -0
  153. /package/build/es/__demo__/data/{diseaseWeeks.visualization.json → aggregate/diseaseWeeks.visualization.json} +0 -0
  154. /package/build/es/__demo__/data/{emptyColumns.data.json → aggregate/emptyColumns.data.json} +0 -0
  155. /package/build/es/__demo__/data/{emptyColumns.metadata.json → aggregate/emptyColumns.metadata.json} +0 -0
  156. /package/build/es/__demo__/data/{emptyColumns.visualization.json → aggregate/emptyColumns.visualization.json} +0 -0
  157. /package/build/es/__demo__/data/{emptyRows.data.json → aggregate/emptyRows.data.json} +0 -0
  158. /package/build/es/__demo__/data/{emptyRows.visualization.json → aggregate/emptyRows.visualization.json} +0 -0
  159. /package/build/es/__demo__/data/{hierarchy.data.json → aggregate/hierarchy.data.json} +0 -0
  160. /package/build/es/__demo__/data/{hierarchy.metadata.json → aggregate/hierarchy.metadata.json} +0 -0
  161. /package/build/es/__demo__/data/{hierarchy.visualization.json → aggregate/hierarchy.visualization.json} +0 -0
  162. /package/build/es/__demo__/data/{lastFiveYears.data.json → aggregate/lastFiveYears.data.json} +0 -0
  163. /package/build/es/__demo__/data/{lastFiveYears.metadata.json → aggregate/lastFiveYears.metadata.json} +0 -0
  164. /package/build/es/__demo__/data/{lastFiveYears.visualization.json → aggregate/lastFiveYears.visualization.json} +0 -0
  165. /package/build/es/__demo__/data/{narrative.data.json → aggregate/narrative.data.json} +0 -0
  166. /package/build/es/__demo__/data/{narrative.metadata.json → aggregate/narrative.metadata.json} +0 -0
  167. /package/build/es/__demo__/data/{narrative.visualization.json → aggregate/narrative.visualization.json} +0 -0
  168. /package/build/es/__demo__/data/{simple.data.json → aggregate/simple.data.json} +0 -0
  169. /package/build/es/__demo__/data/{simple.metadata.json → aggregate/simple.metadata.json} +0 -0
  170. /package/build/es/__demo__/data/{simple.visualization.json → aggregate/simple.visualization.json} +0 -0
  171. /package/build/es/__demo__/data/{target-with-legend.data.json → aggregate/target-with-legend.data.json} +0 -0
  172. /package/build/es/__demo__/data/{target-with-legend.metadata.json → aggregate/target-with-legend.metadata.json} +0 -0
  173. /package/build/es/__demo__/data/{target-with-legend.visualization.json → aggregate/target-with-legend.visualization.json} +0 -0
  174. /package/build/es/__demo__/data/{under-above-100.legendSet.json → aggregate/under-above-100.legendSet.json} +0 -0
  175. /package/build/es/__demo__/data/{weeklyColumns.data.json → aggregate/weeklyColumns.data.json} +0 -0
  176. /package/build/es/__demo__/data/{weeklyColumns.metadata.json → aggregate/weeklyColumns.metadata.json} +0 -0
  177. /package/build/es/__demo__/data/{weeklyColumns.visualization.json → aggregate/weeklyColumns.visualization.json} +0 -0
@@ -0,0 +1,86 @@
1
+ import i18n from '@dhis2/d2-i18n';
2
+ import { DIMENSION_ID_ORGUNIT, DIMENSION_ID_PERIOD } from '../../predefinedDimensions.js';
3
+ import { VALUE_TYPE_AGE, VALUE_TYPE_BOOLEAN, VALUE_TYPE_COORDINATE, VALUE_TYPE_DATE, VALUE_TYPE_DATETIME, VALUE_TYPE_FILE_RESOURCE, VALUE_TYPE_GEOJSON, VALUE_TYPE_IMAGE, VALUE_TYPE_MULTI_TEXT, VALUE_TYPE_PERCENTAGE, VALUE_TYPE_REFERENCE, VALUE_TYPE_TRUE_ONLY } from '../../valueTypes.js';
4
+ import { applyDefaultHandler } from './default.js';
5
+ import { applyOptionSetHandler } from './optionSet.js';
6
+ export const PREFIX_SEPARATOR = '_';
7
+ export const NA_VALUE = '';
8
+ export const NA_VALUE_ITEM = {
9
+ name: i18n.t('No value'),
10
+ style: {
11
+ fontStyle: 'italic',
12
+ color: '#6C7787',
13
+ fontFamily: 'monospace',
14
+ letterSpacing: '-0.3px'
15
+ }
16
+ };
17
+ export const UNSUPPORTED_VALUE_TYPES = [VALUE_TYPE_COORDINATE, VALUE_TYPE_GEOJSON, VALUE_TYPE_FILE_RESOURCE, VALUE_TYPE_IMAGE, VALUE_TYPE_MULTI_TEXT, VALUE_TYPE_REFERENCE];
18
+ export const getItemFormatterByValueType = valueType => {
19
+ switch (valueType) {
20
+ case VALUE_TYPE_AGE:
21
+ case VALUE_TYPE_DATE:
22
+ return name => name.replace(/ 00:00:00\.0$/, '');
23
+ case VALUE_TYPE_BOOLEAN:
24
+ case VALUE_TYPE_TRUE_ONLY:
25
+ return name => name === '1' ? i18n.t('Yes') : i18n.t('No');
26
+ case VALUE_TYPE_DATETIME:
27
+ return name => name.replace(/:00\.0$/, '');
28
+ case VALUE_TYPE_PERCENTAGE:
29
+ return name => name.endsWith('.0') ? name.slice(0, -2) : name;
30
+ default:
31
+ return undefined;
32
+ }
33
+ };
34
+ export const transformResponse = (response, {
35
+ hideNaData = false
36
+ } = {}) => {
37
+ // Do not modify the original response
38
+ // Rows is mapped by the handlers
39
+ let transformedResponse = {
40
+ ...response,
41
+ metaData: {
42
+ ...response.metaData,
43
+ items: {
44
+ ...response.metaData.items
45
+ },
46
+ dimensions: {
47
+ ...response.metaData.dimensions
48
+ }
49
+ }
50
+ };
51
+
52
+ // Add index to all headers
53
+ // Include only headers that are "meta" and skip "pe" and "ou"
54
+ const metaHeaders = response.headers.map((header, index) => ({
55
+ ...header,
56
+ index
57
+ })).filter(header => Boolean(header.meta) && ![DIMENSION_ID_PERIOD, DIMENSION_ID_ORGUNIT].includes(header.name));
58
+
59
+ // Legendsets use uids and do not need transformation
60
+ // Skip unsupported value types
61
+ // Option set and Boolean have separate handlers
62
+ // All other types use default handler with specific item formatter
63
+ metaHeaders.forEach(header => {
64
+ if (!(header.legendSet || UNSUPPORTED_VALUE_TYPES.includes(header.valueType))) {
65
+ if (header.optionSet) {
66
+ transformedResponse = applyOptionSetHandler(transformedResponse, header.index);
67
+ } else {
68
+ transformedResponse = applyDefaultHandler(transformedResponse, header.index, {
69
+ itemFormatter: getItemFormatterByValueType(header.valueType)
70
+ });
71
+ }
72
+ }
73
+ });
74
+
75
+ // Add "No value" dimension item if "Hide NA data" option is disabled
76
+ // Only add if there is at least one empty value
77
+ if (!hideNaData) {
78
+ metaHeaders.forEach(header => {
79
+ if (response.rows.map(row => row[header.index]).includes(NA_VALUE)) {
80
+ transformedResponse.metaData.dimensions[header.name] = [...transformedResponse.metaData.dimensions[header.name], NA_VALUE];
81
+ transformedResponse.metaData.items[NA_VALUE] = NA_VALUE_ITEM;
82
+ }
83
+ });
84
+ }
85
+ return transformedResponse;
86
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dhis2/analytics",
3
- "version": "28.0.5",
3
+ "version": "28.1.0",
4
4
  "main": "./build/cjs/index.js",
5
5
  "module": "./build/es/index.js",
6
6
  "exports": {