@dhis2/analytics 26.3.0-alpha.1 → 26.3.0-alpha.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/build/cjs/__demo__/DimensionsPanel.stories.js +1 -0
- package/build/cjs/api/analytics/Analytics.js +0 -7
- package/build/cjs/api/analytics/AnalyticsBase.js +6 -24
- package/build/cjs/api/analytics/AnalyticsRequest.js +10 -33
- package/build/cjs/api/analytics/AnalyticsRequestBase.js +1 -3
- package/build/cjs/api/analytics/AnalyticsRequestPropertiesMixin.js +0 -19
- package/build/cjs/api/analytics/utils.js +2 -23
- package/build/cjs/assets/DynamicDimensionIcon.js +12 -38
- package/build/cjs/components/DimensionsPanel/List/DimensionItem.js +44 -32
- package/build/cjs/components/DimensionsPanel/List/OptionsButton.js +7 -6
- package/build/cjs/components/DimensionsPanel/List/RecommendedIcon.js +1 -2
- package/build/cjs/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +238 -361
- package/build/cjs/components/DimensionsPanel/List/styles/DimensionItem.style.js +5 -67
- 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/modules/layout/dimension.js +2 -9
- package/build/cjs/modules/layout/dimensionCreate.js +0 -3
- package/build/es/__demo__/DimensionsPanel.stories.js +1 -0
- package/build/es/api/analytics/Analytics.js +0 -7
- package/build/es/api/analytics/AnalyticsBase.js +6 -24
- package/build/es/api/analytics/AnalyticsRequest.js +10 -33
- package/build/es/api/analytics/AnalyticsRequestBase.js +1 -3
- package/build/es/api/analytics/AnalyticsRequestPropertiesMixin.js +0 -19
- package/build/es/api/analytics/utils.js +1 -20
- package/build/es/assets/DynamicDimensionIcon.js +12 -38
- package/build/es/components/DimensionsPanel/List/DimensionItem.js +45 -33
- package/build/es/components/DimensionsPanel/List/OptionsButton.js +7 -6
- package/build/es/components/DimensionsPanel/List/RecommendedIcon.js +1 -2
- package/build/es/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +238 -361
- package/build/es/components/DimensionsPanel/List/styles/DimensionItem.style.js +4 -66
- 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/modules/layout/dimension.js +1 -7
- package/build/es/modules/layout/dimensionCreate.js +1 -4
- package/package.json +1 -1
- package/build/cjs/api/analytics/AnalyticsTrackedEntities.js +0 -31
- package/build/es/api/analytics/AnalyticsTrackedEntities.js +0 -24
|
@@ -3,71 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.default = void 0;
|
|
7
7
|
var _ui = require("@dhis2/ui");
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
const _defaultExport = [`.item.jsx-3528757313{color:${_ui.colors.grey900};background-color:transparent;fill:${_ui.colors.grey800};display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;outline:none;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:0 0 0 4px;margin:0;border-radius:2px;cursor:pointer;min-height:22px;border:1px solid transparent;}`, `.item.jsx-3528757313:not(.deactivated):not(.dragging):hover{background-color:${_ui.colors.grey100};border-color:${_ui.colors.grey400};}`, ".label.jsx-3528757313{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}", ".labelWrapper.jsx-3528757313{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}", ".labelText.jsx-3528757313{font-size:13px;line-height:15px;margin-top:1px;}", ".iconWrapper.jsx-3528757313{width:16px;height:16px;margin:2px 4px 0 0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;}", ".item.deactivated.jsx-3528757313{opacity:0.5;cursor:not-allowed;}", `.item.selected.jsx-3528757313{background-color:${_ui.colors.teal100};border:1px solid ${_ui.colors.teal200};color:${_ui.colors.teal900};fill:${_ui.colors.teal800};font-weight:400;}`, ".item.selected.jsx-3528757313:not(.deactivated):hover{background:#cdeae8;border-color:#93c4bf;box-shadow:0 1px 2px 0 rgb(0 0 0 / 0.05);}", ".optionsWrapper.jsx-3528757313{width:20px;height:20px;}", `.lockWrapper.jsx-3528757313 svg.jsx-3528757313 path.jsx-3528757313{fill:${_ui.colors.grey800};}`, `.lockWrapper.jsx-3528757313{background:${_ui.colors.grey300};height:20px;padding:0 1px 0 2px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}`, ".item.selected.jsx-3528757313 .lockWrapper.jsx-3528757313{background:#cbe7e5;}", `.item.selected.jsx-3528757313 .lockWrapper.jsx-3528757313 svg.jsx-3528757313 path.jsx-3528757313{fill:${_ui.colors.teal900};}`];
|
|
9
|
+
_defaultExport.__hash = "3528757313";
|
|
10
|
+
var _default = _defaultExport;
|
|
11
|
+
exports.default = _default;
|
|
@@ -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-2040313368{position:relative;-webkit-flex:1 1 0%;-ms-flex:1 1 0%;flex:1 1 0%;min-height:30vh;}", ".wrapper.jsx-2040313368{position:absolute;width:100%;height:100%;overflow:auto;margin-top:0;padding:0;}", ".list.jsx-2040313368{margin:0;padding:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:4px;}", `.header.jsx-2040313368{text-transform:uppercase;font-size:11px;color:${_ui.colors.grey600};margin:0 0 ${_ui.spacers.dp8} 0;-webkit-letter-spacing:0.3px;-moz-letter-spacing:0.3px;-ms-letter-spacing:0.3px;letter-spacing:0.3px;font-weight:400;}`, `.section.jsx-2040313368:not(:last-child){margin-bottom:${_ui.spacers.dp24};}`];
|
|
12
|
+
_defaultExport.__hash = "2040313368";
|
|
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.secondary400,
|
|
11
|
+
height: '6px',
|
|
12
|
+
width: '6px',
|
|
13
13
|
borderRadius: '4px',
|
|
14
|
-
marginLeft: '
|
|
14
|
+
marginLeft: '6px',
|
|
15
15
|
display: 'inline-block',
|
|
16
16
|
cursor: 'pointer'
|
|
17
17
|
}
|
|
@@ -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.
|
|
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;
|
|
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,13 +43,6 @@ 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;
|
|
53
46
|
const DIMENSION_PROP_PROGRAM_STAGE = {
|
|
54
47
|
name: 'programStage',
|
|
55
48
|
defaultValue: {},
|
|
@@ -64,5 +57,5 @@ const DIMENSION_PROP_REPETITION = {
|
|
|
64
57
|
isValid: prop => Array.isArray(prop)
|
|
65
58
|
};
|
|
66
59
|
exports.DIMENSION_PROP_REPETITION = DIMENSION_PROP_REPETITION;
|
|
67
|
-
const DIMENSION_PROPS = [DIMENSION_PROP_ID, DIMENSION_PROP_ITEMS, DIMENSION_PROP_FILTER, DIMENSION_PROP_LEGEND_SET,
|
|
60
|
+
const DIMENSION_PROPS = [DIMENSION_PROP_ID, DIMENSION_PROP_ITEMS, DIMENSION_PROP_FILTER, DIMENSION_PROP_LEGEND_SET, DIMENSION_PROP_PROGRAM_STAGE, DIMENSION_PROP_REPETITION];
|
|
68
61
|
exports.DIMENSION_PROPS = DIMENSION_PROPS;
|
|
@@ -21,9 +21,6 @@ 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
|
-
}),
|
|
27
24
|
...(args.programStage && {
|
|
28
25
|
[_dimension.DIMENSION_PROP_PROGRAM_STAGE.name]: args.programStage
|
|
29
26
|
}),
|
|
@@ -62,6 +62,7 @@ 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],
|
|
65
66
|
lockedDimension: dimension => dimension === DIMENSION_ID_DATA
|
|
66
67
|
});
|
|
67
68
|
});
|
|
@@ -6,15 +6,12 @@ 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';
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* @description
|
|
13
12
|
* Analytics class used to request analytics data from Web API.
|
|
14
13
|
*
|
|
15
14
|
* @requires analytics.AnalyticsAggregate
|
|
16
|
-
* @requires analytics.AnalyticsTrackedEntities
|
|
17
|
-
* @requires analytics.AnalyticsEnrollments
|
|
18
15
|
* @requires analytics.AnalyticsEvents
|
|
19
16
|
* @requires analytics.AnalyticsRequest
|
|
20
17
|
* @requires analytics.AnalyticsResponse
|
|
@@ -34,7 +31,6 @@ import AnalyticsTrackedEntities from './AnalyticsTrackedEntities.js';
|
|
|
34
31
|
class Analytics {
|
|
35
32
|
/**
|
|
36
33
|
* @param {!module:analytics.AnalyticsAggregate} analyticsAggregate The AnalyticsAggregate instance
|
|
37
|
-
* @param {!module:analytics.AnalyticsTrackedEntities} analyticsTrackedEntities The AnalyticsTrackedEntities instance
|
|
38
34
|
* @param {!module:analytics.AnalyticsEnrollments} analyticsEnrollments The AnalyticsEnrollments instance
|
|
39
35
|
* @param {!module:analytics.AnalyticsEvents} analyticsEvents The AnalyticsEvents instance
|
|
40
36
|
* @param {!module:analytics.AnalyticsRequest} analyticsRequest The AnalyticsRequest class
|
|
@@ -43,14 +39,12 @@ class Analytics {
|
|
|
43
39
|
constructor(_ref) {
|
|
44
40
|
let {
|
|
45
41
|
aggregate,
|
|
46
|
-
trackedEntities,
|
|
47
42
|
enrollments,
|
|
48
43
|
events,
|
|
49
44
|
request,
|
|
50
45
|
response
|
|
51
46
|
} = _ref;
|
|
52
47
|
this.aggregate = aggregate;
|
|
53
|
-
this.trackedEntities = trackedEntities;
|
|
54
48
|
this.enrollments = enrollments;
|
|
55
49
|
this.events = events;
|
|
56
50
|
this.request = request;
|
|
@@ -73,7 +67,6 @@ class Analytics {
|
|
|
73
67
|
if (!Analytics.getAnalytics.analytics) {
|
|
74
68
|
Analytics.getAnalytics.analytics = new Analytics({
|
|
75
69
|
aggregate: new AnalyticsAggregate(dataEngine),
|
|
76
|
-
trackedEntities: new AnalyticsTrackedEntities(dataEngine),
|
|
77
70
|
enrollments: new AnalyticsEnrollments(dataEngine),
|
|
78
71
|
events: new AnalyticsEvents(dataEngine),
|
|
79
72
|
request: AnalyticsRequest,
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
import sortBy from 'lodash/sortBy';
|
|
2
2
|
import AnalyticsRequest from './AnalyticsRequest.js';
|
|
3
|
-
import { formatRequestPath } from './utils.js';
|
|
4
3
|
const analyticsQuery = {
|
|
5
4
|
resource: 'analytics',
|
|
6
5
|
id: _ref => {
|
|
7
6
|
let {
|
|
8
7
|
path,
|
|
9
|
-
program
|
|
10
|
-
trackedEntityType
|
|
8
|
+
program
|
|
11
9
|
} = _ref;
|
|
12
|
-
return
|
|
13
|
-
path,
|
|
14
|
-
program,
|
|
15
|
-
trackedEntityType
|
|
16
|
-
});
|
|
10
|
+
return [path, program].filter(Boolean).join('/');
|
|
17
11
|
},
|
|
18
12
|
params: _ref2 => {
|
|
19
13
|
let {
|
|
@@ -33,14 +27,9 @@ const analyticsDataQuery = {
|
|
|
33
27
|
id: _ref3 => {
|
|
34
28
|
let {
|
|
35
29
|
path,
|
|
36
|
-
program
|
|
37
|
-
trackedEntityType
|
|
30
|
+
program
|
|
38
31
|
} = _ref3;
|
|
39
|
-
return
|
|
40
|
-
path,
|
|
41
|
-
program,
|
|
42
|
-
trackedEntityType
|
|
43
|
-
});
|
|
32
|
+
return [path, program].filter(Boolean).join('/');
|
|
44
33
|
},
|
|
45
34
|
params: _ref4 => {
|
|
46
35
|
let {
|
|
@@ -62,14 +51,9 @@ const analyticsMetaDataQuery = {
|
|
|
62
51
|
id: _ref5 => {
|
|
63
52
|
let {
|
|
64
53
|
path,
|
|
65
|
-
program
|
|
66
|
-
trackedEntityType
|
|
54
|
+
program
|
|
67
55
|
} = _ref5;
|
|
68
|
-
return
|
|
69
|
-
path,
|
|
70
|
-
program,
|
|
71
|
-
trackedEntityType
|
|
72
|
-
});
|
|
56
|
+
return [path, program].filter(Boolean).join('/');
|
|
73
57
|
},
|
|
74
58
|
params: _ref6 => {
|
|
75
59
|
let {
|
|
@@ -161,7 +145,6 @@ class AnalyticsBase {
|
|
|
161
145
|
variables: {
|
|
162
146
|
path: req.path,
|
|
163
147
|
program: req.program,
|
|
164
|
-
trackedEntityType: req.trackedEntityType,
|
|
165
148
|
dimensions: generateDimensionStrings(req.dimensions),
|
|
166
149
|
filters: generateDimensionStrings(req.filters),
|
|
167
150
|
parameters: req.parameters,
|
|
@@ -204,7 +187,6 @@ class AnalyticsBase {
|
|
|
204
187
|
variables: {
|
|
205
188
|
path: req.path,
|
|
206
189
|
program: req.program,
|
|
207
|
-
trackedEntityType: req.trackedEntityType,
|
|
208
190
|
dimensions: generateDimensionStrings(req.dimensions, options),
|
|
209
191
|
filters: generateDimensionStrings(req.filters, options),
|
|
210
192
|
parameters: req.parameters
|
|
@@ -4,7 +4,6 @@ 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';
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* @description
|
|
@@ -42,7 +41,6 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
|
|
|
42
41
|
fromVisualization(visualization) {
|
|
43
42
|
let passFilterAsDimension = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
44
43
|
let request = this;
|
|
45
|
-
const outputType = visualization.outputType;
|
|
46
44
|
|
|
47
45
|
// extract dimensions from visualization
|
|
48
46
|
const columns = visualization.columns || [];
|
|
@@ -53,28 +51,19 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
|
|
|
53
51
|
if ((_d$legendSet = d.legendSet) !== null && _d$legendSet !== void 0 && _d$legendSet.id) {
|
|
54
52
|
dimension += `-${d.legendSet.id}`;
|
|
55
53
|
}
|
|
54
|
+
if ((_d$programStage = d.programStage) !== null && _d$programStage !== void 0 && _d$programStage.id) {
|
|
55
|
+
dimension = `${d.programStage.id}.${dimension}`;
|
|
56
|
+
}
|
|
56
57
|
if (d.filter) {
|
|
57
58
|
dimension += `:${d.filter}`;
|
|
58
59
|
}
|
|
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
|
-
|
|
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
|
-
}));
|
|
62
|
+
request = request.addDimension(dimension.replace(/\./, `[${index}].`));
|
|
69
63
|
});
|
|
70
64
|
} else {
|
|
71
|
-
var _d$
|
|
72
|
-
request = request.addDimension(
|
|
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));
|
|
65
|
+
var _d$items;
|
|
66
|
+
request = request.addDimension(dimension, (_d$items = d.items) === null || _d$items === void 0 ? void 0 : _d$items.map(item => item.id));
|
|
78
67
|
}
|
|
79
68
|
});
|
|
80
69
|
|
|
@@ -89,29 +78,17 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
|
|
|
89
78
|
request = request.addDimension(f.dimension, (_f$items = f.items) === null || _f$items === void 0 ? void 0 : _f$items.map(item => item.id));
|
|
90
79
|
} else {
|
|
91
80
|
var _f$programStage, _f$repetition, _f$repetition$indexes;
|
|
92
|
-
let filterString = f.dimension;
|
|
81
|
+
let filterString = (_f$programStage = f.programStage) !== null && _f$programStage !== void 0 && _f$programStage.id ? `${f.programStage.id}.${f.dimension}` : f.dimension;
|
|
93
82
|
if (f.filter) {
|
|
94
83
|
filterString += `:${f.filter}`;
|
|
95
84
|
}
|
|
96
|
-
const programStageId = (_f$programStage = f.programStage) === null || _f$programStage === void 0 ? void 0 : _f$programStage.id;
|
|
97
85
|
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) {
|
|
98
86
|
f.repetition.indexes.forEach(index => {
|
|
99
|
-
|
|
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
|
-
}));
|
|
87
|
+
request = request.addFilter(filterString.replace(/\./, `[${index}].`));
|
|
106
88
|
});
|
|
107
89
|
} else {
|
|
108
|
-
var _f$
|
|
109
|
-
request = request.addFilter(
|
|
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));
|
|
90
|
+
var _f$items2;
|
|
91
|
+
request = request.addFilter(filterString, (_f$items2 = f.items) === null || _f$items2 === void 0 ? void 0 : _f$items2.map(item => item.id));
|
|
115
92
|
}
|
|
116
93
|
}
|
|
117
94
|
});
|
|
@@ -18,7 +18,6 @@ class AnalyticsRequestBase {
|
|
|
18
18
|
format = 'json',
|
|
19
19
|
path,
|
|
20
20
|
program,
|
|
21
|
-
trackedEntityType,
|
|
22
21
|
dimensions = [],
|
|
23
22
|
filters = [],
|
|
24
23
|
parameters = {}
|
|
@@ -27,7 +26,6 @@ class AnalyticsRequestBase {
|
|
|
27
26
|
this.format = format.toLowerCase();
|
|
28
27
|
this.path = path;
|
|
29
28
|
this.program = program;
|
|
30
|
-
this.trackedEntityType = trackedEntityType;
|
|
31
29
|
this.dimensions = dimensions;
|
|
32
30
|
this.filters = filters;
|
|
33
31
|
this.parameters = {
|
|
@@ -66,7 +64,7 @@ class AnalyticsRequestBase {
|
|
|
66
64
|
}
|
|
67
65
|
return dimension;
|
|
68
66
|
});
|
|
69
|
-
const endPoint = [this.endPoint, this.path, this.program
|
|
67
|
+
const endPoint = [this.endPoint, this.path, this.program].filter(e => !!e).join('/');
|
|
70
68
|
return `${endPoint}.${this.format}?dimension=${encodedDimensions.join('&dimension=')}`;
|
|
71
69
|
}
|
|
72
70
|
|
|
@@ -491,25 +491,6 @@ 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
|
-
|
|
513
494
|
/**
|
|
514
495
|
* Sets the program for the request.
|
|
515
496
|
* It appends the program id to the request's path.
|
|
@@ -2,23 +2,4 @@
|
|
|
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);
|
|
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' ? programId : undefined, programStageId, dimension].filter(Boolean).join('.');
|
|
24
|
-
};
|
|
5
|
+
export const customEncodeURIComponent = uri => encodeURIComponent(uri).replace(whitelistRegExp, decodeURIComponent);
|
|
@@ -1,47 +1,21 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
const DynamicDimensionIcon = () => {
|
|
3
3
|
return /*#__PURE__*/React.createElement("svg", {
|
|
4
|
-
width: "16px",
|
|
5
|
-
height: "16px",
|
|
6
|
-
viewBox: "0 0 16 16",
|
|
7
|
-
version: "1.1",
|
|
8
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
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
4
|
width: "16",
|
|
26
|
-
height: "16"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
5
|
+
height: "16",
|
|
6
|
+
fill: "none",
|
|
7
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
8
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
9
|
+
clipRule: "evenodd",
|
|
10
|
+
d: "m4.832 5.674 2.831-1.11a.913.913 0 0 1 .673 0l2.83 1.11a.548.548 0 0 1 .334.517V9.81a.548.548 0 0 1-.332.517l-2.831 1.11a.92.92 0 0 1-.673 0l-2.83-1.11a.548.548 0 0 1-.334-.517V6.19a.548.548 0 0 1 .332-.517Z",
|
|
11
|
+
stroke: "#212934",
|
|
31
12
|
strokeLinecap: "round",
|
|
32
13
|
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"
|
|
36
|
-
}), /*#__PURE__*/React.createElement("path", {
|
|
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
14
|
}), /*#__PURE__*/React.createElement("path", {
|
|
43
|
-
d: "
|
|
44
|
-
|
|
45
|
-
|
|
15
|
+
d: "M8 7.228 4.822 5.982M8 7.228l3.178-1.246M8 11.281V7.228",
|
|
16
|
+
stroke: "#212934",
|
|
17
|
+
strokeLinecap: "round",
|
|
18
|
+
strokeLinejoin: "round"
|
|
19
|
+
}));
|
|
46
20
|
};
|
|
47
21
|
export default DynamicDimensionIcon;
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import _JSXStyle from "styled-jsx/style";
|
|
1
2
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
3
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
3
4
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
4
5
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
5
|
-
import {
|
|
6
|
+
import { CssVariables } from '@dhis2/ui';
|
|
7
|
+
import cx from 'classnames';
|
|
6
8
|
import PropTypes from 'prop-types';
|
|
7
9
|
import React, { Component, createRef } from 'react';
|
|
8
10
|
import DynamicDimensionIcon from '../../../assets/DynamicDimensionIcon.js';
|
|
9
11
|
import { DIMENSION_PROP_NO_ITEMS, getPredefinedDimensionProp } from '../../../modules/predefinedDimensions.js';
|
|
10
12
|
import OptionsButton from './OptionsButton.js';
|
|
11
13
|
import RecommendedIcon from './RecommendedIcon.js';
|
|
12
|
-
import
|
|
14
|
+
import styles from './styles/DimensionItem.style.js';
|
|
13
15
|
class DimensionItem extends Component {
|
|
14
16
|
constructor() {
|
|
15
17
|
super(...arguments);
|
|
@@ -30,23 +32,18 @@ class DimensionItem extends Component {
|
|
|
30
32
|
_defineProperty(this, "getDimensionIcon", () => {
|
|
31
33
|
const Icon = getPredefinedDimensionProp(this.props.id, 'icon');
|
|
32
34
|
return Icon ? /*#__PURE__*/React.createElement(Icon, {
|
|
33
|
-
|
|
35
|
+
className: "fixedDimensionIcon"
|
|
34
36
|
}) : /*#__PURE__*/React.createElement(DynamicDimensionIcon, {
|
|
35
|
-
|
|
37
|
+
className: "dynamic-dimension-icon"
|
|
36
38
|
});
|
|
37
39
|
});
|
|
38
40
|
_defineProperty(this, "getDimensionType", () => {
|
|
39
41
|
const {
|
|
40
42
|
id,
|
|
41
|
-
name
|
|
42
|
-
isDeactivated
|
|
43
|
+
name
|
|
43
44
|
} = this.props;
|
|
44
45
|
return /*#__PURE__*/React.createElement("span", {
|
|
45
|
-
"data-dimensionid": id
|
|
46
|
-
style: {
|
|
47
|
-
...styles.text,
|
|
48
|
-
...(isDeactivated ? styles.textDeactivated : {})
|
|
49
|
-
}
|
|
46
|
+
"data-dimensionid": id
|
|
50
47
|
}, name);
|
|
51
48
|
});
|
|
52
49
|
}
|
|
@@ -60,51 +57,66 @@ class DimensionItem extends Component {
|
|
|
60
57
|
onClick,
|
|
61
58
|
onOptionsClick,
|
|
62
59
|
innerRef,
|
|
63
|
-
style,
|
|
64
60
|
dataTest,
|
|
61
|
+
className,
|
|
65
62
|
...rest
|
|
66
63
|
} = this.props;
|
|
67
64
|
const Icon = this.getDimensionIcon();
|
|
68
65
|
const Label = this.getDimensionType();
|
|
69
|
-
const itemStyle = isSelected && !isDeactivated ? {
|
|
70
|
-
...styles.item,
|
|
71
|
-
...styles.selected
|
|
72
|
-
} : styles.item;
|
|
73
66
|
const optionsRef = /*#__PURE__*/createRef();
|
|
67
|
+
const LockIcon = /*#__PURE__*/React.createElement("svg", {
|
|
68
|
+
width: "7",
|
|
69
|
+
height: "9",
|
|
70
|
+
fill: "none",
|
|
71
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
72
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
73
|
+
fillRule: "evenodd",
|
|
74
|
+
clipRule: "evenodd",
|
|
75
|
+
d: "M3.5 1A1.5 1.5 0 0 0 2 2.5V3h3v-.5A1.5 1.5 0 0 0 3.5 1ZM1 2.5V3H0v6h7V3H6v-.5a2.5 2.5 0 0 0-5 0ZM1 8V4h5v4H1Zm3-1V5H3v2h1Z",
|
|
76
|
+
fill: "none"
|
|
77
|
+
}));
|
|
74
78
|
const onLabelClick = () => {
|
|
75
79
|
if (!isDeactivated && !getPredefinedDimensionProp(id, DIMENSION_PROP_NO_ITEMS)) {
|
|
76
80
|
onClick(id);
|
|
77
81
|
}
|
|
78
82
|
};
|
|
79
|
-
return /*#__PURE__*/React.createElement(
|
|
83
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CssVariables, {
|
|
84
|
+
colors: true
|
|
85
|
+
}), /*#__PURE__*/React.createElement("li", _extends({
|
|
80
86
|
onMouseOver: this.onMouseOver,
|
|
81
87
|
onMouseLeave: this.onMouseExit,
|
|
82
88
|
ref: innerRef,
|
|
83
|
-
style: Object.assign({}, itemStyle, style, !isDeactivated && styles.clickable),
|
|
84
89
|
"data-test": dataTest,
|
|
85
90
|
onClick: onLabelClick
|
|
86
|
-
}, rest
|
|
87
|
-
className: "
|
|
91
|
+
}, rest, {
|
|
92
|
+
className: `jsx-${styles.__hash}` + " " + (rest && rest.className != null && rest.className || cx('item', {
|
|
93
|
+
deactivated: isDeactivated,
|
|
94
|
+
selected: isSelected && !isDeactivated
|
|
95
|
+
}, className) || "")
|
|
96
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
88
97
|
tabIndex: 0,
|
|
89
|
-
|
|
90
|
-
|
|
98
|
+
"data-test": `${dataTest}-button-${id}`,
|
|
99
|
+
className: `jsx-${styles.__hash}` + " " + "label"
|
|
91
100
|
}, /*#__PURE__*/React.createElement("div", {
|
|
92
|
-
|
|
101
|
+
className: `jsx-${styles.__hash}` + " " + "iconWrapper"
|
|
93
102
|
}, Icon), /*#__PURE__*/React.createElement("div", {
|
|
94
|
-
|
|
95
|
-
},
|
|
103
|
+
className: `jsx-${styles.__hash}` + " " + "labelWrapper"
|
|
104
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
105
|
+
className: `jsx-${styles.__hash}` + " " + "labelText"
|
|
106
|
+
}, Label), /*#__PURE__*/React.createElement(RecommendedIcon, {
|
|
96
107
|
isRecommended: isRecommended,
|
|
97
108
|
dataTest: `${dataTest}-recommended-icon`
|
|
98
|
-
})),
|
|
99
|
-
style: styles.iconWrapper
|
|
100
|
-
}, /*#__PURE__*/React.createElement(IconLock16, null))), onOptionsClick ? /*#__PURE__*/React.createElement("div", {
|
|
101
|
-
style: styles.optionsWrapper,
|
|
109
|
+
}))), onOptionsClick ? /*#__PURE__*/React.createElement("div", {
|
|
102
110
|
ref: optionsRef,
|
|
103
|
-
"data-test": `${dataTest}-menu-${id}
|
|
111
|
+
"data-test": `${dataTest}-menu-${id}`,
|
|
112
|
+
className: `jsx-${styles.__hash}` + " " + "optionsWrapper"
|
|
104
113
|
}, this.state.mouseOver && !isDeactivated && !isLocked ? /*#__PURE__*/React.createElement(OptionsButton, {
|
|
105
|
-
style: styles.optionsButton,
|
|
106
114
|
onClick: this.onOptionsClick(id, optionsRef)
|
|
107
|
-
}) : null) : null
|
|
115
|
+
}) : null) : null, isLocked && /*#__PURE__*/React.createElement("div", {
|
|
116
|
+
className: `jsx-${styles.__hash}` + " " + "lockWrapper"
|
|
117
|
+
}, LockIcon)), /*#__PURE__*/React.createElement(_JSXStyle, {
|
|
118
|
+
id: styles.__hash
|
|
119
|
+
}, styles));
|
|
108
120
|
}
|
|
109
121
|
}
|
|
110
122
|
DimensionItem.propTypes = {
|
|
@@ -112,12 +124,12 @@ DimensionItem.propTypes = {
|
|
|
112
124
|
isSelected: PropTypes.bool.isRequired,
|
|
113
125
|
// XXX
|
|
114
126
|
name: PropTypes.string.isRequired,
|
|
127
|
+
className: PropTypes.string,
|
|
115
128
|
dataTest: PropTypes.string,
|
|
116
129
|
innerRef: PropTypes.func,
|
|
117
130
|
isDeactivated: PropTypes.bool,
|
|
118
131
|
isLocked: PropTypes.bool,
|
|
119
132
|
isRecommended: PropTypes.bool,
|
|
120
|
-
style: PropTypes.object,
|
|
121
133
|
onClick: PropTypes.func,
|
|
122
134
|
onOptionsClick: PropTypes.func
|
|
123
135
|
};
|