@dhis2/analytics 23.8.0 → 23.8.3
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 +21 -0
- package/build/cjs/api/dimensions.js +19 -19
- package/build/cjs/components/DataDimension/{DataTypesSelector.js → DataTypeSelector.js} +11 -11
- package/build/cjs/components/DataDimension/GroupSelector.js +10 -10
- package/build/cjs/components/DataDimension/ItemSelector.js +31 -31
- package/build/cjs/components/DataDimension/MetricSelector.js +4 -4
- package/build/cjs/components/DataDimension/styles/{DataTypesSelector.style.js → DataTypeSelector.style.js} +0 -0
- package/build/cjs/components/FileMenu/FileMenu.styles.js +2 -2
- package/build/cjs/index.js +98 -0
- package/build/cjs/modules/__tests__/renderValue.spec.js +289 -0
- package/build/cjs/modules/dataTypes.js +53 -39
- package/build/cjs/modules/pivotTable/PivotTableEngine.js +5 -3
- package/build/cjs/modules/pivotTable/pivotTableConstants.js +2 -10
- package/build/cjs/modules/renderValue.js +7 -7
- package/build/cjs/modules/valueTypes.js +7 -2
- package/build/es/api/dimensions.js +20 -20
- package/build/es/components/DataDimension/{DataTypesSelector.js → DataTypeSelector.js} +8 -8
- package/build/es/components/DataDimension/GroupSelector.js +4 -4
- package/build/es/components/DataDimension/ItemSelector.js +29 -29
- package/build/es/components/DataDimension/MetricSelector.js +5 -5
- package/build/es/components/DataDimension/styles/{DataTypesSelector.style.js → DataTypeSelector.style.js} +0 -0
- package/build/es/components/FileMenu/FileMenu.styles.js +2 -2
- package/build/es/index.js +2 -1
- package/build/es/modules/__tests__/renderValue.spec.js +284 -0
- package/build/es/modules/dataTypes.js +35 -28
- package/build/es/modules/pivotTable/PivotTableEngine.js +3 -2
- package/build/es/modules/pivotTable/pivotTableConstants.js +1 -5
- package/build/es/modules/renderValue.js +8 -8
- package/build/es/modules/valueTypes.js +3 -1
- package/package.json +1 -1
|
@@ -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,13 +1,20 @@
|
|
|
1
1
|
import i18n from '../locales/index.js';
|
|
2
|
-
export const
|
|
3
|
-
export const
|
|
4
|
-
export const
|
|
5
|
-
export const
|
|
6
|
-
export const
|
|
7
|
-
export const
|
|
8
|
-
export const
|
|
9
|
-
export const
|
|
10
|
-
export const
|
|
2
|
+
export const DIMENSION_TYPE_ALL = 'ALL';
|
|
3
|
+
export const DIMENSION_TYPE_INDICATOR = 'INDICATOR';
|
|
4
|
+
export const DIMENSION_TYPE_DATA_ELEMENT = 'DATA_ELEMENT';
|
|
5
|
+
export const DIMENSION_TYPE_DATA_SET = 'DATA_SET';
|
|
6
|
+
export const DIMENSION_TYPE_EVENT_DATA_ITEM = 'EVENT_DATA_ITEM';
|
|
7
|
+
export const DIMENSION_TYPE_PROGRAM_INDICATOR = 'PROGRAM_INDICATOR';
|
|
8
|
+
export const DIMENSION_TYPE_PROGRAM_DATA_ELEMENT = 'PROGRAM_DATA_ELEMENT';
|
|
9
|
+
export const DIMENSION_TYPE_PROGRAM_ATTRIBUTE = 'PROGRAM_ATTRIBUTE';
|
|
10
|
+
export const DIMENSION_TYPE_DATA_ELEMENT_OPERAND = 'DATA_ELEMENT_OPERAND';
|
|
11
|
+
export const DIMENSION_TYPE_CATEGORY = 'CATEGORY';
|
|
12
|
+
export const DIMENSION_TYPE_CATEGORY_OPTION_GROUP_SET = 'CATEGORY_OPTION_GROUP_SET';
|
|
13
|
+
export const DIMENSION_TYPE_DATA_ELEMENT_GROUP_SET = 'DATA_ELEMENT_GROUP_SET';
|
|
14
|
+
export const DIMENSION_TYPE_DATA = 'DATA_X';
|
|
15
|
+
export const DIMENSION_TYPE_PERIOD = 'PERIOD';
|
|
16
|
+
export const DIMENSION_TYPE_ORGANISATION_UNIT = 'ORGANISATION_UNIT';
|
|
17
|
+
export const DIMENSION_TYPE_ORGANISATION_UNIT_GROUP_SET = 'ORGANISATION_UNIT_GROUP_SET';
|
|
11
18
|
export const TOTALS = 'totals';
|
|
12
19
|
export const DETAIL = 'detail';
|
|
13
20
|
export const SUB_GROUP_DETAIL = 'DETAIL';
|
|
@@ -17,25 +24,25 @@ const getProgramText = () => i18n.t('Program');
|
|
|
17
24
|
|
|
18
25
|
const getSelectProgramText = () => i18n.t('Select a program');
|
|
19
26
|
|
|
20
|
-
export const
|
|
21
|
-
[
|
|
22
|
-
id:
|
|
27
|
+
export const dataTypeMap = {
|
|
28
|
+
[DIMENSION_TYPE_INDICATOR]: {
|
|
29
|
+
id: DIMENSION_TYPE_INDICATOR,
|
|
23
30
|
getName: () => i18n.t('Indicators'),
|
|
24
31
|
getGroupLabel: () => i18n.t('Indicator group'),
|
|
25
32
|
defaultGroup: {
|
|
26
|
-
id:
|
|
33
|
+
id: DIMENSION_TYPE_ALL,
|
|
27
34
|
getName: () => i18n.t('All groups')
|
|
28
35
|
},
|
|
29
36
|
getItemName: () => i18n.t('Indicator'),
|
|
30
37
|
getGroupEmptyLabel: () => i18n.t('No indicator groups found'),
|
|
31
38
|
getGroupLoadingLabel: () => i18n.t('Loading indicator groups')
|
|
32
39
|
},
|
|
33
|
-
[
|
|
34
|
-
id:
|
|
40
|
+
[DIMENSION_TYPE_DATA_ELEMENT]: {
|
|
41
|
+
id: DIMENSION_TYPE_DATA_ELEMENT,
|
|
35
42
|
getName: () => i18n.t('Data elements'),
|
|
36
43
|
getGroupLabel: () => i18n.t('Data element group'),
|
|
37
44
|
defaultGroup: {
|
|
38
|
-
id:
|
|
45
|
+
id: DIMENSION_TYPE_ALL,
|
|
39
46
|
getName: () => i18n.t('All groups')
|
|
40
47
|
},
|
|
41
48
|
subGroup: SUB_GROUP_DETAIL,
|
|
@@ -43,12 +50,12 @@ export const dataTypes = {
|
|
|
43
50
|
getGroupEmptyLabel: () => i18n.t('No data element groups found'),
|
|
44
51
|
getGroupLoadingLabel: () => i18n.t('Loading data element groups')
|
|
45
52
|
},
|
|
46
|
-
[
|
|
47
|
-
id:
|
|
53
|
+
[DIMENSION_TYPE_DATA_SET]: {
|
|
54
|
+
id: DIMENSION_TYPE_DATA_SET,
|
|
48
55
|
getName: () => i18n.t('Data sets'),
|
|
49
56
|
getGroupLabel: () => i18n.t('Data set'),
|
|
50
57
|
defaultGroup: {
|
|
51
|
-
id:
|
|
58
|
+
id: DIMENSION_TYPE_ALL,
|
|
52
59
|
getName: () => i18n.t('All data sets')
|
|
53
60
|
},
|
|
54
61
|
subGroup: SUB_GROUP_METRIC,
|
|
@@ -56,26 +63,26 @@ export const dataTypes = {
|
|
|
56
63
|
getGroupEmptyLabel: () => i18n.t('No data sets found'),
|
|
57
64
|
getGroupLoadingLabel: () => i18n.t('Loading data sets')
|
|
58
65
|
},
|
|
59
|
-
[
|
|
60
|
-
id:
|
|
66
|
+
[DIMENSION_TYPE_EVENT_DATA_ITEM]: {
|
|
67
|
+
id: DIMENSION_TYPE_EVENT_DATA_ITEM,
|
|
61
68
|
getName: () => i18n.t('Event data items'),
|
|
62
69
|
getGroupLabel: getProgramText,
|
|
63
70
|
getPlaceholder: getSelectProgramText,
|
|
64
71
|
defaultGroup: {
|
|
65
|
-
id:
|
|
72
|
+
id: DIMENSION_TYPE_ALL,
|
|
66
73
|
getName: () => i18n.t('All programs')
|
|
67
74
|
},
|
|
68
75
|
getItemName: () => i18n.t('Event data item'),
|
|
69
76
|
getGroupEmptyLabel: () => i18n.t('No programs found'),
|
|
70
77
|
getGroupLoadingLabel: () => i18n.t('Loading programs')
|
|
71
78
|
},
|
|
72
|
-
[
|
|
73
|
-
id:
|
|
79
|
+
[DIMENSION_TYPE_PROGRAM_INDICATOR]: {
|
|
80
|
+
id: DIMENSION_TYPE_PROGRAM_INDICATOR,
|
|
74
81
|
getName: () => i18n.t('Program indicators'),
|
|
75
82
|
getGroupLabel: getProgramText,
|
|
76
83
|
getPlaceholder: getSelectProgramText,
|
|
77
84
|
defaultGroup: {
|
|
78
|
-
id:
|
|
85
|
+
id: DIMENSION_TYPE_ALL,
|
|
79
86
|
getName: () => i18n.t('All programs')
|
|
80
87
|
},
|
|
81
88
|
getItemName: () => i18n.t('Program indicator'),
|
|
@@ -84,9 +91,9 @@ export const dataTypes = {
|
|
|
84
91
|
}
|
|
85
92
|
};
|
|
86
93
|
export function defaultGroupId(dataType) {
|
|
87
|
-
return
|
|
94
|
+
return dataTypeMap[dataType].defaultGroup ? dataTypeMap[dataType].defaultGroup.id : '';
|
|
88
95
|
}
|
|
89
96
|
export function defaultGroupDetail(dataType) {
|
|
90
|
-
return
|
|
97
|
+
return dataTypeMap[dataType].groupDetail ? dataTypeMap[dataType].groupDetail.default : '';
|
|
91
98
|
}
|
|
92
|
-
export const DEFAULT_DATATYPE_ID =
|
|
99
|
+
export const DEFAULT_DATATYPE_ID = DIMENSION_TYPE_INDICATOR;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
2
|
|
|
3
3
|
import times from 'lodash/times';
|
|
4
|
+
import { DIMENSION_TYPE_DATA, DIMENSION_TYPE_DATA_ELEMENT_GROUP_SET, DIMENSION_TYPE_ORGANISATION_UNIT, DIMENSION_TYPE_PERIOD } from '../dataTypes.js';
|
|
4
5
|
import { DIMENSION_ID_ORGUNIT } from '../predefinedDimensions.js';
|
|
5
6
|
import { renderValue } from '../renderValue.js';
|
|
6
7
|
import { VALUE_TYPE_NUMBER, VALUE_TYPE_TEXT } from '../valueTypes.js';
|
|
7
8
|
import { AdaptiveClippingController } from './AdaptiveClippingController.js';
|
|
8
9
|
import { parseValue } from './parseValue.js';
|
|
9
|
-
import { AGGREGATE_TYPE_NA, AGGREGATE_TYPE_AVERAGE, AGGREGATE_TYPE_SUM, CELL_TYPE_VALUE, CELL_TYPE_TOTAL, CELL_TYPE_SUBTOTAL, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING, DISPLAY_DENSITY_PADDING_COMPACT, DISPLAY_DENSITY_PADDING_COMFORTABLE, DISPLAY_DENSITY_OPTION_COMFORTABLE, DISPLAY_DENSITY_OPTION_COMPACT, DISPLAY_DENSITY_OPTION_NORMAL, DISPLAY_DENSITY_PADDING_NORMAL, FONT_SIZE_OPTION_SMALL, FONT_SIZE_SMALL, FONT_SIZE_OPTION_LARGE, FONT_SIZE_LARGE, FONT_SIZE_OPTION_NORMAL, FONT_SIZE_NORMAL, NUMBER_TYPE_COLUMN_PERCENTAGE, NUMBER_TYPE_ROW_PERCENTAGE,
|
|
10
|
+
import { AGGREGATE_TYPE_NA, AGGREGATE_TYPE_AVERAGE, AGGREGATE_TYPE_SUM, CELL_TYPE_VALUE, CELL_TYPE_TOTAL, CELL_TYPE_SUBTOTAL, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING, DISPLAY_DENSITY_PADDING_COMPACT, DISPLAY_DENSITY_PADDING_COMFORTABLE, DISPLAY_DENSITY_OPTION_COMFORTABLE, DISPLAY_DENSITY_OPTION_COMPACT, DISPLAY_DENSITY_OPTION_NORMAL, DISPLAY_DENSITY_PADDING_NORMAL, FONT_SIZE_OPTION_SMALL, FONT_SIZE_SMALL, FONT_SIZE_OPTION_LARGE, FONT_SIZE_LARGE, FONT_SIZE_OPTION_NORMAL, FONT_SIZE_NORMAL, NUMBER_TYPE_COLUMN_PERCENTAGE, NUMBER_TYPE_ROW_PERCENTAGE, NUMBER_TYPE_VALUE } from './pivotTableConstants.js';
|
|
10
11
|
const dataFields = ['value', 'numerator', 'denominator', 'factor', 'multiplier', 'divisor'];
|
|
11
12
|
const defaultOptions = {
|
|
12
13
|
hideEmptyColumns: false,
|
|
@@ -251,7 +252,7 @@ export class PivotTableEngine {
|
|
|
251
252
|
});
|
|
252
253
|
const headers = [...this.getRawRowHeader(row), ...this.getRawColumnHeader(column)];
|
|
253
254
|
const peId = (_headers$find = headers.find(header => (header === null || header === void 0 ? void 0 : header.dimensionItemType) === DIMENSION_TYPE_PERIOD)) === null || _headers$find === void 0 ? void 0 : _headers$find.uid;
|
|
254
|
-
const ouId = (_headers$find2 = headers.find(header => (header === null || header === void 0 ? void 0 : header.dimensionItemType) ===
|
|
255
|
+
const ouId = (_headers$find2 = headers.find(header => (header === null || header === void 0 ? void 0 : header.dimensionItemType) === DIMENSION_TYPE_ORGANISATION_UNIT)) === null || _headers$find2 === void 0 ? void 0 : _headers$find2.uid;
|
|
255
256
|
|
|
256
257
|
if (!this.data[row] || !this.data[row][column]) {
|
|
257
258
|
return {
|
|
@@ -26,8 +26,4 @@ export const CLIPPED_CELL_MAX_SIZE = 360;
|
|
|
26
26
|
export const CLIPPED_CELL_MIN_SIZE = 36;
|
|
27
27
|
export const WRAPPED_TEXT_JUSTIFY_BUFFER = 25;
|
|
28
28
|
export const WRAPPED_TEXT_LINE_HEIGHT = 1.0;
|
|
29
|
-
export const CLIPPED_AXIS_PARTITION_SIZE_PX = 1000;
|
|
30
|
-
export const DIMENSION_TYPE_DATA_ELEMENT_GROUP_SET = 'DATA_ELEMENT_GROUP_SET';
|
|
31
|
-
export const DIMENSION_TYPE_DATA = 'DATA_X';
|
|
32
|
-
export const DIMENSION_TYPE_PERIOD = 'PERIOD';
|
|
33
|
-
export const DIMENSION_TYPE_ORGUNIT = 'ORGANISATION_UNIT';
|
|
29
|
+
export const CLIPPED_AXIS_PARTITION_SIZE_PX = 1000;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { NUMBER_TYPE_ROW_PERCENTAGE, NUMBER_TYPE_COLUMN_PERCENTAGE } from './pivotTable/pivotTableConstants.js';
|
|
2
|
-
import {
|
|
2
|
+
import { isNumericValueType } from './valueTypes.js';
|
|
3
3
|
|
|
4
4
|
const trimTrailingZeros = stringValue => stringValue.replace(/\.?0+$/, '');
|
|
5
5
|
|
|
6
|
-
const
|
|
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
|
|
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
|
-
|
|
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);
|