@dhis2/analytics 26.3.0-alpha.3 → 999.9.9-TE-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.
- package/build/cjs/__demo__/DimensionsPanel.stories.js +0 -1
- package/build/cjs/api/analytics/Analytics.js +7 -0
- package/build/cjs/api/analytics/AnalyticsBase.js +24 -6
- package/build/cjs/api/analytics/AnalyticsRequest.js +33 -10
- package/build/cjs/api/analytics/AnalyticsRequestBase.js +3 -1
- package/build/cjs/api/analytics/AnalyticsRequestPropertiesMixin.js +19 -0
- package/build/cjs/api/analytics/AnalyticsTrackedEntities.js +31 -0
- package/build/cjs/api/analytics/utils.js +23 -2
- package/build/cjs/assets/DynamicDimensionIcon.js +38 -12
- package/build/cjs/components/DimensionsPanel/List/DimensionItem.js +32 -44
- package/build/cjs/components/DimensionsPanel/List/OptionsButton.js +6 -7
- package/build/cjs/components/DimensionsPanel/List/RecommendedIcon.js +2 -1
- package/build/cjs/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +361 -238
- package/build/cjs/components/DimensionsPanel/List/styles/DimensionItem.style.js +67 -5
- package/build/cjs/components/DimensionsPanel/List/styles/DimensionList.style.js +2 -2
- package/build/cjs/components/DimensionsPanel/List/styles/RecommendedIcon.style.js +4 -4
- package/build/cjs/components/DimensionsPanel/styles/DimensionsPanel.style.js +1 -1
- package/build/cjs/locales/lo/translations.json +8 -3
- package/build/cjs/modules/layout/dimension.js +9 -2
- package/build/cjs/modules/layout/dimensionCreate.js +3 -0
- package/build/es/__demo__/DimensionsPanel.stories.js +0 -1
- package/build/es/api/analytics/Analytics.js +7 -0
- package/build/es/api/analytics/AnalyticsBase.js +24 -6
- package/build/es/api/analytics/AnalyticsRequest.js +33 -10
- package/build/es/api/analytics/AnalyticsRequestBase.js +3 -1
- package/build/es/api/analytics/AnalyticsRequestPropertiesMixin.js +19 -0
- package/build/es/api/analytics/AnalyticsTrackedEntities.js +24 -0
- package/build/es/api/analytics/utils.js +20 -1
- package/build/es/assets/DynamicDimensionIcon.js +38 -12
- package/build/es/components/DimensionsPanel/List/DimensionItem.js +33 -45
- package/build/es/components/DimensionsPanel/List/OptionsButton.js +6 -7
- package/build/es/components/DimensionsPanel/List/RecommendedIcon.js +2 -1
- package/build/es/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +361 -238
- package/build/es/components/DimensionsPanel/List/styles/DimensionItem.style.js +66 -4
- package/build/es/components/DimensionsPanel/List/styles/DimensionList.style.js +2 -2
- package/build/es/components/DimensionsPanel/List/styles/RecommendedIcon.style.js +4 -4
- package/build/es/components/DimensionsPanel/styles/DimensionsPanel.style.js +1 -1
- package/build/es/locales/lo/translations.json +8 -3
- package/build/es/modules/layout/dimension.js +7 -1
- package/build/es/modules/layout/dimensionCreate.js +4 -1
- package/package.json +1 -1
|
@@ -3,9 +3,71 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.styles = void 0;
|
|
7
7
|
var _ui = require("@dhis2/ui");
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const styles = {
|
|
9
|
+
labelWrapper: {
|
|
10
|
+
padding: '2px 5px 2px 0'
|
|
11
|
+
},
|
|
12
|
+
text: {
|
|
13
|
+
color: _ui.colors.grey900,
|
|
14
|
+
userSelect: 'none',
|
|
15
|
+
wordBreak: 'break-word',
|
|
16
|
+
fontSize: '14px'
|
|
17
|
+
},
|
|
18
|
+
textDeactivated: {
|
|
19
|
+
cursor: 'auto',
|
|
20
|
+
color: _ui.colors.grey500
|
|
21
|
+
},
|
|
22
|
+
item: {
|
|
23
|
+
display: 'flex',
|
|
24
|
+
minHeight: '24px',
|
|
25
|
+
marginTop: 3,
|
|
26
|
+
marginBottom: 3,
|
|
27
|
+
alignItems: 'center',
|
|
28
|
+
borderRadius: '2px'
|
|
29
|
+
},
|
|
30
|
+
clickable: {
|
|
31
|
+
cursor: 'pointer'
|
|
32
|
+
},
|
|
33
|
+
selected: {
|
|
34
|
+
backgroundColor: _ui.theme.secondary100,
|
|
35
|
+
fontWeight: 500
|
|
36
|
+
},
|
|
37
|
+
fixedDimensionIcon: {
|
|
38
|
+
paddingLeft: '6px',
|
|
39
|
+
paddingBottom: '2px'
|
|
40
|
+
},
|
|
41
|
+
dynamicDimensionIcon: {
|
|
42
|
+
paddingLeft: '9px',
|
|
43
|
+
paddingRight: '9px'
|
|
44
|
+
},
|
|
45
|
+
iconWrapper: {
|
|
46
|
+
display: 'flex',
|
|
47
|
+
flexDirection: 'column',
|
|
48
|
+
padding: '3px 8px 0 8px'
|
|
49
|
+
},
|
|
50
|
+
optionsWrapper: {
|
|
51
|
+
position: 'relative',
|
|
52
|
+
left: '5px',
|
|
53
|
+
width: '20px',
|
|
54
|
+
height: '20px'
|
|
55
|
+
},
|
|
56
|
+
optionsButton: {
|
|
57
|
+
display: 'flex',
|
|
58
|
+
alignItems: 'center',
|
|
59
|
+
justifyContent: 'center',
|
|
60
|
+
height: '20px',
|
|
61
|
+
width: '20px',
|
|
62
|
+
padding: 0,
|
|
63
|
+
border: 'none',
|
|
64
|
+
background: 'none',
|
|
65
|
+
outline: 'none',
|
|
66
|
+
cursor: 'pointer'
|
|
67
|
+
},
|
|
68
|
+
label: {
|
|
69
|
+
display: 'flex',
|
|
70
|
+
outline: 'none'
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
exports.styles = styles;
|
|
@@ -8,7 +8,7 @@ var _ui = require("@dhis2/ui");
|
|
|
8
8
|
// Fix for vertical flex scrolling in Firefox/Safari:
|
|
9
9
|
// Wrap the list in a div with position:relative (and flex:1 instead of on the list)
|
|
10
10
|
// On the list, set position:absolute, width:100%, height:100%
|
|
11
|
-
const _defaultExport = [".container.jsx-
|
|
12
|
-
_defaultExport.__hash = "
|
|
11
|
+
const _defaultExport = [".container.jsx-2067921157{position:relative;-webkit-flex:1 1 0%;-ms-flex:1 1 0%;flex:1 1 0%;min-height:30vh;}", ".wrapper.jsx-2067921157{position:absolute;width:100%;height:100%;overflow:auto;margin-top:0;padding:0;}", ".list.jsx-2067921157{margin:0;padding:0;}", `.header.jsx-2067921157{text-transform:uppercase;font-size:11px;color:${_ui.colors.grey700};margin:5px 0;-webkit-letter-spacing:0.3px;-moz-letter-spacing:0.3px;-ms-letter-spacing:0.3px;letter-spacing:0.3px;}`, `.section.jsx-2067921157:not(:last-child){margin-bottom:${_ui.spacers.dp24};}`];
|
|
12
|
+
_defaultExport.__hash = "2067921157";
|
|
13
13
|
var _default = _defaultExport;
|
|
14
14
|
exports.default = _default;
|
|
@@ -7,11 +7,11 @@ exports.styles = void 0;
|
|
|
7
7
|
var _ui = require("@dhis2/ui");
|
|
8
8
|
const styles = {
|
|
9
9
|
recommendedIcon: {
|
|
10
|
-
backgroundColor: _ui.theme.
|
|
11
|
-
height: '
|
|
12
|
-
width: '
|
|
10
|
+
backgroundColor: _ui.theme.secondary300,
|
|
11
|
+
height: '8px',
|
|
12
|
+
width: '8px',
|
|
13
13
|
borderRadius: '4px',
|
|
14
|
-
marginLeft: '
|
|
14
|
+
marginLeft: '5px',
|
|
15
15
|
display: 'inline-block',
|
|
16
16
|
cursor: 'pointer'
|
|
17
17
|
}
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"About this line list": "",
|
|
20
20
|
"About this visualization": "",
|
|
21
21
|
"This app could not retrieve required data.": "",
|
|
22
|
-
"Network error": "",
|
|
22
|
+
"Network error": "ຂໍ້ຜິດພາດທາງເຄື່ອຂ່າຍ",
|
|
23
23
|
"Data / Edit calculation": "",
|
|
24
24
|
"Data / New calculation": "",
|
|
25
|
-
"Remove item": "",
|
|
25
|
+
"Remove item": "ລົບລາຍການ",
|
|
26
26
|
"Check formula": "",
|
|
27
27
|
"Calculation name": "",
|
|
28
28
|
"Shown in table headers and chart axes/legends": "",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"Edit": "ແກ້ໄຂ",
|
|
107
107
|
"Write a reply": "",
|
|
108
108
|
"Post reply": "",
|
|
109
|
+
"Delete failed": "",
|
|
109
110
|
"Could not update comment": "",
|
|
110
111
|
"Enter comment text": "",
|
|
111
112
|
"Update": "ປັບປຸງ",
|
|
@@ -114,11 +115,14 @@
|
|
|
114
115
|
"The interpretation couldn’t be displayed. Try again or contact your system administrator.": "",
|
|
115
116
|
"Hide interpretation": "",
|
|
116
117
|
"Write an interpretation": "",
|
|
118
|
+
"Other people viewing this interpretation in the future may see more data.": "",
|
|
117
119
|
"Post interpretation": "",
|
|
118
120
|
"Interpretations": "ການແປຂໍ້ມູນ",
|
|
121
|
+
"Reply": "ຕອບກັບ",
|
|
122
|
+
"{{count}} replies": "",
|
|
123
|
+
"View replies": "",
|
|
119
124
|
"Unlike": "ບໍ່ມັກ",
|
|
120
125
|
"Like": "ມັກ",
|
|
121
|
-
"Reply": "ຕອບກັບ",
|
|
122
126
|
"Share": "ເຜີຍແຜ່",
|
|
123
127
|
"See interpretation": "",
|
|
124
128
|
"Manage sharing": "",
|
|
@@ -263,6 +267,7 @@
|
|
|
263
267
|
"Six-months": "6 ເດືອນ",
|
|
264
268
|
"Financial Years": "",
|
|
265
269
|
"Years": "ປີ",
|
|
270
|
+
"Interpretations and details": "",
|
|
266
271
|
"Translating to": "",
|
|
267
272
|
"Choose a locale": "",
|
|
268
273
|
"Base locale reference": "",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.DIMENSION_PROP_REPETITION = exports.DIMENSION_PROP_PROGRAM_STAGE = exports.DIMENSION_PROP_LEGEND_SET = exports.DIMENSION_PROP_ITEMS = exports.DIMENSION_PROP_ID = exports.DIMENSION_PROP_FILTER = exports.DIMENSION_PROPS = exports.DIMENSION = void 0;
|
|
6
|
+
exports.DIMENSION_PROP_REPETITION = exports.DIMENSION_PROP_PROGRAM_STAGE = exports.DIMENSION_PROP_PROGRAM = exports.DIMENSION_PROP_LEGEND_SET = exports.DIMENSION_PROP_ITEMS = exports.DIMENSION_PROP_ID = exports.DIMENSION_PROP_FILTER = exports.DIMENSION_PROPS = exports.DIMENSION = void 0;
|
|
7
7
|
var _isObject = _interopRequireDefault(require("lodash/isObject"));
|
|
8
8
|
var _isString = _interopRequireDefault(require("lodash/isString"));
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -43,6 +43,13 @@ const DIMENSION_PROP_LEGEND_SET = {
|
|
|
43
43
|
isValid: prop => (0, _isString.default)(prop)
|
|
44
44
|
};
|
|
45
45
|
exports.DIMENSION_PROP_LEGEND_SET = DIMENSION_PROP_LEGEND_SET;
|
|
46
|
+
const DIMENSION_PROP_PROGRAM = {
|
|
47
|
+
name: 'program',
|
|
48
|
+
defaultValue: {},
|
|
49
|
+
required: false,
|
|
50
|
+
isValid: prop => (0, _isObject.default)(prop)
|
|
51
|
+
};
|
|
52
|
+
exports.DIMENSION_PROP_PROGRAM = DIMENSION_PROP_PROGRAM;
|
|
46
53
|
const DIMENSION_PROP_PROGRAM_STAGE = {
|
|
47
54
|
name: 'programStage',
|
|
48
55
|
defaultValue: {},
|
|
@@ -57,5 +64,5 @@ const DIMENSION_PROP_REPETITION = {
|
|
|
57
64
|
isValid: prop => Array.isArray(prop)
|
|
58
65
|
};
|
|
59
66
|
exports.DIMENSION_PROP_REPETITION = DIMENSION_PROP_REPETITION;
|
|
60
|
-
const DIMENSION_PROPS = [DIMENSION_PROP_ID, DIMENSION_PROP_ITEMS, DIMENSION_PROP_FILTER, DIMENSION_PROP_LEGEND_SET, DIMENSION_PROP_PROGRAM_STAGE, DIMENSION_PROP_REPETITION];
|
|
67
|
+
const DIMENSION_PROPS = [DIMENSION_PROP_ID, DIMENSION_PROP_ITEMS, DIMENSION_PROP_FILTER, DIMENSION_PROP_LEGEND_SET, DIMENSION_PROP_PROGRAM, DIMENSION_PROP_PROGRAM_STAGE, DIMENSION_PROP_REPETITION];
|
|
61
68
|
exports.DIMENSION_PROPS = DIMENSION_PROPS;
|
|
@@ -21,6 +21,9 @@ const dimensionCreate = function (dimensionId) {
|
|
|
21
21
|
...(args.legendSet && {
|
|
22
22
|
[_dimension.DIMENSION_PROP_LEGEND_SET.name]: args.legendSet
|
|
23
23
|
}),
|
|
24
|
+
...(args.program && {
|
|
25
|
+
[_dimension.DIMENSION_PROP_PROGRAM.name]: args.program
|
|
26
|
+
}),
|
|
24
27
|
...(args.programStage && {
|
|
25
28
|
[_dimension.DIMENSION_PROP_PROGRAM_STAGE.name]: args.programStage
|
|
26
29
|
}),
|
|
@@ -62,7 +62,6 @@ storiesOf('DimensionsPanel', module).add('locked dimension', () => {
|
|
|
62
62
|
return /*#__PURE__*/React.createElement(DimensionsPanel, {
|
|
63
63
|
dimensions: [...fixedDimensions, ...dynamicDimensions],
|
|
64
64
|
onDimensionClick: onDimensionClick,
|
|
65
|
-
selectedIds: [DIMENSION_ID_DATA],
|
|
66
65
|
lockedDimension: dimension => dimension === DIMENSION_ID_DATA
|
|
67
66
|
});
|
|
68
67
|
});
|
|
@@ -6,12 +6,15 @@ import AnalyticsEnrollments from './AnalyticsEnrollments.js';
|
|
|
6
6
|
import AnalyticsEvents from './AnalyticsEvents.js';
|
|
7
7
|
import AnalyticsRequest from './AnalyticsRequest.js';
|
|
8
8
|
import AnalyticsResponse from './AnalyticsResponse.js';
|
|
9
|
+
import AnalyticsTrackedEntities from './AnalyticsTrackedEntities.js';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* @description
|
|
12
13
|
* Analytics class used to request analytics data from Web API.
|
|
13
14
|
*
|
|
14
15
|
* @requires analytics.AnalyticsAggregate
|
|
16
|
+
* @requires analytics.AnalyticsTrackedEntities
|
|
17
|
+
* @requires analytics.AnalyticsEnrollments
|
|
15
18
|
* @requires analytics.AnalyticsEvents
|
|
16
19
|
* @requires analytics.AnalyticsRequest
|
|
17
20
|
* @requires analytics.AnalyticsResponse
|
|
@@ -31,6 +34,7 @@ import AnalyticsResponse from './AnalyticsResponse.js';
|
|
|
31
34
|
class Analytics {
|
|
32
35
|
/**
|
|
33
36
|
* @param {!module:analytics.AnalyticsAggregate} analyticsAggregate The AnalyticsAggregate instance
|
|
37
|
+
* @param {!module:analytics.AnalyticsTrackedEntities} analyticsTrackedEntities The AnalyticsTrackedEntities instance
|
|
34
38
|
* @param {!module:analytics.AnalyticsEnrollments} analyticsEnrollments The AnalyticsEnrollments instance
|
|
35
39
|
* @param {!module:analytics.AnalyticsEvents} analyticsEvents The AnalyticsEvents instance
|
|
36
40
|
* @param {!module:analytics.AnalyticsRequest} analyticsRequest The AnalyticsRequest class
|
|
@@ -39,12 +43,14 @@ class Analytics {
|
|
|
39
43
|
constructor(_ref) {
|
|
40
44
|
let {
|
|
41
45
|
aggregate,
|
|
46
|
+
trackedEntities,
|
|
42
47
|
enrollments,
|
|
43
48
|
events,
|
|
44
49
|
request,
|
|
45
50
|
response
|
|
46
51
|
} = _ref;
|
|
47
52
|
this.aggregate = aggregate;
|
|
53
|
+
this.trackedEntities = trackedEntities;
|
|
48
54
|
this.enrollments = enrollments;
|
|
49
55
|
this.events = events;
|
|
50
56
|
this.request = request;
|
|
@@ -67,6 +73,7 @@ class Analytics {
|
|
|
67
73
|
if (!Analytics.getAnalytics.analytics) {
|
|
68
74
|
Analytics.getAnalytics.analytics = new Analytics({
|
|
69
75
|
aggregate: new AnalyticsAggregate(dataEngine),
|
|
76
|
+
trackedEntities: new AnalyticsTrackedEntities(dataEngine),
|
|
70
77
|
enrollments: new AnalyticsEnrollments(dataEngine),
|
|
71
78
|
events: new AnalyticsEvents(dataEngine),
|
|
72
79
|
request: AnalyticsRequest,
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import sortBy from 'lodash/sortBy';
|
|
2
2
|
import AnalyticsRequest from './AnalyticsRequest.js';
|
|
3
|
+
import { formatRequestPath } from './utils.js';
|
|
3
4
|
const analyticsQuery = {
|
|
4
5
|
resource: 'analytics',
|
|
5
6
|
id: _ref => {
|
|
6
7
|
let {
|
|
7
8
|
path,
|
|
8
|
-
program
|
|
9
|
+
program,
|
|
10
|
+
trackedEntityType
|
|
9
11
|
} = _ref;
|
|
10
|
-
return
|
|
12
|
+
return formatRequestPath({
|
|
13
|
+
path,
|
|
14
|
+
program,
|
|
15
|
+
trackedEntityType
|
|
16
|
+
});
|
|
11
17
|
},
|
|
12
18
|
params: _ref2 => {
|
|
13
19
|
let {
|
|
@@ -27,9 +33,14 @@ const analyticsDataQuery = {
|
|
|
27
33
|
id: _ref3 => {
|
|
28
34
|
let {
|
|
29
35
|
path,
|
|
30
|
-
program
|
|
36
|
+
program,
|
|
37
|
+
trackedEntityType
|
|
31
38
|
} = _ref3;
|
|
32
|
-
return
|
|
39
|
+
return formatRequestPath({
|
|
40
|
+
path,
|
|
41
|
+
program,
|
|
42
|
+
trackedEntityType
|
|
43
|
+
});
|
|
33
44
|
},
|
|
34
45
|
params: _ref4 => {
|
|
35
46
|
let {
|
|
@@ -51,9 +62,14 @@ const analyticsMetaDataQuery = {
|
|
|
51
62
|
id: _ref5 => {
|
|
52
63
|
let {
|
|
53
64
|
path,
|
|
54
|
-
program
|
|
65
|
+
program,
|
|
66
|
+
trackedEntityType
|
|
55
67
|
} = _ref5;
|
|
56
|
-
return
|
|
68
|
+
return formatRequestPath({
|
|
69
|
+
path,
|
|
70
|
+
program,
|
|
71
|
+
trackedEntityType
|
|
72
|
+
});
|
|
57
73
|
},
|
|
58
74
|
params: _ref6 => {
|
|
59
75
|
let {
|
|
@@ -145,6 +161,7 @@ class AnalyticsBase {
|
|
|
145
161
|
variables: {
|
|
146
162
|
path: req.path,
|
|
147
163
|
program: req.program,
|
|
164
|
+
trackedEntityType: req.trackedEntityType,
|
|
148
165
|
dimensions: generateDimensionStrings(req.dimensions),
|
|
149
166
|
filters: generateDimensionStrings(req.filters),
|
|
150
167
|
parameters: req.parameters,
|
|
@@ -187,6 +204,7 @@ class AnalyticsBase {
|
|
|
187
204
|
variables: {
|
|
188
205
|
path: req.path,
|
|
189
206
|
program: req.program,
|
|
207
|
+
trackedEntityType: req.trackedEntityType,
|
|
190
208
|
dimensions: generateDimensionStrings(req.dimensions, options),
|
|
191
209
|
filters: generateDimensionStrings(req.filters, options),
|
|
192
210
|
parameters: req.parameters
|
|
@@ -4,6 +4,7 @@ import AnalyticsRequestBase from './AnalyticsRequestBase.js';
|
|
|
4
4
|
import AnalyticsRequestDimensionsMixin from './AnalyticsRequestDimensionsMixin.js';
|
|
5
5
|
import AnalyticsRequestFiltersMixin from './AnalyticsRequestFiltersMixin.js';
|
|
6
6
|
import AnalyticsRequestPropertiesMixin from './AnalyticsRequestPropertiesMixin.js';
|
|
7
|
+
import { formatDimension } from './utils.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @description
|
|
@@ -41,6 +42,7 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
|
|
|
41
42
|
fromVisualization(visualization) {
|
|
42
43
|
let passFilterAsDimension = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
43
44
|
let request = this;
|
|
45
|
+
const outputType = visualization.outputType;
|
|
44
46
|
|
|
45
47
|
// extract dimensions from visualization
|
|
46
48
|
const columns = visualization.columns || [];
|
|
@@ -51,19 +53,28 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
|
|
|
51
53
|
if ((_d$legendSet = d.legendSet) !== null && _d$legendSet !== void 0 && _d$legendSet.id) {
|
|
52
54
|
dimension += `-${d.legendSet.id}`;
|
|
53
55
|
}
|
|
54
|
-
if ((_d$programStage = d.programStage) !== null && _d$programStage !== void 0 && _d$programStage.id) {
|
|
55
|
-
dimension = `${d.programStage.id}.${dimension}`;
|
|
56
|
-
}
|
|
57
56
|
if (d.filter) {
|
|
58
57
|
dimension += `:${d.filter}`;
|
|
59
58
|
}
|
|
59
|
+
const programStageId = (_d$programStage = d.programStage) === null || _d$programStage === void 0 ? void 0 : _d$programStage.id;
|
|
60
60
|
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) {
|
|
61
61
|
d.repetition.indexes.forEach(index => {
|
|
62
|
-
|
|
62
|
+
var _d$program;
|
|
63
|
+
request = request.addDimension(formatDimension({
|
|
64
|
+
programId: (_d$program = d.program) === null || _d$program === void 0 ? void 0 : _d$program.id,
|
|
65
|
+
programStageId: `${programStageId}[${index}]`,
|
|
66
|
+
dimension,
|
|
67
|
+
outputType
|
|
68
|
+
}));
|
|
63
69
|
});
|
|
64
70
|
} else {
|
|
65
|
-
var _d$items;
|
|
66
|
-
request = request.addDimension(
|
|
71
|
+
var _d$program2, _d$items;
|
|
72
|
+
request = request.addDimension(formatDimension({
|
|
73
|
+
programId: (_d$program2 = d.program) === null || _d$program2 === void 0 ? void 0 : _d$program2.id,
|
|
74
|
+
programStageId,
|
|
75
|
+
dimension,
|
|
76
|
+
outputType
|
|
77
|
+
}), (_d$items = d.items) === null || _d$items === void 0 ? void 0 : _d$items.map(item => item.id));
|
|
67
78
|
}
|
|
68
79
|
});
|
|
69
80
|
|
|
@@ -78,17 +89,29 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
|
|
|
78
89
|
request = request.addDimension(f.dimension, (_f$items = f.items) === null || _f$items === void 0 ? void 0 : _f$items.map(item => item.id));
|
|
79
90
|
} else {
|
|
80
91
|
var _f$programStage, _f$repetition, _f$repetition$indexes;
|
|
81
|
-
let filterString =
|
|
92
|
+
let filterString = f.dimension;
|
|
82
93
|
if (f.filter) {
|
|
83
94
|
filterString += `:${f.filter}`;
|
|
84
95
|
}
|
|
96
|
+
const programStageId = (_f$programStage = f.programStage) === null || _f$programStage === void 0 ? void 0 : _f$programStage.id;
|
|
85
97
|
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) {
|
|
86
98
|
f.repetition.indexes.forEach(index => {
|
|
87
|
-
|
|
99
|
+
var _f$program;
|
|
100
|
+
request = request.addFilter(formatDimension({
|
|
101
|
+
programId: (_f$program = f.program) === null || _f$program === void 0 ? void 0 : _f$program.id,
|
|
102
|
+
programStageId: `${programStageId}[${index}]`,
|
|
103
|
+
dimension: filterString,
|
|
104
|
+
outputType
|
|
105
|
+
}));
|
|
88
106
|
});
|
|
89
107
|
} else {
|
|
90
|
-
var _f$items2;
|
|
91
|
-
request = request.addFilter(
|
|
108
|
+
var _f$program2, _f$items2;
|
|
109
|
+
request = request.addFilter(formatDimension({
|
|
110
|
+
programId: (_f$program2 = f.program) === null || _f$program2 === void 0 ? void 0 : _f$program2.id,
|
|
111
|
+
programStageId,
|
|
112
|
+
dimension: filterString,
|
|
113
|
+
outputType
|
|
114
|
+
}), (_f$items2 = f.items) === null || _f$items2 === void 0 ? void 0 : _f$items2.map(item => item.id));
|
|
92
115
|
}
|
|
93
116
|
}
|
|
94
117
|
});
|
|
@@ -18,6 +18,7 @@ class AnalyticsRequestBase {
|
|
|
18
18
|
format = 'json',
|
|
19
19
|
path,
|
|
20
20
|
program,
|
|
21
|
+
trackedEntityType,
|
|
21
22
|
dimensions = [],
|
|
22
23
|
filters = [],
|
|
23
24
|
parameters = {}
|
|
@@ -26,6 +27,7 @@ class AnalyticsRequestBase {
|
|
|
26
27
|
this.format = format.toLowerCase();
|
|
27
28
|
this.path = path;
|
|
28
29
|
this.program = program;
|
|
30
|
+
this.trackedEntityType = trackedEntityType;
|
|
29
31
|
this.dimensions = dimensions;
|
|
30
32
|
this.filters = filters;
|
|
31
33
|
this.parameters = {
|
|
@@ -64,7 +66,7 @@ class AnalyticsRequestBase {
|
|
|
64
66
|
}
|
|
65
67
|
return dimension;
|
|
66
68
|
});
|
|
67
|
-
const endPoint = [this.endPoint, this.path, this.program].filter(
|
|
69
|
+
const endPoint = [this.endPoint, this.path, this.program, this.trackedEntityType].filter(Boolean).join('/');
|
|
68
70
|
return `${endPoint}.${this.format}?dimension=${encodedDimensions.join('&dimension=')}`;
|
|
69
71
|
}
|
|
70
72
|
|
|
@@ -491,6 +491,25 @@ class extends base {
|
|
|
491
491
|
return new AnalyticsRequest(this);
|
|
492
492
|
}
|
|
493
493
|
|
|
494
|
+
/**
|
|
495
|
+
* Sets the tracked entity type for the request.
|
|
496
|
+
* It appends the tracked entity type id to the request's path.
|
|
497
|
+
*
|
|
498
|
+
* @param {!String} trackedEntityType The tracked entity type id
|
|
499
|
+
*
|
|
500
|
+
* @returns {AnalyticsRequest} A new instance of the class for chaining purposes
|
|
501
|
+
*
|
|
502
|
+
* @example
|
|
503
|
+
* const req = new analytics.request()
|
|
504
|
+
* .withTrackedEntityType('nEenWmSyUEp');
|
|
505
|
+
*/
|
|
506
|
+
withTrackedEntityType(trackedEntityType) {
|
|
507
|
+
if (trackedEntityType) {
|
|
508
|
+
this.trackedEntityType = trackedEntityType;
|
|
509
|
+
}
|
|
510
|
+
return new AnalyticsRequest(this);
|
|
511
|
+
}
|
|
512
|
+
|
|
494
513
|
/**
|
|
495
514
|
* Sets the program for the request.
|
|
496
515
|
* It appends the program id to the request's path.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import AnalyticsBase from './AnalyticsBase.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @extends module:analytics.AnalyticsBase
|
|
5
|
+
*
|
|
6
|
+
* @description
|
|
7
|
+
* Analytics tracked entities class used to request analytics tracked entities data from Web API.
|
|
8
|
+
*
|
|
9
|
+
* @memberof module:analytics
|
|
10
|
+
*/
|
|
11
|
+
class AnalyticsTrackedEntities extends AnalyticsBase {
|
|
12
|
+
/**
|
|
13
|
+
* @param {!AnalyticsRequest} req Request object
|
|
14
|
+
*
|
|
15
|
+
* @returns {Promise} Promise that resolves with the analytics query data from the api.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
// TODO: provide working example
|
|
19
|
+
*/
|
|
20
|
+
getQuery(req) {
|
|
21
|
+
return this.fetch(req.withPath('trackedEntities/query'));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export default AnalyticsTrackedEntities;
|
|
@@ -2,4 +2,23 @@
|
|
|
2
2
|
const whitelistURI = ',&$=/;:';
|
|
3
3
|
const whitelistURICodes = whitelistURI.split('').map(c => encodeURIComponent(c));
|
|
4
4
|
const whitelistRegExp = new RegExp(`(?:${whitelistURICodes.join('|')})`, 'g');
|
|
5
|
-
export const customEncodeURIComponent = uri => encodeURIComponent(uri).replace(whitelistRegExp, decodeURIComponent);
|
|
5
|
+
export const customEncodeURIComponent = uri => encodeURIComponent(uri).replace(whitelistRegExp, decodeURIComponent);
|
|
6
|
+
export const formatRequestPath = _ref => {
|
|
7
|
+
let {
|
|
8
|
+
path,
|
|
9
|
+
program,
|
|
10
|
+
trackedEntityType
|
|
11
|
+
} = _ref;
|
|
12
|
+
return [path, program, trackedEntityType].filter(Boolean).join('/');
|
|
13
|
+
};
|
|
14
|
+
export const formatDimension = _ref2 => {
|
|
15
|
+
let {
|
|
16
|
+
outputType,
|
|
17
|
+
programId,
|
|
18
|
+
programStageId,
|
|
19
|
+
dimension
|
|
20
|
+
} = _ref2;
|
|
21
|
+
return [
|
|
22
|
+
// XXX it would be clearer to have this consistent with what is sent in the request as for EVENT/ENROLLMENT
|
|
23
|
+
outputType === 'TRACKED_ENTITY_INSTANCE' ? programId : undefined, programStageId, dimension].filter(Boolean).join('.');
|
|
24
|
+
};
|
|
@@ -1,21 +1,47 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
const DynamicDimensionIcon = () => {
|
|
3
3
|
return /*#__PURE__*/React.createElement("svg", {
|
|
4
|
-
width: "
|
|
5
|
-
height: "
|
|
6
|
-
|
|
4
|
+
width: "16px",
|
|
5
|
+
height: "16px",
|
|
6
|
+
viewBox: "0 0 16 16",
|
|
7
|
+
version: "1.1",
|
|
7
8
|
xmlns: "http://www.w3.org/2000/svg"
|
|
8
|
-
}, /*#__PURE__*/React.createElement("
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
}, /*#__PURE__*/React.createElement("g", {
|
|
10
|
+
id: "Exp",
|
|
11
|
+
stroke: "none",
|
|
12
|
+
strokeWidth: "1",
|
|
13
|
+
fill: "none",
|
|
14
|
+
fillRule: "evenodd"
|
|
15
|
+
}, /*#__PURE__*/React.createElement("g", {
|
|
16
|
+
id: "Artboard",
|
|
17
|
+
transform: "translate(-80.000000, -9.000000)"
|
|
18
|
+
}, /*#__PURE__*/React.createElement("g", {
|
|
19
|
+
id: "icon_dimension_new",
|
|
20
|
+
transform: "translate(80.000000, 9.000000)"
|
|
21
|
+
}, /*#__PURE__*/React.createElement("rect", {
|
|
22
|
+
id: "frame",
|
|
23
|
+
x: "0",
|
|
24
|
+
y: "0",
|
|
25
|
+
width: "16",
|
|
26
|
+
height: "16"
|
|
27
|
+
}), /*#__PURE__*/React.createElement("g", {
|
|
28
|
+
id: "module",
|
|
29
|
+
transform: "translate(4.000000, 4.000000)",
|
|
30
|
+
stroke: "#000000",
|
|
12
31
|
strokeLinecap: "round",
|
|
13
32
|
strokeLinejoin: "round"
|
|
33
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
34
|
+
d: "M0.33209728,1.1742111 L3.16308174,0.0641666694 C3.37911767,-0.0213888898 3.61963794,-0.0213888898 3.83567387,0.0641666694 L6.66665833,1.1742111 C6.87300668,1.26220739 7.00497003,1.467 6.99984343,1.69127776 L6.99984343,5.30887771 C7.00517859,5.53285411 6.87376309,5.73756106 6.66790272,5.82594437 L3.83691826,6.93629991 C3.62076407,7.02123336 3.38048032,7.02123336 3.16432613,6.93629991 L0.333341668,5.82594437 C0.126993317,5.73794808 -0.00497002591,5.53315547 0.000156574133,5.30887771 L0.000156574133,1.69127776 C-0.00517858533,1.46730136 0.126236906,1.26259441 0.33209728,1.1742111 Z",
|
|
35
|
+
id: "Shape"
|
|
14
36
|
}), /*#__PURE__*/React.createElement("path", {
|
|
15
|
-
d: "
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
37
|
+
d: "M3.5,2.72795833 L0.322,1.48195833",
|
|
38
|
+
id: "Shape"
|
|
39
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
40
|
+
d: "M3.5,2.72795833 L6.678,1.48195833",
|
|
41
|
+
id: "Shape"
|
|
42
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
43
|
+
d: "M3.5,6.78125 L3.5,2.72795833",
|
|
44
|
+
id: "Shape"
|
|
45
|
+
}))))));
|
|
20
46
|
};
|
|
21
47
|
export default DynamicDimensionIcon;
|