@dhis2/analytics 999.9.9-TE-alpha.3 → 999.9.9-outlier-table.alpha.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 (109) hide show
  1. package/build/cjs/__fixtures__/fixtures.js +1 -0
  2. package/build/cjs/__fixtures__/json/api/analytics/outlierDetection.json +213 -0
  3. package/build/cjs/api/analytics/Analytics.js +0 -7
  4. package/build/cjs/api/analytics/AnalyticsAggregate.js +27 -1
  5. package/build/cjs/api/analytics/AnalyticsBase.js +14 -31
  6. package/build/cjs/api/analytics/AnalyticsRequest.js +10 -33
  7. package/build/cjs/api/analytics/AnalyticsRequestBase.js +10 -8
  8. package/build/cjs/api/analytics/AnalyticsRequestPropertiesMixin.js +0 -19
  9. package/build/cjs/api/analytics/AnalyticsResponse.js +42 -39
  10. package/build/cjs/api/analytics/__tests__/Analytics.spec.js +5 -0
  11. package/build/cjs/api/analytics/__tests__/AnalyticsAggregate.spec.js +29 -0
  12. package/build/cjs/api/analytics/__tests__/AnalyticsBase.spec.js +36 -2
  13. package/build/cjs/api/analytics/__tests__/AnalyticsTrackedEntities.spec.js +44 -0
  14. package/build/cjs/api/analytics/__tests__/__snapshots__/AnalyticsTrackedEntities.spec.js.snap +3 -0
  15. package/build/cjs/api/analytics/utils.js +2 -23
  16. package/build/cjs/components/DataDimension/DataDimension.js +31 -7
  17. package/build/cjs/components/DataDimension/DataTypeSelector.js +17 -8
  18. package/build/cjs/components/DataDimension/GroupSelector.js +7 -7
  19. package/build/cjs/components/DataDimension/ItemSelector.js +74 -56
  20. package/build/cjs/components/PeriodDimension/PeriodDimension.js +5 -2
  21. package/build/cjs/components/PeriodDimension/PeriodTransfer.js +57 -28
  22. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +1 -1
  23. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +1 -12
  24. package/build/cjs/components/RichText/Editor.bk/Editor.js +40 -0
  25. package/build/cjs/components/RichText/Editor.bk/__tests__/Editor.spec.js +29 -0
  26. package/build/cjs/components/RichText/Editor.bk/__tests__/convertCtrlKey.spec.js +205 -0
  27. package/build/cjs/components/RichText/Editor.bk/convertCtrlKey.js +87 -0
  28. package/build/cjs/components/RichText/Parser.bk/MdParser.js +107 -0
  29. package/build/cjs/components/RichText/Parser.bk/Parser.js +34 -0
  30. package/build/cjs/components/RichText/Parser.bk/__tests__/MdParser.spec.js +34 -0
  31. package/build/cjs/components/RichText/Parser.bk/__tests__/Parser.spec.js +41 -0
  32. package/build/cjs/components/VisTypeIcon.js +6 -1
  33. package/build/cjs/index.js +43 -1
  34. package/build/cjs/locales/en/translations.json +5 -1
  35. package/build/cjs/modules/__tests__/getAdaptedUiLayoutByType.spec.js +14 -0
  36. package/build/cjs/modules/axis.js +4 -0
  37. package/build/cjs/modules/getAdaptedUiLayoutByType.js +9 -0
  38. package/build/cjs/modules/layout/axisGetDimensionIds.js +1 -1
  39. package/build/cjs/modules/layout/dimension.js +2 -9
  40. package/build/cjs/modules/layout/dimensionCreate.js +0 -3
  41. package/build/cjs/modules/layout/dimensionGetId.js +3 -9
  42. package/build/cjs/modules/layout/layoutFilterDimensions.js +1 -1
  43. package/build/cjs/modules/layout/layoutGetAxisIdDimensionIdsObject.js +1 -1
  44. package/build/cjs/modules/layout/layoutGetDimensionIdItemIdsObject.js +1 -1
  45. package/build/cjs/modules/layout/layoutHasDynamicDimension.js +1 -1
  46. package/build/cjs/modules/layoutTypes.js +4 -2
  47. package/build/cjs/modules/layoutUiRules/__tests__/rules.spec.js +11 -0
  48. package/build/cjs/modules/layoutUiRules/index.js +12 -0
  49. package/build/cjs/modules/layoutUiRules/rules.js +22 -2
  50. package/build/cjs/modules/layoutUiRules/rulesHelper.js +4 -2
  51. package/build/cjs/modules/layoutUiRules/rulesUtils.js +6 -1
  52. package/build/cjs/modules/visTypeToLayoutType.js +2 -1
  53. package/build/cjs/modules/visTypes.js +9 -3
  54. package/build/es/__fixtures__/fixtures.js +1 -0
  55. package/build/es/__fixtures__/json/api/analytics/outlierDetection.json +213 -0
  56. package/build/es/api/analytics/Analytics.js +0 -7
  57. package/build/es/api/analytics/AnalyticsAggregate.js +27 -1
  58. package/build/es/api/analytics/AnalyticsBase.js +13 -31
  59. package/build/es/api/analytics/AnalyticsRequest.js +10 -33
  60. package/build/es/api/analytics/AnalyticsRequestBase.js +10 -8
  61. package/build/es/api/analytics/AnalyticsRequestPropertiesMixin.js +0 -19
  62. package/build/es/api/analytics/AnalyticsResponse.js +42 -39
  63. package/build/es/api/analytics/__tests__/Analytics.spec.js +5 -0
  64. package/build/es/api/analytics/__tests__/AnalyticsAggregate.spec.js +29 -0
  65. package/build/es/api/analytics/__tests__/AnalyticsBase.spec.js +34 -1
  66. package/build/es/api/analytics/__tests__/AnalyticsTrackedEntities.spec.js +41 -0
  67. package/build/es/api/analytics/__tests__/__snapshots__/AnalyticsTrackedEntities.spec.js.snap +3 -0
  68. package/build/es/api/analytics/utils.js +1 -20
  69. package/build/es/components/DataDimension/DataDimension.js +27 -6
  70. package/build/es/components/DataDimension/DataTypeSelector.js +18 -9
  71. package/build/es/components/DataDimension/GroupSelector.js +7 -7
  72. package/build/es/components/DataDimension/ItemSelector.js +75 -57
  73. package/build/es/components/PeriodDimension/PeriodDimension.js +5 -2
  74. package/build/es/components/PeriodDimension/PeriodTransfer.js +58 -29
  75. package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +1 -1
  76. package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +1 -12
  77. package/build/es/components/RichText/Editor.bk/Editor.js +30 -0
  78. package/build/es/components/RichText/Editor.bk/__tests__/Editor.spec.js +26 -0
  79. package/build/es/components/RichText/Editor.bk/__tests__/convertCtrlKey.spec.js +202 -0
  80. package/build/es/components/RichText/Editor.bk/convertCtrlKey.js +80 -0
  81. package/build/es/components/RichText/Parser.bk/MdParser.js +99 -0
  82. package/build/es/components/RichText/Parser.bk/Parser.js +24 -0
  83. package/build/es/components/RichText/Parser.bk/__tests__/MdParser.spec.js +31 -0
  84. package/build/es/components/RichText/Parser.bk/__tests__/Parser.spec.js +38 -0
  85. package/build/es/components/VisTypeIcon.js +8 -3
  86. package/build/es/index.js +4 -4
  87. package/build/es/locales/en/translations.json +5 -1
  88. package/build/es/modules/__tests__/getAdaptedUiLayoutByType.spec.js +15 -1
  89. package/build/es/modules/axis.js +5 -1
  90. package/build/es/modules/getAdaptedUiLayoutByType.js +10 -1
  91. package/build/es/modules/layout/axisGetDimensionIds.js +1 -1
  92. package/build/es/modules/layout/dimension.js +1 -7
  93. package/build/es/modules/layout/dimensionCreate.js +1 -4
  94. package/build/es/modules/layout/dimensionGetId.js +4 -10
  95. package/build/es/modules/layout/layoutFilterDimensions.js +1 -1
  96. package/build/es/modules/layout/layoutGetAxisIdDimensionIdsObject.js +1 -1
  97. package/build/es/modules/layout/layoutGetDimensionIdItemIdsObject.js +1 -1
  98. package/build/es/modules/layout/layoutHasDynamicDimension.js +1 -1
  99. package/build/es/modules/layoutTypes.js +2 -1
  100. package/build/es/modules/layoutUiRules/__tests__/rules.spec.js +11 -0
  101. package/build/es/modules/layoutUiRules/index.js +2 -2
  102. package/build/es/modules/layoutUiRules/rules.js +22 -3
  103. package/build/es/modules/layoutUiRules/rulesHelper.js +3 -2
  104. package/build/es/modules/layoutUiRules/rulesUtils.js +5 -1
  105. package/build/es/modules/visTypeToLayoutType.js +4 -3
  106. package/build/es/modules/visTypes.js +7 -3
  107. package/package.json +6 -3
  108. package/build/cjs/api/analytics/AnalyticsTrackedEntities.js +0 -31
  109. package/build/es/api/analytics/AnalyticsTrackedEntities.js +0 -24
@@ -93,6 +93,7 @@ var _default = function x() {
93
93
  addFixture('/api/analytics/cluster', require('./json/api/analytics/cluster.json'));
94
94
  addFixture('/api/analytics/response', require('./json/api/analytics/response.json'));
95
95
  addFixture('/api/analytics/enrollments', require('./json/api/analytics/enrollments.json'));
96
+ addFixture('/api/analytics/outlierDetection', require('./json/api/analytics/outlierDetection.json'));
96
97
  return {
97
98
  get: getFixture,
98
99
  add: addFixture
@@ -0,0 +1,213 @@
1
+ {
2
+ "headers": [
3
+ {
4
+ "name": "dxname",
5
+ "column": "Data name",
6
+ "valueType": "TEXT",
7
+ "type": "java.lang.String",
8
+ "hidden": false,
9
+ "meta": false
10
+ },
11
+ {
12
+ "name": "ouname",
13
+ "column": "Organisation unit name",
14
+ "valueType": "TEXT",
15
+ "type": "java.lang.String",
16
+ "hidden": false,
17
+ "meta": false
18
+ },
19
+ {
20
+ "name": "value",
21
+ "column": "Value",
22
+ "valueType": "NUMBER",
23
+ "type": "java.lang.Double",
24
+ "hidden": false,
25
+ "meta": false
26
+ },
27
+ {
28
+ "name": "absdev",
29
+ "column": "Absolute deviation",
30
+ "valueType": "NUMBER",
31
+ "type": "java.lang.Double",
32
+ "hidden": false,
33
+ "meta": false
34
+ },
35
+ {
36
+ "name": "modifiedzscore",
37
+ "column": "Modified zScore",
38
+ "valueType": "NUMBER",
39
+ "type": "java.lang.Double",
40
+ "hidden": false,
41
+ "meta": false
42
+ },
43
+ {
44
+ "name": "median",
45
+ "column": "Median",
46
+ "valueType": "NUMBER",
47
+ "type": "java.lang.Double",
48
+ "hidden": false,
49
+ "meta": false
50
+ },
51
+ {
52
+ "name": "lowerbound",
53
+ "column": "Lower boundary",
54
+ "valueType": "NUMBER",
55
+ "type": "java.lang.Double",
56
+ "hidden": false,
57
+ "meta": false
58
+ },
59
+ {
60
+ "name": "upperbound",
61
+ "column": "Upper boundary",
62
+ "valueType": "NUMBER",
63
+ "type": "java.lang.Double",
64
+ "hidden": false,
65
+ "meta": false
66
+ }
67
+ ],
68
+ "metaData": {
69
+ "maxResults": 100,
70
+ "count": 13,
71
+ "orderBy": "mean_abs_dev",
72
+ "threshold": 3.0,
73
+ "algorithm": "MOD_Z_SCORE"
74
+ },
75
+ "rowContext": {
76
+
77
+ },
78
+ "rows": [
79
+ [
80
+ "ANC 2nd visit",
81
+ "UMC (Urban Centre) Hospital",
82
+ "1669.0",
83
+ "920.0",
84
+ "3.902767295597484",
85
+ "749.0",
86
+ "-290.93013894085743",
87
+ "1788.9301389408574"
88
+ ],
89
+ [
90
+ "ANC 1st visit",
91
+ "Charlotte CHP",
92
+ "49.0",
93
+ "39.0",
94
+ "7.515857142857143",
95
+ "10.0",
96
+ "-23.948490393535913",
97
+ "43.94849039353591"
98
+ ],
99
+ [
100
+ "ANC 2nd visit",
101
+ "Charlotte CHP",
102
+ "40.0",
103
+ "33.0",
104
+ "22.258499999999998",
105
+ "7.0",
106
+ "-30.86489139031037",
107
+ "44.86489139031037"
108
+ ],
109
+ [
110
+ "ANC 2nd visit",
111
+ "Wilberforce CHC",
112
+ "56.0",
113
+ "24.5",
114
+ "3.004590909090909",
115
+ "31.5",
116
+ "-1.3890179239210454",
117
+ "64.38901792392105"
118
+ ],
119
+ [
120
+ "ANC 1st visit",
121
+ "Deep Eye water MCHP",
122
+ "40.0",
123
+ "16.0",
124
+ "3.5973333333333333",
125
+ "24.0",
126
+ "4.850913859925324",
127
+ "43.14908614007467"
128
+ ],
129
+ [
130
+ "ANC 2nd visit",
131
+ "Lion for Lion Clinic",
132
+ "30.0",
133
+ "16.0",
134
+ "3.5973333333333333",
135
+ "14.0",
136
+ "-5.620896815302167",
137
+ "33.62089681530217"
138
+ ],
139
+ [
140
+ "ANC 2nd visit",
141
+ "Deep Eye water MCHP",
142
+ "33.0",
143
+ "14.5",
144
+ "3.9121",
145
+ "18.5",
146
+ "-3.4245866551686603",
147
+ "40.42458665516866"
148
+ ],
149
+ [
150
+ "ANC 2nd visit",
151
+ "Blessed Mokaka East Clinic",
152
+ "2.0",
153
+ "13.0",
154
+ "4.38425",
155
+ "15.0",
156
+ "-3.417043736713012",
157
+ "33.41704373671301"
158
+ ],
159
+ [
160
+ "ANC 2nd visit",
161
+ "Malambay CHP",
162
+ "15.0",
163
+ "12.0",
164
+ "5.396",
165
+ "3.0",
166
+ "-13.770509831248425",
167
+ "19.770509831248425"
168
+ ],
169
+ [
170
+ "ANC 2nd visit",
171
+ "Wellbody MCHP",
172
+ "20.0",
173
+ "10.0",
174
+ "3.3725",
175
+ "10.0",
176
+ "-10.999999999999996",
177
+ "30.999999999999996"
178
+ ],
179
+ [
180
+ "ANC 1st visit",
181
+ "Blessed Mokaka East Clinic",
182
+ "26.0",
183
+ "10.0",
184
+ "4.496666666666667",
185
+ "16.0",
186
+ "1.6734512181055958",
187
+ "30.326548781894402"
188
+ ],
189
+ [
190
+ "ANC 1st visit",
191
+ "Murray Town CHC",
192
+ "18.0",
193
+ "9.0",
194
+ "6.0705",
195
+ "9.0",
196
+ "-2.43571205496543",
197
+ "20.43571205496543"
198
+ ],
199
+ [
200
+ "ANC 2nd visit",
201
+ "Thompson Bay MCHP",
202
+ "11.0",
203
+ "6.0",
204
+ "4.047",
205
+ "5.0",
206
+ "-2.038266127580332",
207
+ "12.038266127580332"
208
+ ]
209
+ ],
210
+ "headerWidth": 8,
211
+ "width": 8,
212
+ "height": 13
213
+ }
@@ -9,7 +9,6 @@ var _AnalyticsEnrollments = _interopRequireDefault(require("./AnalyticsEnrollmen
9
9
  var _AnalyticsEvents = _interopRequireDefault(require("./AnalyticsEvents.js"));
10
10
  var _AnalyticsRequest = _interopRequireDefault(require("./AnalyticsRequest.js"));
11
11
  var _AnalyticsResponse = _interopRequireDefault(require("./AnalyticsResponse.js"));
12
- var _AnalyticsTrackedEntities = _interopRequireDefault(require("./AnalyticsTrackedEntities.js"));
13
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
13
  /**
15
14
  * @module analytics
@@ -20,8 +19,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
20
19
  * Analytics class used to request analytics data from Web API.
21
20
  *
22
21
  * @requires analytics.AnalyticsAggregate
23
- * @requires analytics.AnalyticsTrackedEntities
24
- * @requires analytics.AnalyticsEnrollments
25
22
  * @requires analytics.AnalyticsEvents
26
23
  * @requires analytics.AnalyticsRequest
27
24
  * @requires analytics.AnalyticsResponse
@@ -41,7 +38,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
41
38
  class Analytics {
42
39
  /**
43
40
  * @param {!module:analytics.AnalyticsAggregate} analyticsAggregate The AnalyticsAggregate instance
44
- * @param {!module:analytics.AnalyticsTrackedEntities} analyticsTrackedEntities The AnalyticsTrackedEntities instance
45
41
  * @param {!module:analytics.AnalyticsEnrollments} analyticsEnrollments The AnalyticsEnrollments instance
46
42
  * @param {!module:analytics.AnalyticsEvents} analyticsEvents The AnalyticsEvents instance
47
43
  * @param {!module:analytics.AnalyticsRequest} analyticsRequest The AnalyticsRequest class
@@ -50,14 +46,12 @@ class Analytics {
50
46
  constructor(_ref) {
51
47
  let {
52
48
  aggregate,
53
- trackedEntities,
54
49
  enrollments,
55
50
  events,
56
51
  request,
57
52
  response
58
53
  } = _ref;
59
54
  this.aggregate = aggregate;
60
- this.trackedEntities = trackedEntities;
61
55
  this.enrollments = enrollments;
62
56
  this.events = events;
63
57
  this.request = request;
@@ -80,7 +74,6 @@ class Analytics {
80
74
  if (!Analytics.getAnalytics.analytics) {
81
75
  Analytics.getAnalytics.analytics = new Analytics({
82
76
  aggregate: new _AnalyticsAggregate.default(dataEngine),
83
- trackedEntities: new _AnalyticsTrackedEntities.default(dataEngine),
84
77
  enrollments: new _AnalyticsEnrollments.default(dataEngine),
85
78
  events: new _AnalyticsEvents.default(dataEngine),
86
79
  request: _AnalyticsRequest.default,
@@ -74,12 +74,38 @@ class AnalyticsAggregate extends _AnalyticsBase.default {
74
74
  * .withStartDate('2017-10-01')
75
75
  * .withEndDate('2017-10-31');
76
76
  *
77
- * analytics.aggregate.getDebugSql(req);
77
+ * analytics.aggregate.getDebugSql(req)
78
78
  * .then(console.log);
79
79
  */
80
80
  getDebugSql(req) {
81
81
  return this.fetch(req.withPath('debug/sql'));
82
82
  }
83
+
84
+ /**
85
+ * @param {!AnalyticsRequest} req Request object
86
+ *
87
+ * @returns {Promise} Promise that resolves with the SQL statement used to query the database.
88
+ *
89
+ * @example
90
+ * const req = new analytics.request()
91
+ * .withParameters({
92
+ * dx: 'fbfJHSPpUQD,cYeuwXTCPkU',
93
+ * pe: 'THIS_YEAR',
94
+ * ou: 'USER_ORGUNIT,USER_ORGUNIT_CHILDREN',
95
+ * headers: 'dxname,pename,ouname,value,absdev,modifiedzscore,median,lowerbound,upperbound',
96
+ * algorithm: 'MODIFIED_Z_SCORE',
97
+ * maxResults: 100,
98
+ * threshold: 3,
99
+ orderBy: 'value',
100
+ sortOrder: 'desc',
101
+ * });
102
+ *
103
+ * analytics.aggregate.getOutliersData(req)
104
+ * .then(console.log);
105
+ */
106
+ getOutliersData(req) {
107
+ return this.fetch(req.withPath('outlierDetection'));
108
+ }
83
109
  }
84
110
  var _default = AnalyticsAggregate;
85
111
  exports.default = _default;
@@ -3,24 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.generateDimensionStrings = exports.default = void 0;
7
7
  var _sortBy = _interopRequireDefault(require("lodash/sortBy"));
8
8
  var _AnalyticsRequest = _interopRequireDefault(require("./AnalyticsRequest.js"));
9
- var _utils = require("./utils.js");
10
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
10
  const analyticsQuery = {
12
11
  resource: 'analytics',
13
12
  id: _ref => {
14
13
  let {
15
14
  path,
16
- program,
17
- trackedEntityType
15
+ program
18
16
  } = _ref;
19
- return (0, _utils.formatRequestPath)({
20
- path,
21
- program,
22
- trackedEntityType
23
- });
17
+ return [path, program].filter(Boolean).join('/');
24
18
  },
25
19
  params: _ref2 => {
26
20
  let {
@@ -29,8 +23,8 @@ const analyticsQuery = {
29
23
  parameters
30
24
  } = _ref2;
31
25
  return {
32
- dimension: dimensions,
33
- filter: filters,
26
+ dimension: dimensions.length ? dimensions : undefined,
27
+ filter: filters.length ? filters : undefined,
34
28
  ...parameters
35
29
  };
36
30
  }
@@ -40,14 +34,9 @@ const analyticsDataQuery = {
40
34
  id: _ref3 => {
41
35
  let {
42
36
  path,
43
- program,
44
- trackedEntityType
37
+ program
45
38
  } = _ref3;
46
- return (0, _utils.formatRequestPath)({
47
- path,
48
- program,
49
- trackedEntityType
50
- });
39
+ return [path, program].filter(Boolean).join('/');
51
40
  },
52
41
  params: _ref4 => {
53
42
  let {
@@ -56,8 +45,8 @@ const analyticsDataQuery = {
56
45
  parameters
57
46
  } = _ref4;
58
47
  return {
59
- dimension: dimensions,
60
- filter: filters,
48
+ dimension: dimensions.length ? dimensions : undefined,
49
+ filter: filters.length ? filters : undefined,
61
50
  ...parameters,
62
51
  skipMeta: true,
63
52
  skipData: false
@@ -69,14 +58,9 @@ const analyticsMetaDataQuery = {
69
58
  id: _ref5 => {
70
59
  let {
71
60
  path,
72
- program,
73
- trackedEntityType
61
+ program
74
62
  } = _ref5;
75
- return (0, _utils.formatRequestPath)({
76
- path,
77
- program,
78
- trackedEntityType
79
- });
63
+ return [path, program].filter(Boolean).join('/');
80
64
  },
81
65
  params: _ref6 => {
82
66
  let {
@@ -85,8 +69,8 @@ const analyticsMetaDataQuery = {
85
69
  parameters
86
70
  } = _ref6;
87
71
  return {
88
- dimension: dimensions,
89
- filter: filters,
72
+ dimension: dimensions.length ? dimensions : undefined,
73
+ filter: filters.length ? filters : undefined,
90
74
  ...parameters,
91
75
  skipMeta: false,
92
76
  skipData: true,
@@ -126,6 +110,7 @@ const generateDimensionStrings = function () {
126
110
  * @memberof module:analytics
127
111
  * @abstract
128
112
  */
113
+ exports.generateDimensionStrings = generateDimensionStrings;
129
114
  class AnalyticsBase {
130
115
  constructor(dataEngine) {
131
116
  this.dataEngine = dataEngine;
@@ -168,7 +153,6 @@ class AnalyticsBase {
168
153
  variables: {
169
154
  path: req.path,
170
155
  program: req.program,
171
- trackedEntityType: req.trackedEntityType,
172
156
  dimensions: generateDimensionStrings(req.dimensions),
173
157
  filters: generateDimensionStrings(req.filters),
174
158
  parameters: req.parameters,
@@ -211,7 +195,6 @@ class AnalyticsBase {
211
195
  variables: {
212
196
  path: req.path,
213
197
  program: req.program,
214
- trackedEntityType: req.trackedEntityType,
215
198
  dimensions: generateDimensionStrings(req.dimensions, options),
216
199
  filters: generateDimensionStrings(req.filters, options),
217
200
  parameters: req.parameters
@@ -10,7 +10,6 @@ var _AnalyticsRequestBase = _interopRequireDefault(require("./AnalyticsRequestBa
10
10
  var _AnalyticsRequestDimensionsMixin = _interopRequireDefault(require("./AnalyticsRequestDimensionsMixin.js"));
11
11
  var _AnalyticsRequestFiltersMixin = _interopRequireDefault(require("./AnalyticsRequestFiltersMixin.js"));
12
12
  var _AnalyticsRequestPropertiesMixin = _interopRequireDefault(require("./AnalyticsRequestPropertiesMixin.js"));
13
- var _utils = require("./utils.js");
14
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
14
  /**
16
15
  * @description
@@ -48,7 +47,6 @@ class AnalyticsRequest extends (0, _AnalyticsRequestDimensionsMixin.default)((0,
48
47
  fromVisualization(visualization) {
49
48
  let passFilterAsDimension = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
50
49
  let request = this;
51
- const outputType = visualization.outputType;
52
50
 
53
51
  // extract dimensions from visualization
54
52
  const columns = visualization.columns || [];
@@ -59,28 +57,19 @@ class AnalyticsRequest extends (0, _AnalyticsRequestDimensionsMixin.default)((0,
59
57
  if ((_d$legendSet = d.legendSet) !== null && _d$legendSet !== void 0 && _d$legendSet.id) {
60
58
  dimension += `-${d.legendSet.id}`;
61
59
  }
60
+ if ((_d$programStage = d.programStage) !== null && _d$programStage !== void 0 && _d$programStage.id) {
61
+ dimension = `${d.programStage.id}.${dimension}`;
62
+ }
62
63
  if (d.filter) {
63
64
  dimension += `:${d.filter}`;
64
65
  }
65
- const programStageId = (_d$programStage = d.programStage) === null || _d$programStage === void 0 ? void 0 : _d$programStage.id;
66
66
  if ((_d$repetition = d.repetition) !== null && _d$repetition !== void 0 && (_d$repetition$indexes = _d$repetition.indexes) !== null && _d$repetition$indexes !== void 0 && _d$repetition$indexes.length) {
67
67
  d.repetition.indexes.forEach(index => {
68
- var _d$program;
69
- request = request.addDimension((0, _utils.formatDimension)({
70
- programId: (_d$program = d.program) === null || _d$program === void 0 ? void 0 : _d$program.id,
71
- programStageId: `${programStageId}[${index}]`,
72
- dimension,
73
- outputType
74
- }));
68
+ request = request.addDimension(dimension.replace(/\./, `[${index}].`));
75
69
  });
76
70
  } else {
77
- var _d$program2, _d$items;
78
- request = request.addDimension((0, _utils.formatDimension)({
79
- programId: (_d$program2 = d.program) === null || _d$program2 === void 0 ? void 0 : _d$program2.id,
80
- programStageId,
81
- dimension,
82
- outputType
83
- }), (_d$items = d.items) === null || _d$items === void 0 ? void 0 : _d$items.map(item => item.id));
71
+ var _d$items;
72
+ request = request.addDimension(dimension, (_d$items = d.items) === null || _d$items === void 0 ? void 0 : _d$items.map(item => item.id));
84
73
  }
85
74
  });
86
75
 
@@ -95,29 +84,17 @@ class AnalyticsRequest extends (0, _AnalyticsRequestDimensionsMixin.default)((0,
95
84
  request = request.addDimension(f.dimension, (_f$items = f.items) === null || _f$items === void 0 ? void 0 : _f$items.map(item => item.id));
96
85
  } else {
97
86
  var _f$programStage, _f$repetition, _f$repetition$indexes;
98
- let filterString = f.dimension;
87
+ let filterString = (_f$programStage = f.programStage) !== null && _f$programStage !== void 0 && _f$programStage.id ? `${f.programStage.id}.${f.dimension}` : f.dimension;
99
88
  if (f.filter) {
100
89
  filterString += `:${f.filter}`;
101
90
  }
102
- const programStageId = (_f$programStage = f.programStage) === null || _f$programStage === void 0 ? void 0 : _f$programStage.id;
103
91
  if ((_f$repetition = f.repetition) !== null && _f$repetition !== void 0 && (_f$repetition$indexes = _f$repetition.indexes) !== null && _f$repetition$indexes !== void 0 && _f$repetition$indexes.length) {
104
92
  f.repetition.indexes.forEach(index => {
105
- var _f$program;
106
- request = request.addFilter((0, _utils.formatDimension)({
107
- programId: (_f$program = f.program) === null || _f$program === void 0 ? void 0 : _f$program.id,
108
- programStageId: `${programStageId}[${index}]`,
109
- dimension: filterString,
110
- outputType
111
- }));
93
+ request = request.addFilter(filterString.replace(/\./, `[${index}].`));
112
94
  });
113
95
  } else {
114
- var _f$program2, _f$items2;
115
- request = request.addFilter((0, _utils.formatDimension)({
116
- programId: (_f$program2 = f.program) === null || _f$program2 === void 0 ? void 0 : _f$program2.id,
117
- programStageId,
118
- dimension: filterString,
119
- outputType
120
- }), (_f$items2 = f.items) === null || _f$items2 === void 0 ? void 0 : _f$items2.map(item => item.id));
96
+ var _f$items2;
97
+ request = request.addFilter(filterString, (_f$items2 = f.items) === null || _f$items2 === void 0 ? void 0 : _f$items2.map(item => item.id));
121
98
  }
122
99
  }
123
100
  });
@@ -24,7 +24,6 @@ class AnalyticsRequestBase {
24
24
  format = 'json',
25
25
  path,
26
26
  program,
27
- trackedEntityType,
28
27
  dimensions = [],
29
28
  filters = [],
30
29
  parameters = {}
@@ -33,7 +32,6 @@ class AnalyticsRequestBase {
33
32
  this.format = format.toLowerCase();
34
33
  this.path = path;
35
34
  this.program = program;
36
- this.trackedEntityType = trackedEntityType;
37
35
  this.dimensions = dimensions;
38
36
  this.filters = filters;
39
37
  this.parameters = {
@@ -55,7 +53,7 @@ class AnalyticsRequestBase {
55
53
  buildUrl(options) {
56
54
  // at least 1 dimension is required
57
55
  let dimensions = this.dimensions;
58
- if (options && options.sorted) {
56
+ if (dimensions.length && options !== null && options !== void 0 && options.sorted) {
59
57
  dimensions = (0, _sortBy.default)(dimensions, 'dimension');
60
58
  }
61
59
  const encodedDimensions = dimensions.map(_ref => {
@@ -65,15 +63,19 @@ class AnalyticsRequestBase {
65
63
  } = _ref;
66
64
  if (Array.isArray(items) && items.length) {
67
65
  const encodedItems = items.map(_utils.customEncodeURIComponent);
68
- if (options && options.sorted) {
66
+ if (options !== null && options !== void 0 && options.sorted) {
69
67
  encodedItems.sort();
70
68
  }
71
69
  return `${dimension}:${encodedItems.join(';')}`;
72
70
  }
73
71
  return dimension;
74
72
  });
75
- const endPoint = [this.endPoint, this.path, this.program, this.trackedEntityType].filter(Boolean).join('/');
76
- return `${endPoint}.${this.format}?dimension=${encodedDimensions.join('&dimension=')}`;
73
+ const endPoint = [this.endPoint, this.path, this.program].filter(e => !!e).join('/');
74
+ let url = `${endPoint}.${this.format}`;
75
+ if (encodedDimensions.length) {
76
+ url += `?dimension=${encodedDimensions.join('&dimension=')}`;
77
+ }
78
+ return url;
77
79
  }
78
80
 
79
81
  /**
@@ -91,7 +93,7 @@ class AnalyticsRequestBase {
91
93
  */
92
94
  buildQuery(options) {
93
95
  let filters = this.filters;
94
- if (options && options.sorted) {
96
+ if (filters.length && options !== null && options !== void 0 && options.sorted) {
95
97
  filters = (0, _sortBy.default)(filters, 'dimension');
96
98
  }
97
99
  const encodedFilters = filters.map(_ref2 => {
@@ -101,7 +103,7 @@ class AnalyticsRequestBase {
101
103
  } = _ref2;
102
104
  if (Array.isArray(items) && items.length) {
103
105
  const encodedItems = items.map(_utils.customEncodeURIComponent);
104
- if (options && options.sorted) {
106
+ if (options !== null && options !== void 0 && options.sorted) {
105
107
  encodedItems.sort();
106
108
  }
107
109
  return `${dimension}:${encodedItems.join(';')}`;
@@ -497,25 +497,6 @@ class extends base {
497
497
  return new _AnalyticsRequest.default(this);
498
498
  }
499
499
 
500
- /**
501
- * Sets the tracked entity type for the request.
502
- * It appends the tracked entity type id to the request's path.
503
- *
504
- * @param {!String} trackedEntityType The tracked entity type id
505
- *
506
- * @returns {AnalyticsRequest} A new instance of the class for chaining purposes
507
- *
508
- * @example
509
- * const req = new analytics.request()
510
- * .withTrackedEntityType('nEenWmSyUEp');
511
- */
512
- withTrackedEntityType(trackedEntityType) {
513
- if (trackedEntityType) {
514
- this.trackedEntityType = trackedEntityType;
515
- }
516
- return new _AnalyticsRequest.default(this);
517
- }
518
-
519
500
  /**
520
501
  * Sets the program for the request.
521
502
  * It appends the program id to the request's path.