@dhis2/analytics 21.2.5 → 21.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # [21.4.0](https://github.com/dhis2/analytics/compare/v21.3.2...v21.4.0) (2022-01-20)
2
+
3
+
4
+ ### Features
5
+
6
+ * add support for enrollments/query API request (TECH-697) ([#1074](https://github.com/dhis2/analytics/issues/1074)) ([0e48d42](https://github.com/dhis2/analytics/commit/0e48d42763b0c773d3f0093e778627e1afc7aeb6))
7
+
8
+ ## [21.3.2](https://github.com/dhis2/analytics/compare/v21.3.1...v21.3.2) (2022-01-20)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * event visualization endpoint ([#1133](https://github.com/dhis2/analytics/issues/1133)) ([cefd746](https://github.com/dhis2/analytics/commit/cefd746989f37d1ec8686731c7a7300c5f10624a))
14
+
15
+ ## [21.3.1](https://github.com/dhis2/analytics/compare/v21.3.0...v21.3.1) (2022-01-20)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **translations:** sync translations from transifex (master) ([0fd64dc](https://github.com/dhis2/analytics/commit/0fd64dcec04bb484291c1ba33cb90604970d360c))
21
+
22
+ # [21.3.0](https://github.com/dhis2/analytics/compare/v21.2.5...v21.3.0) (2022-01-17)
23
+
24
+
25
+ ### Features
26
+
27
+ * add event visualization ao type ([#1130](https://github.com/dhis2/analytics/issues/1130)) ([61ea5b2](https://github.com/dhis2/analytics/commit/61ea5b275dba604a8479b8c9ca1cc71677aa13aa))
28
+
1
29
  ## [21.2.5](https://github.com/dhis2/analytics/compare/v21.2.4...v21.2.5) (2022-01-07)
2
30
 
3
31
 
@@ -98,6 +98,7 @@ var _default = function x() {
98
98
  addFixture('/api/analytics/query', require('./json/api/analytics/query.json'));
99
99
  addFixture('/api/analytics/cluster', require('./json/api/analytics/cluster.json'));
100
100
  addFixture('/api/analytics/response', require('./json/api/analytics/response.json'));
101
+ addFixture('/api/analytics/enrollments', require('./json/api/analytics/enrollments.json'));
101
102
  return {
102
103
  get: getFixture,
103
104
  add: addFixture
@@ -0,0 +1,206 @@
1
+ {
2
+ "headers": [
3
+ {
4
+ "name": "pi",
5
+ "column": "Enrollment",
6
+ "valueType": "TEXT",
7
+ "type": "java.lang.String",
8
+ "hidden": false,
9
+ "meta": true
10
+ },
11
+ {
12
+ "name": "tei",
13
+ "column": "Tracked entity instance",
14
+ "valueType": "TEXT",
15
+ "type": "java.lang.String",
16
+ "hidden": false,
17
+ "meta": true
18
+ },
19
+ {
20
+ "name": "enrollmentdate",
21
+ "column": "Enrollment date",
22
+ "valueType": "DATE",
23
+ "type": "java.util.Date",
24
+ "hidden": false,
25
+ "meta": true
26
+ },
27
+ {
28
+ "name": "incidentdate",
29
+ "column": "Incident date",
30
+ "valueType": "DATE",
31
+ "type": "java.util.Date",
32
+ "hidden": false,
33
+ "meta": true
34
+ },
35
+ {
36
+ "name": "geometry",
37
+ "column": "Geometry",
38
+ "valueType": "TEXT",
39
+ "type": "java.lang.String",
40
+ "hidden": false,
41
+ "meta": true
42
+ },
43
+ {
44
+ "name": "longitude",
45
+ "column": "Longitude",
46
+ "valueType": "NUMBER",
47
+ "type": "java.lang.Double",
48
+ "hidden": false,
49
+ "meta": true
50
+ },
51
+ {
52
+ "name": "latitude",
53
+ "column": "Latitude",
54
+ "valueType": "NUMBER",
55
+ "type": "java.lang.Double",
56
+ "hidden": false,
57
+ "meta": true
58
+ },
59
+ {
60
+ "name": "ouname",
61
+ "column": "Organisation unit name",
62
+ "valueType": "TEXT",
63
+ "type": "java.lang.String",
64
+ "hidden": false,
65
+ "meta": true
66
+ },
67
+ {
68
+ "name": "oucode",
69
+ "column": "Organisation unit code",
70
+ "valueType": "TEXT",
71
+ "type": "java.lang.String",
72
+ "hidden": false,
73
+ "meta": true
74
+ },
75
+ {
76
+ "name": "ou",
77
+ "column": "Organisation unit",
78
+ "valueType": "TEXT",
79
+ "type": "java.lang.String",
80
+ "hidden": false,
81
+ "meta": true
82
+ },
83
+ {
84
+ "name": "de0FEHSIoxh",
85
+ "column": "WHOMCH Chronic conditions",
86
+ "valueType": "BOOLEAN",
87
+ "type": "java.lang.Boolean",
88
+ "hidden": false,
89
+ "meta": true
90
+ },
91
+ {
92
+ "name": "sWoqcoByYmD",
93
+ "column": "WHOMCH Smoking",
94
+ "valueType": "BOOLEAN",
95
+ "type": "java.lang.Boolean",
96
+ "hidden": false,
97
+ "meta": true
98
+ }
99
+ ],
100
+ "metaData": {
101
+ "pager": {
102
+ "page": 2,
103
+ "total": 163,
104
+ "pageSize": 4,
105
+ "pageCount": 41
106
+ },
107
+ "items": {
108
+ "ImspTQPwCqd": {
109
+ "name": "Sierra Leone"
110
+ },
111
+ "PFDfvmGpsR3": {
112
+ "name": "Care at birth"
113
+ },
114
+ "bbKtnxRZKEP": {
115
+ "name": "Postpartum care visit"
116
+ },
117
+ "ou": {
118
+ "name": "Organisation unit"
119
+ },
120
+ "PUZaKR0Jh2k": {
121
+ "name": "Previous deliveries"
122
+ },
123
+ "edqlbukwRfQ": {
124
+ "name": "Antenatal care visit"
125
+ },
126
+ "WZbXY0S00lP": {
127
+ "name": "First antenatal care visit"
128
+ },
129
+ "sWoqcoByYmD": {
130
+ "name": "WHOMCH Smoking"
131
+ },
132
+ "WSGAb5XwJ3Y": {
133
+ "name": "WHO RMNCH Tracker"
134
+ },
135
+ "de0FEHSIoxh": {
136
+ "name": "WHOMCH Chronic conditions"
137
+ }
138
+ },
139
+ "dimensions": {
140
+ "pe": [],
141
+ "ou": ["ImspTQPwCqd"],
142
+ "sWoqcoByYmD": [],
143
+ "de0FEHSIoxh": []
144
+ }
145
+ },
146
+ "width": 12,
147
+ "rows": [
148
+ [
149
+ "A0cP533hIQv",
150
+ "to8G9jAprnx",
151
+ "2019-02-02 12:05:00.0",
152
+ "2019-02-02 12:05:00.0",
153
+ "",
154
+ "0.0",
155
+ "0.0",
156
+ "Tonkomba MCHP",
157
+ "OU_193264",
158
+ "xIMxph4NMP1",
159
+ "0",
160
+ "1"
161
+ ],
162
+ [
163
+ "ZqiUn2uXmBi",
164
+ "SJtv0WzoYki",
165
+ "2019-02-02 12:05:00.0",
166
+ "2019-02-02 12:05:00.0",
167
+ "",
168
+ "0.0",
169
+ "0.0",
170
+ "Mawoma MCHP",
171
+ "OU_254973",
172
+ "Srnpwq8jKbp",
173
+ "0",
174
+ "0"
175
+ ],
176
+ [
177
+ "lE747mUAtbz",
178
+ "PGzTv2A1xzn",
179
+ "2019-02-02 12:05:00.0",
180
+ "2019-02-02 12:05:00.0",
181
+ "",
182
+ "0.0",
183
+ "0.0",
184
+ "Kunsho CHP",
185
+ "OU_193254",
186
+ "tdhB1JXYBx2",
187
+ "",
188
+ "0"
189
+ ],
190
+ [
191
+ "nmcqu9QF8ow",
192
+ "pav3tGLjYuq",
193
+ "2019-02-03 12:05:00.0",
194
+ "2019-02-03 12:05:00.0",
195
+ "",
196
+ "0.0",
197
+ "0.0",
198
+ "Korbu MCHP",
199
+ "OU_678893",
200
+ "m73lWmo5BDG",
201
+ "",
202
+ "1"
203
+ ]
204
+ ],
205
+ "height": 4
206
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _AnalyticsBase = _interopRequireDefault(require("./AnalyticsBase.js"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ /**
13
+ * @extends module:analytics.AnalyticsBase
14
+ *
15
+ * @description
16
+ * Analytics enrollments class used to request analytics enrollments data from Web API.
17
+ *
18
+ * @memberof module:analytics
19
+ *
20
+ * @see https://docs.dhis2.org/en/develop/using-the-api/dhis-core-version-236/analytics.html#webapi_enrollment_analytics
21
+ */
22
+ class AnalyticsEnrollments extends _AnalyticsBase.default {
23
+ /**
24
+ * @param {!AnalyticsRequest} req Request object
25
+ *
26
+ * @returns {Promise} Promise that resolves with the analytics query data from the api.
27
+ *
28
+ * @example
29
+ * const req = new analytics.request()
30
+ * .withProgram('eBAyeGv0exc')
31
+ * .addDataDimension(['Uvn6LCg7dVU','OdiHJayrsKo'])
32
+ * .addPeriodDimension('LAST_4_QUARTERS')
33
+ * .addOrgUnitDimension(['lc3eMKXaEfw','PMa2VCrupOd'])
34
+ * .addOrgUnitFilter('O6uvpzGd5pu')
35
+ * .withStartDate('2017-10-01')
36
+ * .withEndDate('2017-10-31');
37
+ *
38
+ * analytics.enrollments.getQuery(req)
39
+ * .then(console.log);
40
+ */
41
+ getQuery(req) {
42
+ return this.fetch(req.withPath('enrollments/query'));
43
+ }
44
+
45
+ }
46
+
47
+ var _default = AnalyticsEnrollments;
48
+ exports.default = _default;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _fixtures = _interopRequireDefault(require("../../../__fixtures__/fixtures.js"));
4
+
5
+ var _DataEngine = _interopRequireDefault(require("../__mocks__/DataEngine.js"));
6
+
7
+ var _AnalyticsEnrollments = _interopRequireDefault(require("../AnalyticsEnrollments.js"));
8
+
9
+ var _AnalyticsRequest = _interopRequireDefault(require("../AnalyticsRequest.js"));
10
+
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+
13
+ describe('analytics.enrollments', () => {
14
+ let enrollments;
15
+ let request;
16
+ let dataEngineMock;
17
+ let fixture;
18
+ beforeEach(() => {
19
+ dataEngineMock = new _DataEngine.default();
20
+
21
+ _DataEngine.default.mockClear();
22
+
23
+ enrollments = new _AnalyticsEnrollments.default();
24
+ });
25
+ it('should not be allowed to be called without new', () => {
26
+ expect(() => (0, _AnalyticsEnrollments.default)()).toThrowErrorMatchingSnapshot();
27
+ });
28
+ it('should use the dataEngine object when it is passed', () => {
29
+ const dataEngineMockObject = {};
30
+ enrollments = new _AnalyticsEnrollments.default(dataEngineMockObject);
31
+ expect(enrollments.dataEngine).toBe(dataEngineMockObject);
32
+ });
33
+ describe('.getQuery()', () => {
34
+ beforeEach(() => {
35
+ enrollments = new _AnalyticsEnrollments.default(new _DataEngine.default());
36
+ request = new _AnalyticsRequest.default().addOrgUnitDimension('ImspTQPwCqd').addDimension('WZbXY0S00lP.de0FEHSIoxh').addDimension('WZbXY0S00lP.sWoqcoByYmD').addPeriodFilter('LAST_MONTH').withProgram('WSGAb5XwJ3Y').withStage('WZbXY0S00lP').withAsc('ENROLLMENTDATE').withOuMode('DESCENDANTS').withColumns('w75KJ2mc4zz').withPage(1).withPageSize(10);
37
+ fixture = _fixtures.default.get('/api/analytics/enrollments');
38
+ dataEngineMock.query.mockReturnValue(Promise.resolve({
39
+ data: fixture
40
+ }));
41
+ });
42
+ it('should be a function', () => {
43
+ expect(enrollments.getQuery).toBeInstanceOf(Function);
44
+ });
45
+ it('should resolve a promise with data', () => enrollments.getQuery(request).then(data => {
46
+ expect(data.width).toEqual(fixture.width);
47
+ expect(data.height).toEqual(fixture.height);
48
+ }));
49
+ });
50
+ });
@@ -0,0 +1,3 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`analytics.enrollments should not be allowed to be called without new 1`] = `"Class constructor AnalyticsEnrollments cannot be invoked without 'new'"`;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.appPathFor = exports.endpointFromFileType = exports.supportedFileTypes = void 0;
7
- const supportedFileTypes = ['eventReport', 'visualization', 'map'];
7
+ const supportedFileTypes = ['eventReport', 'visualization', 'map', 'eventVisualization'];
8
8
  exports.supportedFileTypes = supportedFileTypes;
9
9
 
10
10
  const endpointFromFileType = fileType => {
@@ -126,7 +126,7 @@ const OpenFileDialog = ({
126
126
  } // for ER 2.38 only show line list ER types
127
127
 
128
128
 
129
- if (type === _utils.AO_TYPE_EVENT_REPORT) {
129
+ if (type === _utils.AO_TYPE_EVENT_REPORT || type === _utils.AO_TYPE_EVENT_VISUALIZATION) {
130
130
  queryFilters.push('dataType:eq:EVENTS');
131
131
  }
132
132
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getTranslatedString = exports.AOTypeMap = exports.AO_TYPE_EVENT_REPORT = exports.AO_TYPE_EVENT_CHART = exports.AO_TYPE_MAP = exports.AO_TYPE_VISUALIZATION = void 0;
6
+ exports.getTranslatedString = exports.AOTypeMap = exports.AO_TYPE_EVENT_VISUALIZATION = exports.AO_TYPE_EVENT_REPORT = exports.AO_TYPE_EVENT_CHART = exports.AO_TYPE_MAP = exports.AO_TYPE_VISUALIZATION = void 0;
7
7
 
8
8
  var _d2I18n = _interopRequireDefault(require("@dhis2/d2-i18n"));
9
9
 
@@ -17,6 +17,8 @@ const AO_TYPE_EVENT_CHART = 'eventChart';
17
17
  exports.AO_TYPE_EVENT_CHART = AO_TYPE_EVENT_CHART;
18
18
  const AO_TYPE_EVENT_REPORT = 'eventReport';
19
19
  exports.AO_TYPE_EVENT_REPORT = AO_TYPE_EVENT_REPORT;
20
+ const AO_TYPE_EVENT_VISUALIZATION = 'eventVisualization';
21
+ exports.AO_TYPE_EVENT_VISUALIZATION = AO_TYPE_EVENT_VISUALIZATION;
20
22
  const AOTypeMap = {
21
23
  [AO_TYPE_VISUALIZATION]: {
22
24
  apiEndpoint: 'visualizations'
@@ -29,6 +31,9 @@ const AOTypeMap = {
29
31
  },
30
32
  [AO_TYPE_EVENT_REPORT]: {
31
33
  apiEndpoint: 'eventReports'
34
+ },
35
+ [AO_TYPE_EVENT_VISUALIZATION]: {
36
+ apiEndpoint: 'eventVisualizations'
32
37
  }
33
38
  };
34
39
  exports.AOTypeMap = AOTypeMap;
@@ -86,6 +91,20 @@ const getTranslatedString = (type, key) => {
86
91
  };
87
92
  break;
88
93
  }
94
+
95
+ case 'eventVisualization':
96
+ {
97
+ texts = {
98
+ modalTitle: _d2I18n.default.t('Open an event visualization'),
99
+ loadingText: _d2I18n.default.t('Loading event visualizations'),
100
+ errorTitle: _d2I18n.default.t("Couldn't load event visualizations"),
101
+ errorText: _d2I18n.default.t('There was a problem loading event visualizations. Try again or contact your system administrator.'),
102
+ noDataText: _d2I18n.default.t('No event visualizations found. Click New event visualization to get started.'),
103
+ noFilteredDataText: _d2I18n.default.t("No event visualizations found. Try adjusting your search or filter options to find what you're looking for."),
104
+ newButtonLabel: _d2I18n.default.t('New event visualization')
105
+ };
106
+ break;
107
+ }
89
108
  }
90
109
 
91
110
  return texts[key];
@@ -230,14 +230,14 @@
230
230
  "Six-months": "Půlrok",
231
231
  "Financial Years": "Finanční roky",
232
232
  "Years": "Let",
233
- "Translating to": "",
234
- "Choose a locale": "",
235
- "Base locale reference": "",
236
- "Choose a locale to translate from the menu above": "",
237
- "Translate: {{objectName}}": "",
238
- "Save translations": "",
239
- "Could not load translations": "",
240
- "Retry": "",
233
+ "Translating to": "Překlad do",
234
+ "Choose a locale": "Vyberte národní prostředí",
235
+ "Base locale reference": "Odkaz na základní národní prostředí",
236
+ "Choose a locale to translate from the menu above": "Z nabídky výše vyberte národní prostředí, které chcete přeložit",
237
+ "Translate: {{objectName}}": "Přeložit: {{objectName}}",
238
+ "Save translations": "Uložit překlady",
239
+ "Could not load translations": "Nelze načíst překlady",
240
+ "Retry": "Opakovat",
241
241
  "Series": "Série",
242
242
  "Category": "Kategorie",
243
243
  "Filter": "Filtr",
@@ -115,6 +115,13 @@
115
115
  "No event reports found. Click New event report to get started.": "No event reports found. Click New event report to get started.",
116
116
  "No event reports found. Try adjusting your search or filter options to find what you're looking for.": "No event reports found. Try adjusting your search or filter options to find what you're looking for.",
117
117
  "New event report": "New event report",
118
+ "Open an event visualization": "Open an event visualization",
119
+ "Loading event visualizations": "Loading event visualizations",
120
+ "Couldn't load event visualizations": "Couldn't load event visualizations",
121
+ "There was a problem loading event visualizations. Try again or contact your system administrator.": "There was a problem loading event visualizations. Try again or contact your system administrator.",
122
+ "No event visualizations found. Click New event visualization to get started.": "No event visualizations found. Click New event visualization to get started.",
123
+ "No event visualizations found. Try adjusting your search or filter options to find what you're looking for.": "No event visualizations found. Try adjusting your search or filter options to find what you're looking for.",
124
+ "New event visualization": "New event visualization",
118
125
  "Options": "Options",
119
126
  "Hide": "Hide",
120
127
  "Update": "Update",
@@ -91,6 +91,7 @@ export default (function x() {
91
91
  addFixture('/api/analytics/query', require('./json/api/analytics/query.json'));
92
92
  addFixture('/api/analytics/cluster', require('./json/api/analytics/cluster.json'));
93
93
  addFixture('/api/analytics/response', require('./json/api/analytics/response.json'));
94
+ addFixture('/api/analytics/enrollments', require('./json/api/analytics/enrollments.json'));
94
95
  return {
95
96
  get: getFixture,
96
97
  add: addFixture
@@ -0,0 +1,206 @@
1
+ {
2
+ "headers": [
3
+ {
4
+ "name": "pi",
5
+ "column": "Enrollment",
6
+ "valueType": "TEXT",
7
+ "type": "java.lang.String",
8
+ "hidden": false,
9
+ "meta": true
10
+ },
11
+ {
12
+ "name": "tei",
13
+ "column": "Tracked entity instance",
14
+ "valueType": "TEXT",
15
+ "type": "java.lang.String",
16
+ "hidden": false,
17
+ "meta": true
18
+ },
19
+ {
20
+ "name": "enrollmentdate",
21
+ "column": "Enrollment date",
22
+ "valueType": "DATE",
23
+ "type": "java.util.Date",
24
+ "hidden": false,
25
+ "meta": true
26
+ },
27
+ {
28
+ "name": "incidentdate",
29
+ "column": "Incident date",
30
+ "valueType": "DATE",
31
+ "type": "java.util.Date",
32
+ "hidden": false,
33
+ "meta": true
34
+ },
35
+ {
36
+ "name": "geometry",
37
+ "column": "Geometry",
38
+ "valueType": "TEXT",
39
+ "type": "java.lang.String",
40
+ "hidden": false,
41
+ "meta": true
42
+ },
43
+ {
44
+ "name": "longitude",
45
+ "column": "Longitude",
46
+ "valueType": "NUMBER",
47
+ "type": "java.lang.Double",
48
+ "hidden": false,
49
+ "meta": true
50
+ },
51
+ {
52
+ "name": "latitude",
53
+ "column": "Latitude",
54
+ "valueType": "NUMBER",
55
+ "type": "java.lang.Double",
56
+ "hidden": false,
57
+ "meta": true
58
+ },
59
+ {
60
+ "name": "ouname",
61
+ "column": "Organisation unit name",
62
+ "valueType": "TEXT",
63
+ "type": "java.lang.String",
64
+ "hidden": false,
65
+ "meta": true
66
+ },
67
+ {
68
+ "name": "oucode",
69
+ "column": "Organisation unit code",
70
+ "valueType": "TEXT",
71
+ "type": "java.lang.String",
72
+ "hidden": false,
73
+ "meta": true
74
+ },
75
+ {
76
+ "name": "ou",
77
+ "column": "Organisation unit",
78
+ "valueType": "TEXT",
79
+ "type": "java.lang.String",
80
+ "hidden": false,
81
+ "meta": true
82
+ },
83
+ {
84
+ "name": "de0FEHSIoxh",
85
+ "column": "WHOMCH Chronic conditions",
86
+ "valueType": "BOOLEAN",
87
+ "type": "java.lang.Boolean",
88
+ "hidden": false,
89
+ "meta": true
90
+ },
91
+ {
92
+ "name": "sWoqcoByYmD",
93
+ "column": "WHOMCH Smoking",
94
+ "valueType": "BOOLEAN",
95
+ "type": "java.lang.Boolean",
96
+ "hidden": false,
97
+ "meta": true
98
+ }
99
+ ],
100
+ "metaData": {
101
+ "pager": {
102
+ "page": 2,
103
+ "total": 163,
104
+ "pageSize": 4,
105
+ "pageCount": 41
106
+ },
107
+ "items": {
108
+ "ImspTQPwCqd": {
109
+ "name": "Sierra Leone"
110
+ },
111
+ "PFDfvmGpsR3": {
112
+ "name": "Care at birth"
113
+ },
114
+ "bbKtnxRZKEP": {
115
+ "name": "Postpartum care visit"
116
+ },
117
+ "ou": {
118
+ "name": "Organisation unit"
119
+ },
120
+ "PUZaKR0Jh2k": {
121
+ "name": "Previous deliveries"
122
+ },
123
+ "edqlbukwRfQ": {
124
+ "name": "Antenatal care visit"
125
+ },
126
+ "WZbXY0S00lP": {
127
+ "name": "First antenatal care visit"
128
+ },
129
+ "sWoqcoByYmD": {
130
+ "name": "WHOMCH Smoking"
131
+ },
132
+ "WSGAb5XwJ3Y": {
133
+ "name": "WHO RMNCH Tracker"
134
+ },
135
+ "de0FEHSIoxh": {
136
+ "name": "WHOMCH Chronic conditions"
137
+ }
138
+ },
139
+ "dimensions": {
140
+ "pe": [],
141
+ "ou": ["ImspTQPwCqd"],
142
+ "sWoqcoByYmD": [],
143
+ "de0FEHSIoxh": []
144
+ }
145
+ },
146
+ "width": 12,
147
+ "rows": [
148
+ [
149
+ "A0cP533hIQv",
150
+ "to8G9jAprnx",
151
+ "2019-02-02 12:05:00.0",
152
+ "2019-02-02 12:05:00.0",
153
+ "",
154
+ "0.0",
155
+ "0.0",
156
+ "Tonkomba MCHP",
157
+ "OU_193264",
158
+ "xIMxph4NMP1",
159
+ "0",
160
+ "1"
161
+ ],
162
+ [
163
+ "ZqiUn2uXmBi",
164
+ "SJtv0WzoYki",
165
+ "2019-02-02 12:05:00.0",
166
+ "2019-02-02 12:05:00.0",
167
+ "",
168
+ "0.0",
169
+ "0.0",
170
+ "Mawoma MCHP",
171
+ "OU_254973",
172
+ "Srnpwq8jKbp",
173
+ "0",
174
+ "0"
175
+ ],
176
+ [
177
+ "lE747mUAtbz",
178
+ "PGzTv2A1xzn",
179
+ "2019-02-02 12:05:00.0",
180
+ "2019-02-02 12:05:00.0",
181
+ "",
182
+ "0.0",
183
+ "0.0",
184
+ "Kunsho CHP",
185
+ "OU_193254",
186
+ "tdhB1JXYBx2",
187
+ "",
188
+ "0"
189
+ ],
190
+ [
191
+ "nmcqu9QF8ow",
192
+ "pav3tGLjYuq",
193
+ "2019-02-03 12:05:00.0",
194
+ "2019-02-03 12:05:00.0",
195
+ "",
196
+ "0.0",
197
+ "0.0",
198
+ "Korbu MCHP",
199
+ "OU_678893",
200
+ "m73lWmo5BDG",
201
+ "",
202
+ "1"
203
+ ]
204
+ ],
205
+ "height": 4
206
+ }
@@ -0,0 +1,38 @@
1
+ import AnalyticsBase from './AnalyticsBase.js';
2
+ /**
3
+ * @extends module:analytics.AnalyticsBase
4
+ *
5
+ * @description
6
+ * Analytics enrollments class used to request analytics enrollments data from Web API.
7
+ *
8
+ * @memberof module:analytics
9
+ *
10
+ * @see https://docs.dhis2.org/en/develop/using-the-api/dhis-core-version-236/analytics.html#webapi_enrollment_analytics
11
+ */
12
+
13
+ class AnalyticsEnrollments extends AnalyticsBase {
14
+ /**
15
+ * @param {!AnalyticsRequest} req Request object
16
+ *
17
+ * @returns {Promise} Promise that resolves with the analytics query data from the api.
18
+ *
19
+ * @example
20
+ * const req = new analytics.request()
21
+ * .withProgram('eBAyeGv0exc')
22
+ * .addDataDimension(['Uvn6LCg7dVU','OdiHJayrsKo'])
23
+ * .addPeriodDimension('LAST_4_QUARTERS')
24
+ * .addOrgUnitDimension(['lc3eMKXaEfw','PMa2VCrupOd'])
25
+ * .addOrgUnitFilter('O6uvpzGd5pu')
26
+ * .withStartDate('2017-10-01')
27
+ * .withEndDate('2017-10-31');
28
+ *
29
+ * analytics.enrollments.getQuery(req)
30
+ * .then(console.log);
31
+ */
32
+ getQuery(req) {
33
+ return this.fetch(req.withPath('enrollments/query'));
34
+ }
35
+
36
+ }
37
+
38
+ export default AnalyticsEnrollments;
@@ -0,0 +1,40 @@
1
+ import fixtures from '../../../__fixtures__/fixtures.js';
2
+ import DataEngineMock from '../__mocks__/DataEngine.js';
3
+ import AnalyticsEnrollments from '../AnalyticsEnrollments.js';
4
+ import AnalyticsRequest from '../AnalyticsRequest.js';
5
+ describe('analytics.enrollments', () => {
6
+ let enrollments;
7
+ let request;
8
+ let dataEngineMock;
9
+ let fixture;
10
+ beforeEach(() => {
11
+ dataEngineMock = new DataEngineMock();
12
+ DataEngineMock.mockClear();
13
+ enrollments = new AnalyticsEnrollments();
14
+ });
15
+ it('should not be allowed to be called without new', () => {
16
+ expect(() => AnalyticsEnrollments()).toThrowErrorMatchingSnapshot();
17
+ });
18
+ it('should use the dataEngine object when it is passed', () => {
19
+ const dataEngineMockObject = {};
20
+ enrollments = new AnalyticsEnrollments(dataEngineMockObject);
21
+ expect(enrollments.dataEngine).toBe(dataEngineMockObject);
22
+ });
23
+ describe('.getQuery()', () => {
24
+ beforeEach(() => {
25
+ enrollments = new AnalyticsEnrollments(new DataEngineMock());
26
+ request = new AnalyticsRequest().addOrgUnitDimension('ImspTQPwCqd').addDimension('WZbXY0S00lP.de0FEHSIoxh').addDimension('WZbXY0S00lP.sWoqcoByYmD').addPeriodFilter('LAST_MONTH').withProgram('WSGAb5XwJ3Y').withStage('WZbXY0S00lP').withAsc('ENROLLMENTDATE').withOuMode('DESCENDANTS').withColumns('w75KJ2mc4zz').withPage(1).withPageSize(10);
27
+ fixture = fixtures.get('/api/analytics/enrollments');
28
+ dataEngineMock.query.mockReturnValue(Promise.resolve({
29
+ data: fixture
30
+ }));
31
+ });
32
+ it('should be a function', () => {
33
+ expect(enrollments.getQuery).toBeInstanceOf(Function);
34
+ });
35
+ it('should resolve a promise with data', () => enrollments.getQuery(request).then(data => {
36
+ expect(data.width).toEqual(fixture.width);
37
+ expect(data.height).toEqual(fixture.height);
38
+ }));
39
+ });
40
+ });
@@ -0,0 +1,3 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`analytics.enrollments should not be allowed to be called without new 1`] = `"Class constructor AnalyticsEnrollments cannot be invoked without 'new'"`;
@@ -1,4 +1,4 @@
1
- export const supportedFileTypes = ['eventReport', 'visualization', 'map'];
1
+ export const supportedFileTypes = ['eventReport', 'visualization', 'map', 'eventVisualization'];
2
2
  export const endpointFromFileType = fileType => {
3
3
  switch (fileType) {
4
4
  case 'visualization':
@@ -10,7 +10,7 @@ import { FileList } from './FileList.js';
10
10
  import { NameFilter } from './NameFilter.js';
11
11
  import { styles } from './OpenFileDialog.styles.js';
12
12
  import { PaginationControls } from './PaginationControls.js';
13
- import { getTranslatedString, AO_TYPE_VISUALIZATION, AO_TYPE_EVENT_REPORT, AOTypeMap } from './utils.js';
13
+ import { getTranslatedString, AO_TYPE_VISUALIZATION, AO_TYPE_EVENT_REPORT, AO_TYPE_EVENT_VISUALIZATION, AOTypeMap } from './utils.js';
14
14
  import { VisTypeFilter, VIS_TYPE_ALL, VIS_TYPE_CHARTS } from './VisTypeFilter.js';
15
15
 
16
16
  const getQuery = type => ({
@@ -100,7 +100,7 @@ export const OpenFileDialog = ({
100
100
  } // for ER 2.38 only show line list ER types
101
101
 
102
102
 
103
- if (type === AO_TYPE_EVENT_REPORT) {
103
+ if (type === AO_TYPE_EVENT_REPORT || type === AO_TYPE_EVENT_VISUALIZATION) {
104
104
  queryFilters.push('dataType:eq:EVENTS');
105
105
  }
106
106
 
@@ -3,6 +3,7 @@ export const AO_TYPE_VISUALIZATION = 'visualization';
3
3
  export const AO_TYPE_MAP = 'map';
4
4
  export const AO_TYPE_EVENT_CHART = 'eventChart';
5
5
  export const AO_TYPE_EVENT_REPORT = 'eventReport';
6
+ export const AO_TYPE_EVENT_VISUALIZATION = 'eventVisualization';
6
7
  export const AOTypeMap = {
7
8
  [AO_TYPE_VISUALIZATION]: {
8
9
  apiEndpoint: 'visualizations'
@@ -15,6 +16,9 @@ export const AOTypeMap = {
15
16
  },
16
17
  [AO_TYPE_EVENT_REPORT]: {
17
18
  apiEndpoint: 'eventReports'
19
+ },
20
+ [AO_TYPE_EVENT_VISUALIZATION]: {
21
+ apiEndpoint: 'eventVisualizations'
18
22
  }
19
23
  };
20
24
  export const getTranslatedString = (type, key) => {
@@ -70,6 +74,20 @@ export const getTranslatedString = (type, key) => {
70
74
  };
71
75
  break;
72
76
  }
77
+
78
+ case 'eventVisualization':
79
+ {
80
+ texts = {
81
+ modalTitle: i18n.t('Open an event visualization'),
82
+ loadingText: i18n.t('Loading event visualizations'),
83
+ errorTitle: i18n.t("Couldn't load event visualizations"),
84
+ errorText: i18n.t('There was a problem loading event visualizations. Try again or contact your system administrator.'),
85
+ noDataText: i18n.t('No event visualizations found. Click New event visualization to get started.'),
86
+ noFilteredDataText: i18n.t("No event visualizations found. Try adjusting your search or filter options to find what you're looking for."),
87
+ newButtonLabel: i18n.t('New event visualization')
88
+ };
89
+ break;
90
+ }
73
91
  }
74
92
 
75
93
  return texts[key];
@@ -230,14 +230,14 @@
230
230
  "Six-months": "Půlrok",
231
231
  "Financial Years": "Finanční roky",
232
232
  "Years": "Let",
233
- "Translating to": "",
234
- "Choose a locale": "",
235
- "Base locale reference": "",
236
- "Choose a locale to translate from the menu above": "",
237
- "Translate: {{objectName}}": "",
238
- "Save translations": "",
239
- "Could not load translations": "",
240
- "Retry": "",
233
+ "Translating to": "Překlad do",
234
+ "Choose a locale": "Vyberte národní prostředí",
235
+ "Base locale reference": "Odkaz na základní národní prostředí",
236
+ "Choose a locale to translate from the menu above": "Z nabídky výše vyberte národní prostředí, které chcete přeložit",
237
+ "Translate: {{objectName}}": "Přeložit: {{objectName}}",
238
+ "Save translations": "Uložit překlady",
239
+ "Could not load translations": "Nelze načíst překlady",
240
+ "Retry": "Opakovat",
241
241
  "Series": "Série",
242
242
  "Category": "Kategorie",
243
243
  "Filter": "Filtr",
@@ -115,6 +115,13 @@
115
115
  "No event reports found. Click New event report to get started.": "No event reports found. Click New event report to get started.",
116
116
  "No event reports found. Try adjusting your search or filter options to find what you're looking for.": "No event reports found. Try adjusting your search or filter options to find what you're looking for.",
117
117
  "New event report": "New event report",
118
+ "Open an event visualization": "Open an event visualization",
119
+ "Loading event visualizations": "Loading event visualizations",
120
+ "Couldn't load event visualizations": "Couldn't load event visualizations",
121
+ "There was a problem loading event visualizations. Try again or contact your system administrator.": "There was a problem loading event visualizations. Try again or contact your system administrator.",
122
+ "No event visualizations found. Click New event visualization to get started.": "No event visualizations found. Click New event visualization to get started.",
123
+ "No event visualizations found. Try adjusting your search or filter options to find what you're looking for.": "No event visualizations found. Try adjusting your search or filter options to find what you're looking for.",
124
+ "New event visualization": "New event visualization",
118
125
  "Options": "Options",
119
126
  "Hide": "Hide",
120
127
  "Update": "Update",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dhis2/analytics",
3
- "version": "21.2.5",
3
+ "version": "21.4.0",
4
4
  "main": "./build/cjs/index.js",
5
5
  "module": "./build/es/index.js",
6
6
  "exports": {