@dhis2/analytics 28.0.5 → 28.1.1

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 (179) 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/cjs/visualizations/config/adapters/dhis_highcharts/series/index.js +1 -1
  53. package/build/es/__demo__/{PivotTable.stories.js → PivotTable.aggregate.stories.js} +38 -38
  54. package/build/es/__demo__/PivotTable.event.stories.js +414 -0
  55. package/build/es/__demo__/data/event/boolean.data.hidena.json +115 -0
  56. package/build/es/__demo__/data/event/boolean.data.json +125 -0
  57. package/build/es/__demo__/data/event/boolean.data.org.json +106 -0
  58. package/build/es/__demo__/data/event/boolean.visualization.json +160 -0
  59. package/build/es/__demo__/data/event/date.data.hidena.json +205 -0
  60. package/build/es/__demo__/data/event/date.data.json +215 -0
  61. package/build/es/__demo__/data/event/date.data.org.json +123 -0
  62. package/build/es/__demo__/data/event/date.visualization.json +160 -0
  63. package/build/es/__demo__/data/event/datetime.data.hidena.json +215 -0
  64. package/build/es/__demo__/data/event/datetime.data.json +225 -0
  65. package/build/es/__demo__/data/event/datetime.data.org.json +124 -0
  66. package/build/es/__demo__/data/event/datetime.visualization.json +148 -0
  67. package/build/es/__demo__/data/event/email.data.hidena.json +192 -0
  68. package/build/es/__demo__/data/event/email.data.json +202 -0
  69. package/build/es/__demo__/data/event/email.data.org.json +123 -0
  70. package/build/es/__demo__/data/event/email.visualization.json +148 -0
  71. package/build/es/__demo__/data/event/integer.data.hidena.json +165 -0
  72. package/build/es/__demo__/data/event/integer.data.json +175 -0
  73. package/build/es/__demo__/data/event/integer.data.org.json +120 -0
  74. package/build/es/__demo__/data/event/integer.visualization.json +163 -0
  75. package/build/es/__demo__/data/event/legendset.data.hidena.json +154 -0
  76. package/build/es/__demo__/data/event/legendset.data.json +164 -0
  77. package/build/es/__demo__/data/event/legendset.visualization.json +166 -0
  78. package/build/es/__demo__/data/event/optionset.data.hidena.json +125 -0
  79. package/build/es/__demo__/data/event/optionset.data.json +134 -0
  80. package/build/es/__demo__/data/event/optionset.data.org.json +125 -0
  81. package/build/es/__demo__/data/event/optionset.visualization.json +158 -0
  82. package/build/es/__demo__/data/event/time.data.hidena.json +165 -0
  83. package/build/es/__demo__/data/event/time.data.json +175 -0
  84. package/build/es/__demo__/data/event/time.data.org.json +128 -0
  85. package/build/es/__demo__/data/event/time.visualization.json +148 -0
  86. package/build/es/__demo__/data/event/yesonly.data.hidena.json +127 -0
  87. package/build/es/__demo__/data/event/yesonly.data.json +136 -0
  88. package/build/es/__demo__/data/event/yesonly.data.org.json +124 -0
  89. package/build/es/__demo__/data/event/yesonly.visualization.json +161 -0
  90. package/build/es/components/DataDimension/ItemSelector/ItemSelector.js +19 -22
  91. package/build/es/components/PivotTable/PivotTableColumnHeaderCell.js +3 -0
  92. package/build/es/components/PivotTable/PivotTableRowHeaderCell.js +2 -1
  93. package/build/es/index.js +4 -0
  94. package/build/es/locales/en/translations.json +1 -0
  95. package/build/es/modules/pivotTable/AdaptiveClippingController.js +2 -1
  96. package/build/es/modules/pivotTable/getHeaderForDisplay.js +4 -1
  97. package/build/es/modules/pivotTable/measureText.js +7 -6
  98. package/build/es/modules/response/event/__tests__/default.spec.js +75 -0
  99. package/build/es/modules/response/event/__tests__/optionSet.spec.js +32 -0
  100. package/build/es/modules/response/event/__tests__/response.spec.js +122 -0
  101. package/build/es/modules/response/event/default.js +52 -0
  102. package/build/es/modules/response/event/optionSet.js +27 -0
  103. package/build/es/modules/response/event/response.js +86 -0
  104. package/build/es/visualizations/config/adapters/dhis_highcharts/series/index.js +1 -1
  105. package/package.json +1 -1
  106. /package/build/cjs/__demo__/data/{avgTotalAggregationType.data.json → aggregate/avgTotalAggregationType.data.json} +0 -0
  107. /package/build/cjs/__demo__/data/{avgTotalAggregationType.metadata.json → aggregate/avgTotalAggregationType.metadata.json} +0 -0
  108. /package/build/cjs/__demo__/data/{avgTotalAggregationType.visualization.json → aggregate/avgTotalAggregationType.visualization.json} +0 -0
  109. /package/build/cjs/__demo__/data/{deep.data.json → aggregate/deep.data.json} +0 -0
  110. /package/build/cjs/__demo__/data/{deep.visualization.json → aggregate/deep.visualization.json} +0 -0
  111. /package/build/cjs/__demo__/data/{deepWithFilters.data.json → aggregate/deepWithFilters.data.json} +0 -0
  112. /package/build/cjs/__demo__/data/{deepWithFilters.visualization.json → aggregate/deepWithFilters.visualization.json} +0 -0
  113. /package/build/cjs/__demo__/data/{degs.data.json → aggregate/degs.data.json} +0 -0
  114. /package/build/cjs/__demo__/data/{degs.metadata.json → aggregate/degs.metadata.json} +0 -0
  115. /package/build/cjs/__demo__/data/{degs.visualization.json → aggregate/degs.visualization.json} +0 -0
  116. /package/build/cjs/__demo__/data/{diseaseWeeks.data.json → aggregate/diseaseWeeks.data.json} +0 -0
  117. /package/build/cjs/__demo__/data/{diseaseWeeks.metadata.json → aggregate/diseaseWeeks.metadata.json} +0 -0
  118. /package/build/cjs/__demo__/data/{diseaseWeeks.visualization.json → aggregate/diseaseWeeks.visualization.json} +0 -0
  119. /package/build/cjs/__demo__/data/{emptyColumns.data.json → aggregate/emptyColumns.data.json} +0 -0
  120. /package/build/cjs/__demo__/data/{emptyColumns.metadata.json → aggregate/emptyColumns.metadata.json} +0 -0
  121. /package/build/cjs/__demo__/data/{emptyColumns.visualization.json → aggregate/emptyColumns.visualization.json} +0 -0
  122. /package/build/cjs/__demo__/data/{emptyRows.data.json → aggregate/emptyRows.data.json} +0 -0
  123. /package/build/cjs/__demo__/data/{emptyRows.visualization.json → aggregate/emptyRows.visualization.json} +0 -0
  124. /package/build/cjs/__demo__/data/{hierarchy.data.json → aggregate/hierarchy.data.json} +0 -0
  125. /package/build/cjs/__demo__/data/{hierarchy.metadata.json → aggregate/hierarchy.metadata.json} +0 -0
  126. /package/build/cjs/__demo__/data/{hierarchy.visualization.json → aggregate/hierarchy.visualization.json} +0 -0
  127. /package/build/cjs/__demo__/data/{lastFiveYears.data.json → aggregate/lastFiveYears.data.json} +0 -0
  128. /package/build/cjs/__demo__/data/{lastFiveYears.metadata.json → aggregate/lastFiveYears.metadata.json} +0 -0
  129. /package/build/cjs/__demo__/data/{lastFiveYears.visualization.json → aggregate/lastFiveYears.visualization.json} +0 -0
  130. /package/build/cjs/__demo__/data/{narrative.data.json → aggregate/narrative.data.json} +0 -0
  131. /package/build/cjs/__demo__/data/{narrative.metadata.json → aggregate/narrative.metadata.json} +0 -0
  132. /package/build/cjs/__demo__/data/{narrative.visualization.json → aggregate/narrative.visualization.json} +0 -0
  133. /package/build/cjs/__demo__/data/{simple.data.json → aggregate/simple.data.json} +0 -0
  134. /package/build/cjs/__demo__/data/{simple.metadata.json → aggregate/simple.metadata.json} +0 -0
  135. /package/build/cjs/__demo__/data/{simple.visualization.json → aggregate/simple.visualization.json} +0 -0
  136. /package/build/cjs/__demo__/data/{target-with-legend.data.json → aggregate/target-with-legend.data.json} +0 -0
  137. /package/build/cjs/__demo__/data/{target-with-legend.metadata.json → aggregate/target-with-legend.metadata.json} +0 -0
  138. /package/build/cjs/__demo__/data/{target-with-legend.visualization.json → aggregate/target-with-legend.visualization.json} +0 -0
  139. /package/build/cjs/__demo__/data/{under-above-100.legendSet.json → aggregate/under-above-100.legendSet.json} +0 -0
  140. /package/build/cjs/__demo__/data/{weeklyColumns.data.json → aggregate/weeklyColumns.data.json} +0 -0
  141. /package/build/cjs/__demo__/data/{weeklyColumns.metadata.json → aggregate/weeklyColumns.metadata.json} +0 -0
  142. /package/build/cjs/__demo__/data/{weeklyColumns.visualization.json → aggregate/weeklyColumns.visualization.json} +0 -0
  143. /package/build/es/__demo__/data/{avgTotalAggregationType.data.json → aggregate/avgTotalAggregationType.data.json} +0 -0
  144. /package/build/es/__demo__/data/{avgTotalAggregationType.metadata.json → aggregate/avgTotalAggregationType.metadata.json} +0 -0
  145. /package/build/es/__demo__/data/{avgTotalAggregationType.visualization.json → aggregate/avgTotalAggregationType.visualization.json} +0 -0
  146. /package/build/es/__demo__/data/{deep.data.json → aggregate/deep.data.json} +0 -0
  147. /package/build/es/__demo__/data/{deep.visualization.json → aggregate/deep.visualization.json} +0 -0
  148. /package/build/es/__demo__/data/{deepWithFilters.data.json → aggregate/deepWithFilters.data.json} +0 -0
  149. /package/build/es/__demo__/data/{deepWithFilters.visualization.json → aggregate/deepWithFilters.visualization.json} +0 -0
  150. /package/build/es/__demo__/data/{degs.data.json → aggregate/degs.data.json} +0 -0
  151. /package/build/es/__demo__/data/{degs.metadata.json → aggregate/degs.metadata.json} +0 -0
  152. /package/build/es/__demo__/data/{degs.visualization.json → aggregate/degs.visualization.json} +0 -0
  153. /package/build/es/__demo__/data/{diseaseWeeks.data.json → aggregate/diseaseWeeks.data.json} +0 -0
  154. /package/build/es/__demo__/data/{diseaseWeeks.metadata.json → aggregate/diseaseWeeks.metadata.json} +0 -0
  155. /package/build/es/__demo__/data/{diseaseWeeks.visualization.json → aggregate/diseaseWeeks.visualization.json} +0 -0
  156. /package/build/es/__demo__/data/{emptyColumns.data.json → aggregate/emptyColumns.data.json} +0 -0
  157. /package/build/es/__demo__/data/{emptyColumns.metadata.json → aggregate/emptyColumns.metadata.json} +0 -0
  158. /package/build/es/__demo__/data/{emptyColumns.visualization.json → aggregate/emptyColumns.visualization.json} +0 -0
  159. /package/build/es/__demo__/data/{emptyRows.data.json → aggregate/emptyRows.data.json} +0 -0
  160. /package/build/es/__demo__/data/{emptyRows.visualization.json → aggregate/emptyRows.visualization.json} +0 -0
  161. /package/build/es/__demo__/data/{hierarchy.data.json → aggregate/hierarchy.data.json} +0 -0
  162. /package/build/es/__demo__/data/{hierarchy.metadata.json → aggregate/hierarchy.metadata.json} +0 -0
  163. /package/build/es/__demo__/data/{hierarchy.visualization.json → aggregate/hierarchy.visualization.json} +0 -0
  164. /package/build/es/__demo__/data/{lastFiveYears.data.json → aggregate/lastFiveYears.data.json} +0 -0
  165. /package/build/es/__demo__/data/{lastFiveYears.metadata.json → aggregate/lastFiveYears.metadata.json} +0 -0
  166. /package/build/es/__demo__/data/{lastFiveYears.visualization.json → aggregate/lastFiveYears.visualization.json} +0 -0
  167. /package/build/es/__demo__/data/{narrative.data.json → aggregate/narrative.data.json} +0 -0
  168. /package/build/es/__demo__/data/{narrative.metadata.json → aggregate/narrative.metadata.json} +0 -0
  169. /package/build/es/__demo__/data/{narrative.visualization.json → aggregate/narrative.visualization.json} +0 -0
  170. /package/build/es/__demo__/data/{simple.data.json → aggregate/simple.data.json} +0 -0
  171. /package/build/es/__demo__/data/{simple.metadata.json → aggregate/simple.metadata.json} +0 -0
  172. /package/build/es/__demo__/data/{simple.visualization.json → aggregate/simple.visualization.json} +0 -0
  173. /package/build/es/__demo__/data/{target-with-legend.data.json → aggregate/target-with-legend.data.json} +0 -0
  174. /package/build/es/__demo__/data/{target-with-legend.metadata.json → aggregate/target-with-legend.metadata.json} +0 -0
  175. /package/build/es/__demo__/data/{target-with-legend.visualization.json → aggregate/target-with-legend.visualization.json} +0 -0
  176. /package/build/es/__demo__/data/{under-above-100.legendSet.json → aggregate/under-above-100.legendSet.json} +0 -0
  177. /package/build/es/__demo__/data/{weeklyColumns.data.json → aggregate/weeklyColumns.data.json} +0 -0
  178. /package/build/es/__demo__/data/{weeklyColumns.metadata.json → aggregate/weeklyColumns.metadata.json} +0 -0
  179. /package/build/es/__demo__/data/{weeklyColumns.visualization.json → aggregate/weeklyColumns.visualization.json} +0 -0
@@ -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 Roboto, Arial, sans-serif`;
14
+ ctx.font = `${fontSize}px ${fontFamily}`;
15
15
  return ctx;
16
16
  };
17
- const measureText = (text, fontSize = 11) => {
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;
@@ -194,7 +194,7 @@ function _default({
194
194
  }
195
195
  (_series = series) === null || _series === void 0 ? void 0 : _series.forEach(seriesObj => {
196
196
  // animation
197
- seriesObj.animation = {
197
+ seriesObj.animation = extraOptions.dashboard ? false : {
198
198
  duration: getAnimation(extraOptions.animation, DEFAULT_ANIMATION_DURATION)
199
199
  };
200
200
  });
@@ -4,43 +4,43 @@ import PropTypes from 'prop-types';
4
4
  import React, { useState, useEffect } from 'react';
5
5
  import { PivotTable } from '../index.js';
6
6
  import { NUMBER_TYPE_COLUMN_PERCENTAGE, NUMBER_TYPE_ROW_PERCENTAGE } from '../modules/pivotTable/pivotTableConstants.js';
7
- import avgDataResponse from './data/avgTotalAggregationType.data.json';
8
- import avgMetadataResponse from './data/avgTotalAggregationType.metadata.json';
9
- import avgVisualization from './data/avgTotalAggregationType.visualization.json';
10
- import deepData from './data/deep.data.json';
11
- import deepVisualization from './data/deep.visualization.json';
12
- import deepWithFiltersData from './data/deepWithFilters.data.json';
13
- import deepWithFiltersVisualization from './data/deepWithFilters.visualization.json';
14
- import degsDataResponse from './data/degs.data.json';
15
- import degsMetadataResponse from './data/degs.metadata.json';
16
- import degsVisualization from './data/degs.visualization.json';
17
- import diseaseWeeksDataResponse from './data/diseaseWeeks.data.json';
18
- import diseaseWeeksMetadataResponse from './data/diseaseWeeks.metadata.json';
19
- import diseaseWeeksVisualization from './data/diseaseWeeks.visualization.json';
20
- import emptyColumnsDataResponse from './data/emptyColumns.data.json';
21
- import emptyColumnsMetadataResponse from './data/emptyColumns.metadata.json';
22
- import emptyColumnsVisualization from './data/emptyColumns.visualization.json';
23
- import emptyRowsData from './data/emptyRows.data.json';
24
- import emptyRowsVisualization from './data/emptyRows.visualization.json';
25
- import hierarchyDataResponse from './data/hierarchy.data.json';
26
- import hierarchyMetadataResponse from './data/hierarchy.metadata.json';
27
- import hierarchyVisualization from './data/hierarchy.visualization.json';
28
- import lastFiveYearsDataResponse from './data/lastFiveYears.data.json';
29
- import lastFiveYearsMetadataResponse from './data/lastFiveYears.metadata.json';
30
- import lastFiveYearsVisualization from './data/lastFiveYears.visualization.json';
31
- import narrativeDataResponse from './data/narrative.data.json';
32
- import narrativeMetadataResponse from './data/narrative.metadata.json';
33
- import narrativeVisualization from './data/narrative.visualization.json';
34
- import simpleDataResponse from './data/simple.data.json';
35
- import simpleMetadataResponse from './data/simple.metadata.json';
36
- import simpleVisualization from './data/simple.visualization.json';
37
- import targetDataResponse from './data/target-with-legend.data.json';
38
- import targetMetadataResponse from './data/target-with-legend.metadata.json';
39
- import targetVisualization from './data/target-with-legend.visualization.json';
40
- import underAbove100LegendSet from './data/under-above-100.legendSet.json';
41
- import weeklyColumnsDataResponse from './data/weeklyColumns.data.json';
42
- import weeklyColumnsMetadataResponse from './data/weeklyColumns.metadata.json';
43
- import weeklyColumnsVisualization from './data/weeklyColumns.visualization.json';
7
+ import avgDataResponse from './data/aggregate/avgTotalAggregationType.data.json';
8
+ import avgMetadataResponse from './data/aggregate/avgTotalAggregationType.metadata.json';
9
+ import avgVisualization from './data/aggregate/avgTotalAggregationType.visualization.json';
10
+ import deepData from './data/aggregate/deep.data.json';
11
+ import deepVisualization from './data/aggregate/deep.visualization.json';
12
+ import deepWithFiltersData from './data/aggregate/deepWithFilters.data.json';
13
+ import deepWithFiltersVisualization from './data/aggregate/deepWithFilters.visualization.json';
14
+ import degsDataResponse from './data/aggregate/degs.data.json';
15
+ import degsMetadataResponse from './data/aggregate/degs.metadata.json';
16
+ import degsVisualization from './data/aggregate/degs.visualization.json';
17
+ import diseaseWeeksDataResponse from './data/aggregate/diseaseWeeks.data.json';
18
+ import diseaseWeeksMetadataResponse from './data/aggregate/diseaseWeeks.metadata.json';
19
+ import diseaseWeeksVisualization from './data/aggregate/diseaseWeeks.visualization.json';
20
+ import emptyColumnsDataResponse from './data/aggregate/emptyColumns.data.json';
21
+ import emptyColumnsMetadataResponse from './data/aggregate/emptyColumns.metadata.json';
22
+ import emptyColumnsVisualization from './data/aggregate/emptyColumns.visualization.json';
23
+ import emptyRowsData from './data/aggregate/emptyRows.data.json';
24
+ import emptyRowsVisualization from './data/aggregate/emptyRows.visualization.json';
25
+ import hierarchyDataResponse from './data/aggregate/hierarchy.data.json';
26
+ import hierarchyMetadataResponse from './data/aggregate/hierarchy.metadata.json';
27
+ import hierarchyVisualization from './data/aggregate/hierarchy.visualization.json';
28
+ import lastFiveYearsDataResponse from './data/aggregate/lastFiveYears.data.json';
29
+ import lastFiveYearsMetadataResponse from './data/aggregate/lastFiveYears.metadata.json';
30
+ import lastFiveYearsVisualization from './data/aggregate/lastFiveYears.visualization.json';
31
+ import narrativeDataResponse from './data/aggregate/narrative.data.json';
32
+ import narrativeMetadataResponse from './data/aggregate/narrative.metadata.json';
33
+ import narrativeVisualization from './data/aggregate/narrative.visualization.json';
34
+ import simpleDataResponse from './data/aggregate/simple.data.json';
35
+ import simpleMetadataResponse from './data/aggregate/simple.metadata.json';
36
+ import simpleVisualization from './data/aggregate/simple.visualization.json';
37
+ import targetDataResponse from './data/aggregate/target-with-legend.data.json';
38
+ import targetMetadataResponse from './data/aggregate/target-with-legend.metadata.json';
39
+ import targetVisualization from './data/aggregate/target-with-legend.visualization.json';
40
+ import underAbove100LegendSet from './data/aggregate/under-above-100.legendSet.json';
41
+ import weeklyColumnsDataResponse from './data/aggregate/weeklyColumns.data.json';
42
+ import weeklyColumnsMetadataResponse from './data/aggregate/weeklyColumns.metadata.json';
43
+ import weeklyColumnsVisualization from './data/aggregate/weeklyColumns.visualization.json';
44
44
  const visualizationReset = {
45
45
  colTotals: false,
46
46
  rowTotals: false,
@@ -93,7 +93,7 @@ const PivotTableOptionsWrapper = story => {
93
93
  }));
94
94
  };
95
95
  export default {
96
- title: 'PivotTable',
96
+ title: 'PivotTable (aggregate)',
97
97
  decorators: [PivotTableOptionsWrapper]
98
98
  };
99
99
  export const Simple = (_, {