@dhis2/analytics 23.8.2 → 23.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## [23.8.5](https://github.com/dhis2/analytics/compare/v23.8.4...v23.8.5) (2022-05-09)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * fix cursor in AboutUnit component's header TECH-1172 ([#1218](https://github.com/dhis2/analytics/issues/1218)) ([e8bd409](https://github.com/dhis2/analytics/commit/e8bd40970b3ae64a9518ab6f6b6d6e932f02eb24))
7
+
8
+ ## [23.8.4](https://github.com/dhis2/analytics/compare/v23.8.3...v23.8.4) (2022-05-09)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **FileMenu:** use larger lateral padding for File button TECH-1145 ([#1220](https://github.com/dhis2/analytics/issues/1220)) ([e853d62](https://github.com/dhis2/analytics/commit/e853d627244766153d8955a1e9711379afde6015))
14
+
15
+ ## [23.8.3](https://github.com/dhis2/analytics/compare/v23.8.2...v23.8.3) (2022-05-09)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * add digit group separator to all numeric types in table cells ([#1219](https://github.com/dhis2/analytics/issues/1219)) ([6b8ec2a](https://github.com/dhis2/analytics/commit/6b8ec2a1ae72fdca18c7df5615e206de1fdf9666))
21
+
1
22
  ## [23.8.2](https://github.com/dhis2/analytics/compare/v23.8.1...v23.8.2) (2022-05-05)
2
23
 
3
24
 
@@ -150,7 +150,9 @@ const AboutAOUnit = ({
150
150
  }, /*#__PURE__*/_react.default.createElement("div", {
151
151
  onClick: () => setIsExpanded(!isExpanded),
152
152
  className: "jsx-".concat(_AboutAOUnitStyle.default.__hash) + " " + "header"
153
- }, _d2I18n.default.t('About this visualization'), isExpanded ? /*#__PURE__*/_react.default.createElement(_ui.IconChevronUp24, {
153
+ }, /*#__PURE__*/_react.default.createElement("span", {
154
+ className: "jsx-".concat(_AboutAOUnitStyle.default.__hash) + " " + "title"
155
+ }, _d2I18n.default.t('About this visualization')), isExpanded ? /*#__PURE__*/_react.default.createElement(_ui.IconChevronUp24, {
154
156
  color: _ui.colors.grey700
155
157
  }) : /*#__PURE__*/_react.default.createElement(_ui.IconChevronDown24, {
156
158
  color: _ui.colors.grey700
@@ -7,7 +7,7 @@ exports.default = void 0;
7
7
 
8
8
  var _ui = require("@dhis2/ui");
9
9
 
10
- const _defaultExport = [".container.jsx-633421833{padding:".concat(_ui.spacers.dp16, ";border-bottom:1px solid ").concat(_ui.colors.grey400, ";background-color:").concat(_ui.colors.white, ";}"), ".expanded.jsx-633421833{padding-bottom:".concat(_ui.spacers.dp32, ";}"), ".loader.jsx-633421833{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}", ".header.jsx-633421833{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;font-size:".concat(_ui.spacers.dp16, ";font-weight:500;line-height:21px;color:").concat(_ui.colors.grey900, ";}"), ".content.jsx-633421833{font-size:14px;line-height:18px;color:".concat(_ui.colors.grey900, ";}"), ".detailLine.jsx-633421833{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0;padding:".concat(_ui.spacers.dp12, " 0 0 0;gap:").concat(_ui.spacers.dp8, ";}"), ".detailLine.jsx-633421833 svg.jsx-633421833{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}", ".noDescription.jsx-633421833{color:".concat(_ui.colors.grey600, ";}"), ".subsection.jsx-633421833{margin-top:".concat(_ui.spacers.dp24, ";}"), ".subsectionTitle.jsx-633421833{color:".concat(_ui.colors.grey700, ";font-weight:500;}"), ".subscriptionLabel.jsx-633421833{margin:".concat(_ui.spacers.dp12, " 0 ").concat(_ui.spacers.dp8, " 0;}"), ".subsection.jsx-633421833 button.jsx-633421833{margin-top:".concat(_ui.spacers.dp8, ";}")];
11
- _defaultExport.__hash = "633421833";
10
+ const _defaultExport = [".container.jsx-1596217846{position:relative;padding:".concat(_ui.spacers.dp16, ";border-bottom:1px solid ").concat(_ui.colors.grey400, ";background-color:").concat(_ui.colors.white, ";}"), ".expanded.jsx-1596217846{padding-bottom:".concat(_ui.spacers.dp32, ";}"), ".loader.jsx-1596217846{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}", ".header.jsx-1596217846{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;}", ".title.jsx-1596217846{font-size:16px;font-weight:500;line-height:21px;color:".concat(_ui.colors.grey900, ";}"), ".content.jsx-1596217846{font-size:14px;line-height:18px;color:".concat(_ui.colors.grey900, ";}"), ".detailLine.jsx-1596217846{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0;padding:".concat(_ui.spacers.dp12, " 0 0 0;gap:").concat(_ui.spacers.dp8, ";}"), ".detailLine.jsx-1596217846 svg.jsx-1596217846{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}", ".noDescription.jsx-1596217846{color:".concat(_ui.colors.grey600, ";}"), ".subsection.jsx-1596217846{margin-top:".concat(_ui.spacers.dp24, ";}"), ".subsectionTitle.jsx-1596217846{color:".concat(_ui.colors.grey700, ";font-weight:500;}"), ".subscriptionLabel.jsx-1596217846{margin:".concat(_ui.spacers.dp12, " 0 ").concat(_ui.spacers.dp8, " 0;}"), ".subsection.jsx-1596217846 button.jsx-1596217846{margin-top:".concat(_ui.spacers.dp8, ";}")];
11
+ _defaultExport.__hash = "1596217846";
12
12
  var _default = _defaultExport;
13
13
  exports.default = _default;
@@ -7,6 +7,6 @@ exports.fileMenuStyles = void 0;
7
7
 
8
8
  var _ui = require("@dhis2/ui");
9
9
 
10
- const fileMenuStyles = [".menu-toggle.jsx-1542458312{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:14px;font-weight:400;text-transform:none;padding:6px 8px;border-radius:3px;color:".concat(_ui.colors.grey900, ";box-sizing:border-box;line-height:1.75;background:none;border:none;-webkit-transition:background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms;transition:background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms;cursor:pointer;}"), ".menu-toggle.jsx-1542458312:hover.jsx-1542458312:enabled{background-color:".concat(_ui.colors.grey200, ";}"), ".menu-toggle.jsx-1542458312:disabled{color:".concat(_ui.colors.grey400, ";cursor:not-allowed;}"), ".menu-toggle.jsx-1542458312:active{background-color:".concat(_ui.colors.grey300, ";}"), ".menuButton.jsx-1542458312:focus{outline:2px solid ".concat(_ui.colors.blue600, ";}"), ".menuButton.jsx-1542458312:focus.jsx-1542458312:not(:focus-visible){outline:none;}"];
10
+ const fileMenuStyles = [".menu-toggle.jsx-2670121391{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:14px;font-weight:400;text-transform:none;padding:6px ".concat(_ui.spacers.dp12, ";border-radius:3px;color:").concat(_ui.colors.grey900, ";box-sizing:border-box;line-height:1.75;background:none;border:none;-webkit-transition:background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms;transition:background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms;cursor:pointer;}"), ".menu-toggle.jsx-2670121391:hover.jsx-2670121391:enabled{background-color:".concat(_ui.colors.grey200, ";}"), ".menu-toggle.jsx-2670121391:disabled{color:".concat(_ui.colors.grey400, ";cursor:not-allowed;}"), ".menu-toggle.jsx-2670121391:active{background-color:".concat(_ui.colors.grey300, ";}"), ".menuButton.jsx-2670121391:focus{outline:2px solid ".concat(_ui.colors.blue600, ";}"), ".menuButton.jsx-2670121391:focus.jsx-2670121391:not(:focus-visible){outline:none;}"];
11
11
  exports.fileMenuStyles = fileMenuStyles;
12
- fileMenuStyles.__hash = "1542458312";
12
+ fileMenuStyles.__hash = "2670121391";
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+
3
+ var _pivotTableConstants = require("../pivotTable/pivotTableConstants.js");
4
+
5
+ var _renderValue = require("../renderValue.js");
6
+
7
+ var _valueTypes = require("../valueTypes.js");
8
+
9
+ const DGS_COMMA = 'COMMA';
10
+ const DGS_SPACE = 'SPACE';
11
+ const DGS_NONE = 'NONE';
12
+ const tests = [// Numbers
13
+ {
14
+ value: 1000.5,
15
+ expected: '1 000.5',
16
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
17
+ round: true,
18
+ dgs: DGS_SPACE
19
+ }, {
20
+ value: 33777889.55,
21
+ expected: '33,777,889.5',
22
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
23
+ round: true,
24
+ dgs: DGS_COMMA
25
+ }, {
26
+ value: 33777889.556,
27
+ expected: '33 777 889.6',
28
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
29
+ round: true,
30
+ dgs: DGS_SPACE
31
+ }, {
32
+ value: 33777889.556,
33
+ expected: '33 777 889.5560000017',
34
+ // float issue?
35
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
36
+ round: false,
37
+ dgs: DGS_SPACE
38
+ }, {
39
+ value: 33777889.56,
40
+ expected: '33777889.6',
41
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
42
+ round: true,
43
+ dgs: DGS_NONE
44
+ }, {
45
+ value: 0.0005,
46
+ expected: '0',
47
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
48
+ round: true,
49
+ dgs: DGS_SPACE
50
+ }, {
51
+ value: 0.109,
52
+ expected: '0.11',
53
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
54
+ round: true,
55
+ dgs: DGS_SPACE
56
+ }, {
57
+ value: 1.101,
58
+ expected: '1.1',
59
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
60
+ round: true,
61
+ dgs: DGS_SPACE
62
+ }, {
63
+ value: 1.101,
64
+ expected: '1.1010000000',
65
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
66
+ round: false,
67
+ dgs: DGS_SPACE
68
+ }, {
69
+ value: 0.0005,
70
+ expected: '0.0005000000',
71
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
72
+ round: false,
73
+ dgs: DGS_SPACE
74
+ }, // Numbers showing as column/row percentage
75
+ {
76
+ value: 0.234,
77
+ expected: '23.4%',
78
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
79
+ numberType: _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE,
80
+ round: true,
81
+ dgs: DGS_SPACE
82
+ }, {
83
+ value: 0.234,
84
+ expected: '23.4%',
85
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
86
+ numberType: _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE,
87
+ round: false,
88
+ dgs: DGS_SPACE
89
+ }, {
90
+ value: 0.000234,
91
+ expected: '0.02%',
92
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
93
+ numberType: _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE,
94
+ round: true,
95
+ dgs: DGS_SPACE
96
+ }, {
97
+ value: 0.0000432,
98
+ expected: '0%',
99
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
100
+ numberType: _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE,
101
+ round: true,
102
+ dgs: DGS_SPACE
103
+ }, {
104
+ value: 0.000234,
105
+ expected: '0.0234%',
106
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
107
+ numberType: _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE,
108
+ round: false,
109
+ dgs: DGS_SPACE
110
+ }, {
111
+ value: -0.0234,
112
+ expected: '-2.3%',
113
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
114
+ numberType: _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE,
115
+ round: true,
116
+ dgs: DGS_SPACE
117
+ }, {
118
+ value: -0.0234,
119
+ expected: '-2.34%',
120
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
121
+ numberType: _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE,
122
+ round: false,
123
+ dgs: DGS_SPACE
124
+ }, {
125
+ value: 0.450048675309,
126
+ expected: '45.0048675309%',
127
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
128
+ numberType: _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE,
129
+ round: false,
130
+ dgs: DGS_SPACE
131
+ }, {
132
+ value: 77.893,
133
+ expected: '7 789.3%',
134
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
135
+ numberType: _pivotTableConstants.NUMBER_TYPE_COLUMN_PERCENTAGE,
136
+ round: true,
137
+ dgs: DGS_SPACE
138
+ }, {
139
+ value: 77.893,
140
+ expected: '7,789.3%',
141
+ valueType: _valueTypes.VALUE_TYPE_NUMBER,
142
+ numberType: _pivotTableConstants.NUMBER_TYPE_COLUMN_PERCENTAGE,
143
+ round: true,
144
+ dgs: DGS_COMMA
145
+ }, // Integers
146
+ {
147
+ value: 99777888,
148
+ expected: '99 777 888',
149
+ valueType: _valueTypes.VALUE_TYPE_INTEGER,
150
+ round: true,
151
+ dgs: DGS_SPACE
152
+ }, {
153
+ value: -99777888,
154
+ expected: '-99 777 888',
155
+ valueType: _valueTypes.VALUE_TYPE_INTEGER,
156
+ round: true,
157
+ dgs: DGS_SPACE
158
+ }, {
159
+ value: -9977888,
160
+ expected: '-9977888',
161
+ valueType: _valueTypes.VALUE_TYPE_INTEGER,
162
+ round: true,
163
+ dgs: DGS_NONE
164
+ }, {
165
+ value: 345,
166
+ expected: '345',
167
+ valueType: _valueTypes.VALUE_TYPE_INTEGER_POSITIVE,
168
+ round: true,
169
+ dgs: DGS_COMMA
170
+ }, {
171
+ value: 334445577,
172
+ expected: '334,445,577',
173
+ valueType: _valueTypes.VALUE_TYPE_INTEGER_POSITIVE,
174
+ round: false,
175
+ dgs: DGS_COMMA
176
+ }, {
177
+ value: -44555777,
178
+ expected: '-44 555 777',
179
+ valueType: _valueTypes.VALUE_TYPE_INTEGER_NEGATIVE,
180
+ round: true,
181
+ dgs: DGS_SPACE
182
+ }, {
183
+ value: -4445577,
184
+ expected: '-4,445,577',
185
+ valueType: _valueTypes.VALUE_TYPE_INTEGER_NEGATIVE,
186
+ round: false,
187
+ dgs: DGS_COMMA
188
+ }, {
189
+ value: -445577,
190
+ expected: '-445577',
191
+ valueType: _valueTypes.VALUE_TYPE_INTEGER_NEGATIVE,
192
+ round: true,
193
+ dgs: DGS_NONE
194
+ }, {
195
+ value: -4445577,
196
+ expected: '-4,445,577',
197
+ valueType: _valueTypes.VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE,
198
+ round: false,
199
+ dgs: DGS_COMMA
200
+ }, {
201
+ value: 57,
202
+ expected: '5 700%',
203
+ valueType: _valueTypes.VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE,
204
+ numberType: _pivotTableConstants.NUMBER_TYPE_COLUMN_PERCENTAGE,
205
+ round: true,
206
+ dgs: DGS_SPACE
207
+ }, {
208
+ value: 557,
209
+ expected: '55700%',
210
+ valueType: _valueTypes.VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE,
211
+ numberType: _pivotTableConstants.NUMBER_TYPE_COLUMN_PERCENTAGE,
212
+ round: true,
213
+ dgs: DGS_NONE
214
+ }, // Percentage
215
+ {
216
+ value: 5,
217
+ expected: '5',
218
+ valueType: _valueTypes.VALUE_TYPE_PERCENTAGE,
219
+ round: true,
220
+ dgs: DGS_SPACE
221
+ }, {
222
+ value: 53,
223
+ expected: '53',
224
+ valueType: _valueTypes.VALUE_TYPE_PERCENTAGE,
225
+ round: false,
226
+ dgs: DGS_SPACE
227
+ }, {
228
+ value: 53,
229
+ expected: '5 300%',
230
+ valueType: _valueTypes.VALUE_TYPE_PERCENTAGE,
231
+ numberType: _pivotTableConstants.NUMBER_TYPE_COLUMN_PERCENTAGE,
232
+ round: true,
233
+ dgs: DGS_SPACE
234
+ }, // Unit interval
235
+ {
236
+ value: 4,
237
+ expected: '4',
238
+ valueType: _valueTypes.VALUE_TYPE_UNIT_INTERVAL,
239
+ round: true,
240
+ dgs: DGS_COMMA
241
+ }, {
242
+ value: 4600,
243
+ expected: '4 600',
244
+ valueType: _valueTypes.VALUE_TYPE_UNIT_INTERVAL,
245
+ round: false,
246
+ dgs: DGS_SPACE
247
+ }, {
248
+ value: 46,
249
+ expected: '4,600%',
250
+ valueType: _valueTypes.VALUE_TYPE_UNIT_INTERVAL,
251
+ numberType: _pivotTableConstants.NUMBER_TYPE_COLUMN_PERCENTAGE,
252
+ round: true,
253
+ dgs: DGS_COMMA
254
+ }, // Texts
255
+ {
256
+ value: 'This string has multiple whitespace characters',
257
+ expected: 'This string has multiple whitespace characters',
258
+ valueType: _valueTypes.VALUE_TYPE_TEXT
259
+ }, {
260
+ value: 'Characters \n',
261
+ expected: 'Characters \n',
262
+ valueType: _valueTypes.VALUE_TYPE_TEXT
263
+ }, {
264
+ value: 'Characters \nmorecharacters here',
265
+ expected: 'Characters \nmorecharacters here',
266
+ valueType: _valueTypes.VALUE_TYPE_TEXT
267
+ }, // Undefined values
268
+ {
269
+ value: undefined,
270
+ expected: 'undefined',
271
+ valueType: _valueTypes.VALUE_TYPE_NUMBER
272
+ }, {
273
+ value: undefined,
274
+ expected: 'undefined',
275
+ valueType: _valueTypes.VALUE_TYPE_TEXT
276
+ }];
277
+ describe('renderValue', () => {
278
+ tests.forEach(t => {
279
+ const testname = "valueType: ".concat(t.valueType, ", value: ").concat(t.value, ", dgs: ").concat(t.dgs, ", round: ").concat(t.round, ", isPercent: ").concat([_pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE, _pivotTableConstants.NUMBER_TYPE_COLUMN_PERCENTAGE].includes(t.numberType));
280
+ it(testname, () => {
281
+ const actual = (0, _renderValue.renderValue)(t.value, t.valueType, {
282
+ skipRounding: !t.round,
283
+ digitGroupSeparator: t.dgs,
284
+ numberType: t.numberType
285
+ });
286
+ expect(actual).toEqual(t.expected);
287
+ });
288
+ });
289
+ });
@@ -11,7 +11,7 @@ var _valueTypes = require("./valueTypes.js");
11
11
 
12
12
  const trimTrailingZeros = stringValue => stringValue.replace(/\.?0+$/, '');
13
13
 
14
- const defaultDecimalSeparator = '.';
14
+ const decimalSeparator = '.';
15
15
 
16
16
  const separateDigitGroups = (stringValue, decimalSeparator) => {
17
17
  const isNegative = stringValue[0] === '-';
@@ -65,17 +65,17 @@ const toFixedPrecisionString = (value, skipRounding) => {
65
65
  };
66
66
 
67
67
  const renderValue = (value, valueType, visualization) => {
68
- if (valueType !== _valueTypes.VALUE_TYPE_NUMBER || value === undefined) {
68
+ if (!(0, _valueTypes.isNumericValueType)(valueType) || value === undefined) {
69
69
  return String(value).replace(/[^\S\n]+/, ' ');
70
70
  }
71
71
 
72
72
  if (visualization.numberType === _pivotTableConstants.NUMBER_TYPE_ROW_PERCENTAGE || visualization.numberType === _pivotTableConstants.NUMBER_TYPE_COLUMN_PERCENTAGE) {
73
- return trimTrailingZeros(toFixedPrecisionString(value * 100, visualization.skipRounding)) + '%';
73
+ const stringValue = trimTrailingZeros(toFixedPrecisionString(value * 100, visualization.skipRounding));
74
+ return separateDigitGroups(stringValue, decimalSeparator).join(getSeparator(visualization)) + '%';
75
+ } else {
76
+ const stringValue = toFixedPrecisionString(value, visualization.skipRounding);
77
+ return separateDigitGroups(stringValue, decimalSeparator).join(getSeparator(visualization));
74
78
  }
75
-
76
- const stringValue = toFixedPrecisionString(value, visualization.skipRounding);
77
- const digitGroups = separateDigitGroups(stringValue, defaultDecimalSeparator);
78
- return digitGroups.join(getSeparator(visualization));
79
79
  };
80
80
 
81
81
  exports.renderValue = renderValue;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.VALUE_TYPE_ORGANISATION_UNIT = exports.VALUE_TYPE_DATETIME = exports.VALUE_TYPE_TIME = exports.VALUE_TYPE_DATE = exports.VALUE_TYPE_TRUE_ONLY = exports.VALUE_TYPE_BOOLEAN = exports.VALUE_TYPE_URL = exports.VALUE_TYPE_USERNAME = exports.VALUE_TYPE_EMAIL = exports.VALUE_TYPE_PHONE_NUMBER = exports.VALUE_TYPE_LETTER = exports.VALUE_TYPE_LONG_TEXT = exports.VALUE_TYPE_TEXT = exports.VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE = exports.VALUE_TYPE_INTEGER_NEGATIVE = exports.VALUE_TYPE_INTEGER_POSITIVE = exports.VALUE_TYPE_INTEGER = exports.VALUE_TYPE_PERCENTAGE = exports.VALUE_TYPE_UNIT_INTERVAL = exports.VALUE_TYPE_NUMBER = void 0;
6
+ exports.isNumericValueType = exports.VALUE_TYPE_ORGANISATION_UNIT = exports.VALUE_TYPE_DATETIME = exports.VALUE_TYPE_TIME = exports.VALUE_TYPE_DATE = exports.VALUE_TYPE_TRUE_ONLY = exports.VALUE_TYPE_BOOLEAN = exports.VALUE_TYPE_URL = exports.VALUE_TYPE_USERNAME = exports.VALUE_TYPE_EMAIL = exports.VALUE_TYPE_PHONE_NUMBER = exports.VALUE_TYPE_LETTER = exports.VALUE_TYPE_LONG_TEXT = exports.VALUE_TYPE_TEXT = exports.VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE = exports.VALUE_TYPE_INTEGER_NEGATIVE = exports.VALUE_TYPE_INTEGER_POSITIVE = exports.VALUE_TYPE_INTEGER = exports.VALUE_TYPE_PERCENTAGE = exports.VALUE_TYPE_UNIT_INTERVAL = exports.VALUE_TYPE_NUMBER = void 0;
7
7
 
8
8
  /* These types match the types in the backend
9
9
  https://github.com/dhis2/dhis2-core/blob/master/dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/ValueType.java
@@ -47,4 +47,9 @@ exports.VALUE_TYPE_TIME = VALUE_TYPE_TIME;
47
47
  const VALUE_TYPE_DATETIME = 'DATETIME';
48
48
  exports.VALUE_TYPE_DATETIME = VALUE_TYPE_DATETIME;
49
49
  const VALUE_TYPE_ORGANISATION_UNIT = 'ORGANISATION_UNIT';
50
- exports.VALUE_TYPE_ORGANISATION_UNIT = VALUE_TYPE_ORGANISATION_UNIT;
50
+ exports.VALUE_TYPE_ORGANISATION_UNIT = VALUE_TYPE_ORGANISATION_UNIT;
51
+ const NUMERIC_VALUE_TYPES = [VALUE_TYPE_NUMBER, VALUE_TYPE_UNIT_INTERVAL, VALUE_TYPE_PERCENTAGE, VALUE_TYPE_INTEGER, VALUE_TYPE_INTEGER_POSITIVE, VALUE_TYPE_INTEGER_NEGATIVE, VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE];
52
+
53
+ const isNumericValueType = type => NUMERIC_VALUE_TYPES.includes(type);
54
+
55
+ exports.isNumericValueType = isNumericValueType;
@@ -127,7 +127,9 @@ const AboutAOUnit = ({
127
127
  }, /*#__PURE__*/React.createElement("div", {
128
128
  onClick: () => setIsExpanded(!isExpanded),
129
129
  className: "jsx-".concat(styles.__hash) + " " + "header"
130
- }, i18n.t('About this visualization'), isExpanded ? /*#__PURE__*/React.createElement(IconChevronUp24, {
130
+ }, /*#__PURE__*/React.createElement("span", {
131
+ className: "jsx-".concat(styles.__hash) + " " + "title"
132
+ }, i18n.t('About this visualization')), isExpanded ? /*#__PURE__*/React.createElement(IconChevronUp24, {
131
133
  color: colors.grey700
132
134
  }) : /*#__PURE__*/React.createElement(IconChevronDown24, {
133
135
  color: colors.grey700
@@ -1,4 +1,4 @@
1
1
  import { colors, spacers } from '@dhis2/ui';
2
- const _defaultExport = [".container.jsx-633421833{padding:".concat(spacers.dp16, ";border-bottom:1px solid ").concat(colors.grey400, ";background-color:").concat(colors.white, ";}"), ".expanded.jsx-633421833{padding-bottom:".concat(spacers.dp32, ";}"), ".loader.jsx-633421833{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}", ".header.jsx-633421833{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;font-size:".concat(spacers.dp16, ";font-weight:500;line-height:21px;color:").concat(colors.grey900, ";}"), ".content.jsx-633421833{font-size:14px;line-height:18px;color:".concat(colors.grey900, ";}"), ".detailLine.jsx-633421833{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0;padding:".concat(spacers.dp12, " 0 0 0;gap:").concat(spacers.dp8, ";}"), ".detailLine.jsx-633421833 svg.jsx-633421833{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}", ".noDescription.jsx-633421833{color:".concat(colors.grey600, ";}"), ".subsection.jsx-633421833{margin-top:".concat(spacers.dp24, ";}"), ".subsectionTitle.jsx-633421833{color:".concat(colors.grey700, ";font-weight:500;}"), ".subscriptionLabel.jsx-633421833{margin:".concat(spacers.dp12, " 0 ").concat(spacers.dp8, " 0;}"), ".subsection.jsx-633421833 button.jsx-633421833{margin-top:".concat(spacers.dp8, ";}")];
3
- _defaultExport.__hash = "633421833";
2
+ const _defaultExport = [".container.jsx-1596217846{position:relative;padding:".concat(spacers.dp16, ";border-bottom:1px solid ").concat(colors.grey400, ";background-color:").concat(colors.white, ";}"), ".expanded.jsx-1596217846{padding-bottom:".concat(spacers.dp32, ";}"), ".loader.jsx-1596217846{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}", ".header.jsx-1596217846{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;}", ".title.jsx-1596217846{font-size:16px;font-weight:500;line-height:21px;color:".concat(colors.grey900, ";}"), ".content.jsx-1596217846{font-size:14px;line-height:18px;color:".concat(colors.grey900, ";}"), ".detailLine.jsx-1596217846{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0;padding:".concat(spacers.dp12, " 0 0 0;gap:").concat(spacers.dp8, ";}"), ".detailLine.jsx-1596217846 svg.jsx-1596217846{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}", ".noDescription.jsx-1596217846{color:".concat(colors.grey600, ";}"), ".subsection.jsx-1596217846{margin-top:".concat(spacers.dp24, ";}"), ".subsectionTitle.jsx-1596217846{color:".concat(colors.grey700, ";font-weight:500;}"), ".subscriptionLabel.jsx-1596217846{margin:".concat(spacers.dp12, " 0 ").concat(spacers.dp8, " 0;}"), ".subsection.jsx-1596217846 button.jsx-1596217846{margin-top:".concat(spacers.dp8, ";}")];
3
+ _defaultExport.__hash = "1596217846";
4
4
  export default _defaultExport;
@@ -1,3 +1,3 @@
1
- import { colors } from '@dhis2/ui';
2
- export const fileMenuStyles = [".menu-toggle.jsx-1542458312{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:14px;font-weight:400;text-transform:none;padding:6px 8px;border-radius:3px;color:".concat(colors.grey900, ";box-sizing:border-box;line-height:1.75;background:none;border:none;-webkit-transition:background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms;transition:background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms;cursor:pointer;}"), ".menu-toggle.jsx-1542458312:hover.jsx-1542458312:enabled{background-color:".concat(colors.grey200, ";}"), ".menu-toggle.jsx-1542458312:disabled{color:".concat(colors.grey400, ";cursor:not-allowed;}"), ".menu-toggle.jsx-1542458312:active{background-color:".concat(colors.grey300, ";}"), ".menuButton.jsx-1542458312:focus{outline:2px solid ".concat(colors.blue600, ";}"), ".menuButton.jsx-1542458312:focus.jsx-1542458312:not(:focus-visible){outline:none;}"];
3
- fileMenuStyles.__hash = "1542458312";
1
+ import { colors, spacers } from '@dhis2/ui';
2
+ export const fileMenuStyles = [".menu-toggle.jsx-2670121391{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:14px;font-weight:400;text-transform:none;padding:6px ".concat(spacers.dp12, ";border-radius:3px;color:").concat(colors.grey900, ";box-sizing:border-box;line-height:1.75;background:none;border:none;-webkit-transition:background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms;transition:background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms;cursor:pointer;}"), ".menu-toggle.jsx-2670121391:hover.jsx-2670121391:enabled{background-color:".concat(colors.grey200, ";}"), ".menu-toggle.jsx-2670121391:disabled{color:".concat(colors.grey400, ";cursor:not-allowed;}"), ".menu-toggle.jsx-2670121391:active{background-color:".concat(colors.grey300, ";}"), ".menuButton.jsx-2670121391:focus{outline:2px solid ".concat(colors.blue600, ";}"), ".menuButton.jsx-2670121391:focus.jsx-2670121391:not(:focus-visible){outline:none;}"];
3
+ fileMenuStyles.__hash = "2670121391";
@@ -0,0 +1,284 @@
1
+ import { NUMBER_TYPE_ROW_PERCENTAGE, NUMBER_TYPE_COLUMN_PERCENTAGE } from '../pivotTable/pivotTableConstants.js';
2
+ import { renderValue } from '../renderValue.js';
3
+ import { VALUE_TYPE_NUMBER, VALUE_TYPE_INTEGER, VALUE_TYPE_INTEGER_POSITIVE, VALUE_TYPE_INTEGER_NEGATIVE, VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE, VALUE_TYPE_PERCENTAGE, VALUE_TYPE_UNIT_INTERVAL, VALUE_TYPE_TEXT } from '../valueTypes.js';
4
+ const DGS_COMMA = 'COMMA';
5
+ const DGS_SPACE = 'SPACE';
6
+ const DGS_NONE = 'NONE';
7
+ const tests = [// Numbers
8
+ {
9
+ value: 1000.5,
10
+ expected: '1 000.5',
11
+ valueType: VALUE_TYPE_NUMBER,
12
+ round: true,
13
+ dgs: DGS_SPACE
14
+ }, {
15
+ value: 33777889.55,
16
+ expected: '33,777,889.5',
17
+ valueType: VALUE_TYPE_NUMBER,
18
+ round: true,
19
+ dgs: DGS_COMMA
20
+ }, {
21
+ value: 33777889.556,
22
+ expected: '33 777 889.6',
23
+ valueType: VALUE_TYPE_NUMBER,
24
+ round: true,
25
+ dgs: DGS_SPACE
26
+ }, {
27
+ value: 33777889.556,
28
+ expected: '33 777 889.5560000017',
29
+ // float issue?
30
+ valueType: VALUE_TYPE_NUMBER,
31
+ round: false,
32
+ dgs: DGS_SPACE
33
+ }, {
34
+ value: 33777889.56,
35
+ expected: '33777889.6',
36
+ valueType: VALUE_TYPE_NUMBER,
37
+ round: true,
38
+ dgs: DGS_NONE
39
+ }, {
40
+ value: 0.0005,
41
+ expected: '0',
42
+ valueType: VALUE_TYPE_NUMBER,
43
+ round: true,
44
+ dgs: DGS_SPACE
45
+ }, {
46
+ value: 0.109,
47
+ expected: '0.11',
48
+ valueType: VALUE_TYPE_NUMBER,
49
+ round: true,
50
+ dgs: DGS_SPACE
51
+ }, {
52
+ value: 1.101,
53
+ expected: '1.1',
54
+ valueType: VALUE_TYPE_NUMBER,
55
+ round: true,
56
+ dgs: DGS_SPACE
57
+ }, {
58
+ value: 1.101,
59
+ expected: '1.1010000000',
60
+ valueType: VALUE_TYPE_NUMBER,
61
+ round: false,
62
+ dgs: DGS_SPACE
63
+ }, {
64
+ value: 0.0005,
65
+ expected: '0.0005000000',
66
+ valueType: VALUE_TYPE_NUMBER,
67
+ round: false,
68
+ dgs: DGS_SPACE
69
+ }, // Numbers showing as column/row percentage
70
+ {
71
+ value: 0.234,
72
+ expected: '23.4%',
73
+ valueType: VALUE_TYPE_NUMBER,
74
+ numberType: NUMBER_TYPE_ROW_PERCENTAGE,
75
+ round: true,
76
+ dgs: DGS_SPACE
77
+ }, {
78
+ value: 0.234,
79
+ expected: '23.4%',
80
+ valueType: VALUE_TYPE_NUMBER,
81
+ numberType: NUMBER_TYPE_ROW_PERCENTAGE,
82
+ round: false,
83
+ dgs: DGS_SPACE
84
+ }, {
85
+ value: 0.000234,
86
+ expected: '0.02%',
87
+ valueType: VALUE_TYPE_NUMBER,
88
+ numberType: NUMBER_TYPE_ROW_PERCENTAGE,
89
+ round: true,
90
+ dgs: DGS_SPACE
91
+ }, {
92
+ value: 0.0000432,
93
+ expected: '0%',
94
+ valueType: VALUE_TYPE_NUMBER,
95
+ numberType: NUMBER_TYPE_ROW_PERCENTAGE,
96
+ round: true,
97
+ dgs: DGS_SPACE
98
+ }, {
99
+ value: 0.000234,
100
+ expected: '0.0234%',
101
+ valueType: VALUE_TYPE_NUMBER,
102
+ numberType: NUMBER_TYPE_ROW_PERCENTAGE,
103
+ round: false,
104
+ dgs: DGS_SPACE
105
+ }, {
106
+ value: -0.0234,
107
+ expected: '-2.3%',
108
+ valueType: VALUE_TYPE_NUMBER,
109
+ numberType: NUMBER_TYPE_ROW_PERCENTAGE,
110
+ round: true,
111
+ dgs: DGS_SPACE
112
+ }, {
113
+ value: -0.0234,
114
+ expected: '-2.34%',
115
+ valueType: VALUE_TYPE_NUMBER,
116
+ numberType: NUMBER_TYPE_ROW_PERCENTAGE,
117
+ round: false,
118
+ dgs: DGS_SPACE
119
+ }, {
120
+ value: 0.450048675309,
121
+ expected: '45.0048675309%',
122
+ valueType: VALUE_TYPE_NUMBER,
123
+ numberType: NUMBER_TYPE_ROW_PERCENTAGE,
124
+ round: false,
125
+ dgs: DGS_SPACE
126
+ }, {
127
+ value: 77.893,
128
+ expected: '7 789.3%',
129
+ valueType: VALUE_TYPE_NUMBER,
130
+ numberType: NUMBER_TYPE_COLUMN_PERCENTAGE,
131
+ round: true,
132
+ dgs: DGS_SPACE
133
+ }, {
134
+ value: 77.893,
135
+ expected: '7,789.3%',
136
+ valueType: VALUE_TYPE_NUMBER,
137
+ numberType: NUMBER_TYPE_COLUMN_PERCENTAGE,
138
+ round: true,
139
+ dgs: DGS_COMMA
140
+ }, // Integers
141
+ {
142
+ value: 99777888,
143
+ expected: '99 777 888',
144
+ valueType: VALUE_TYPE_INTEGER,
145
+ round: true,
146
+ dgs: DGS_SPACE
147
+ }, {
148
+ value: -99777888,
149
+ expected: '-99 777 888',
150
+ valueType: VALUE_TYPE_INTEGER,
151
+ round: true,
152
+ dgs: DGS_SPACE
153
+ }, {
154
+ value: -9977888,
155
+ expected: '-9977888',
156
+ valueType: VALUE_TYPE_INTEGER,
157
+ round: true,
158
+ dgs: DGS_NONE
159
+ }, {
160
+ value: 345,
161
+ expected: '345',
162
+ valueType: VALUE_TYPE_INTEGER_POSITIVE,
163
+ round: true,
164
+ dgs: DGS_COMMA
165
+ }, {
166
+ value: 334445577,
167
+ expected: '334,445,577',
168
+ valueType: VALUE_TYPE_INTEGER_POSITIVE,
169
+ round: false,
170
+ dgs: DGS_COMMA
171
+ }, {
172
+ value: -44555777,
173
+ expected: '-44 555 777',
174
+ valueType: VALUE_TYPE_INTEGER_NEGATIVE,
175
+ round: true,
176
+ dgs: DGS_SPACE
177
+ }, {
178
+ value: -4445577,
179
+ expected: '-4,445,577',
180
+ valueType: VALUE_TYPE_INTEGER_NEGATIVE,
181
+ round: false,
182
+ dgs: DGS_COMMA
183
+ }, {
184
+ value: -445577,
185
+ expected: '-445577',
186
+ valueType: VALUE_TYPE_INTEGER_NEGATIVE,
187
+ round: true,
188
+ dgs: DGS_NONE
189
+ }, {
190
+ value: -4445577,
191
+ expected: '-4,445,577',
192
+ valueType: VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE,
193
+ round: false,
194
+ dgs: DGS_COMMA
195
+ }, {
196
+ value: 57,
197
+ expected: '5 700%',
198
+ valueType: VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE,
199
+ numberType: NUMBER_TYPE_COLUMN_PERCENTAGE,
200
+ round: true,
201
+ dgs: DGS_SPACE
202
+ }, {
203
+ value: 557,
204
+ expected: '55700%',
205
+ valueType: VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE,
206
+ numberType: NUMBER_TYPE_COLUMN_PERCENTAGE,
207
+ round: true,
208
+ dgs: DGS_NONE
209
+ }, // Percentage
210
+ {
211
+ value: 5,
212
+ expected: '5',
213
+ valueType: VALUE_TYPE_PERCENTAGE,
214
+ round: true,
215
+ dgs: DGS_SPACE
216
+ }, {
217
+ value: 53,
218
+ expected: '53',
219
+ valueType: VALUE_TYPE_PERCENTAGE,
220
+ round: false,
221
+ dgs: DGS_SPACE
222
+ }, {
223
+ value: 53,
224
+ expected: '5 300%',
225
+ valueType: VALUE_TYPE_PERCENTAGE,
226
+ numberType: NUMBER_TYPE_COLUMN_PERCENTAGE,
227
+ round: true,
228
+ dgs: DGS_SPACE
229
+ }, // Unit interval
230
+ {
231
+ value: 4,
232
+ expected: '4',
233
+ valueType: VALUE_TYPE_UNIT_INTERVAL,
234
+ round: true,
235
+ dgs: DGS_COMMA
236
+ }, {
237
+ value: 4600,
238
+ expected: '4 600',
239
+ valueType: VALUE_TYPE_UNIT_INTERVAL,
240
+ round: false,
241
+ dgs: DGS_SPACE
242
+ }, {
243
+ value: 46,
244
+ expected: '4,600%',
245
+ valueType: VALUE_TYPE_UNIT_INTERVAL,
246
+ numberType: NUMBER_TYPE_COLUMN_PERCENTAGE,
247
+ round: true,
248
+ dgs: DGS_COMMA
249
+ }, // Texts
250
+ {
251
+ value: 'This string has multiple whitespace characters',
252
+ expected: 'This string has multiple whitespace characters',
253
+ valueType: VALUE_TYPE_TEXT
254
+ }, {
255
+ value: 'Characters \n',
256
+ expected: 'Characters \n',
257
+ valueType: VALUE_TYPE_TEXT
258
+ }, {
259
+ value: 'Characters \nmorecharacters here',
260
+ expected: 'Characters \nmorecharacters here',
261
+ valueType: VALUE_TYPE_TEXT
262
+ }, // Undefined values
263
+ {
264
+ value: undefined,
265
+ expected: 'undefined',
266
+ valueType: VALUE_TYPE_NUMBER
267
+ }, {
268
+ value: undefined,
269
+ expected: 'undefined',
270
+ valueType: VALUE_TYPE_TEXT
271
+ }];
272
+ describe('renderValue', () => {
273
+ tests.forEach(t => {
274
+ const testname = "valueType: ".concat(t.valueType, ", value: ").concat(t.value, ", dgs: ").concat(t.dgs, ", round: ").concat(t.round, ", isPercent: ").concat([NUMBER_TYPE_ROW_PERCENTAGE, NUMBER_TYPE_COLUMN_PERCENTAGE].includes(t.numberType));
275
+ it(testname, () => {
276
+ const actual = renderValue(t.value, t.valueType, {
277
+ skipRounding: !t.round,
278
+ digitGroupSeparator: t.dgs,
279
+ numberType: t.numberType
280
+ });
281
+ expect(actual).toEqual(t.expected);
282
+ });
283
+ });
284
+ });
@@ -1,9 +1,9 @@
1
1
  import { NUMBER_TYPE_ROW_PERCENTAGE, NUMBER_TYPE_COLUMN_PERCENTAGE } from './pivotTable/pivotTableConstants.js';
2
- import { VALUE_TYPE_NUMBER } from './valueTypes.js';
2
+ import { isNumericValueType } from './valueTypes.js';
3
3
 
4
4
  const trimTrailingZeros = stringValue => stringValue.replace(/\.?0+$/, '');
5
5
 
6
- const defaultDecimalSeparator = '.';
6
+ const decimalSeparator = '.';
7
7
 
8
8
  const separateDigitGroups = (stringValue, decimalSeparator) => {
9
9
  const isNegative = stringValue[0] === '-';
@@ -57,15 +57,15 @@ const toFixedPrecisionString = (value, skipRounding) => {
57
57
  };
58
58
 
59
59
  export const renderValue = (value, valueType, visualization) => {
60
- if (valueType !== VALUE_TYPE_NUMBER || value === undefined) {
60
+ if (!isNumericValueType(valueType) || value === undefined) {
61
61
  return String(value).replace(/[^\S\n]+/, ' ');
62
62
  }
63
63
 
64
64
  if (visualization.numberType === NUMBER_TYPE_ROW_PERCENTAGE || visualization.numberType === NUMBER_TYPE_COLUMN_PERCENTAGE) {
65
- return trimTrailingZeros(toFixedPrecisionString(value * 100, visualization.skipRounding)) + '%';
65
+ const stringValue = trimTrailingZeros(toFixedPrecisionString(value * 100, visualization.skipRounding));
66
+ return separateDigitGroups(stringValue, decimalSeparator).join(getSeparator(visualization)) + '%';
67
+ } else {
68
+ const stringValue = toFixedPrecisionString(value, visualization.skipRounding);
69
+ return separateDigitGroups(stringValue, decimalSeparator).join(getSeparator(visualization));
66
70
  }
67
-
68
- const stringValue = toFixedPrecisionString(value, visualization.skipRounding);
69
- const digitGroups = separateDigitGroups(stringValue, defaultDecimalSeparator);
70
- return digitGroups.join(getSeparator(visualization));
71
71
  };
@@ -20,4 +20,6 @@ export const VALUE_TYPE_TRUE_ONLY = 'TRUE_ONLY';
20
20
  export const VALUE_TYPE_DATE = 'DATE';
21
21
  export const VALUE_TYPE_TIME = 'TIME';
22
22
  export const VALUE_TYPE_DATETIME = 'DATETIME';
23
- export const VALUE_TYPE_ORGANISATION_UNIT = 'ORGANISATION_UNIT';
23
+ export const VALUE_TYPE_ORGANISATION_UNIT = 'ORGANISATION_UNIT';
24
+ const NUMERIC_VALUE_TYPES = [VALUE_TYPE_NUMBER, VALUE_TYPE_UNIT_INTERVAL, VALUE_TYPE_PERCENTAGE, VALUE_TYPE_INTEGER, VALUE_TYPE_INTEGER_POSITIVE, VALUE_TYPE_INTEGER_NEGATIVE, VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE];
25
+ export const isNumericValueType = type => NUMERIC_VALUE_TYPES.includes(type);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dhis2/analytics",
3
- "version": "23.8.2",
3
+ "version": "23.8.5",
4
4
  "main": "./build/cjs/index.js",
5
5
  "module": "./build/es/index.js",
6
6
  "exports": {