@dhis2/analytics 26.4.1 → 26.6.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/build/cjs/__fixtures__/fixtures.js +1 -0
- package/build/cjs/__fixtures__/json/api/analytics/outlierDetection.json +213 -0
- package/build/cjs/api/analytics/Analytics.js +7 -0
- package/build/cjs/api/analytics/AnalyticsAggregate.js +27 -1
- package/build/cjs/api/analytics/AnalyticsBase.js +32 -13
- package/build/cjs/api/analytics/AnalyticsRequest.js +33 -10
- package/build/cjs/api/analytics/AnalyticsRequestBase.js +12 -6
- package/build/cjs/api/analytics/AnalyticsRequestPropertiesMixin.js +19 -0
- package/build/cjs/api/analytics/AnalyticsResponse.js +42 -39
- package/build/cjs/api/analytics/AnalyticsTrackedEntities.js +31 -0
- package/build/cjs/api/analytics/__tests__/Analytics.spec.js +5 -0
- package/build/cjs/api/analytics/__tests__/AnalyticsAggregate.spec.js +29 -0
- package/build/cjs/api/analytics/__tests__/AnalyticsBase.spec.js +36 -2
- package/build/cjs/api/analytics/utils.js +21 -2
- package/build/cjs/components/DataDimension/DataDimension.js +31 -7
- package/build/cjs/components/DataDimension/DataTypeSelector.js +29 -8
- package/build/cjs/components/DataDimension/GroupSelector.js +7 -7
- package/build/cjs/components/DataDimension/ItemSelector.js +79 -61
- package/build/cjs/components/PeriodDimension/PeriodDimension.js +5 -2
- package/build/cjs/components/PeriodDimension/PeriodTransfer.js +64 -31
- package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +1 -1
- package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +1 -12
- package/build/cjs/components/VisTypeIcon.js +6 -1
- package/build/cjs/index.js +43 -1
- package/build/cjs/locales/en/translations.json +5 -1
- package/build/cjs/modules/__tests__/getAdaptedUiLayoutByType.spec.js +15 -0
- package/build/cjs/modules/axis.js +4 -0
- package/build/cjs/modules/getAdaptedUiLayoutByType.js +9 -0
- package/build/cjs/modules/layout/axisGetDimensionIds.js +1 -1
- package/build/cjs/modules/layout/dimension.js +9 -2
- package/build/cjs/modules/layout/dimensionCreate.js +3 -0
- package/build/cjs/modules/layout/dimensionGetId.js +9 -3
- package/build/cjs/modules/layout/layoutFilterDimensions.js +1 -1
- package/build/cjs/modules/layout/layoutGetAxisIdDimensionIdsObject.js +1 -1
- package/build/cjs/modules/layout/layoutGetDimensionIdItemIdsObject.js +1 -1
- package/build/cjs/modules/layout/layoutHasDynamicDimension.js +1 -1
- package/build/cjs/modules/layoutTypes.js +4 -2
- package/build/cjs/modules/layoutUiRules/__tests__/rules.spec.js +13 -1
- package/build/cjs/modules/layoutUiRules/index.js +12 -0
- package/build/cjs/modules/layoutUiRules/rules.js +22 -2
- package/build/cjs/modules/layoutUiRules/rulesHelper.js +4 -2
- package/build/cjs/modules/layoutUiRules/rulesUtils.js +7 -2
- package/build/cjs/modules/visTypeToLayoutType.js +2 -1
- package/build/cjs/modules/visTypes.js +9 -3
- package/build/es/__fixtures__/fixtures.js +1 -0
- package/build/es/__fixtures__/json/api/analytics/outlierDetection.json +213 -0
- package/build/es/api/analytics/Analytics.js +7 -0
- package/build/es/api/analytics/AnalyticsAggregate.js +27 -1
- package/build/es/api/analytics/AnalyticsBase.js +31 -13
- package/build/es/api/analytics/AnalyticsRequest.js +33 -10
- package/build/es/api/analytics/AnalyticsRequestBase.js +12 -6
- package/build/es/api/analytics/AnalyticsRequestPropertiesMixin.js +19 -0
- package/build/es/api/analytics/AnalyticsResponse.js +42 -39
- package/build/es/api/analytics/AnalyticsTrackedEntities.js +24 -0
- package/build/es/api/analytics/__tests__/Analytics.spec.js +5 -0
- package/build/es/api/analytics/__tests__/AnalyticsAggregate.spec.js +29 -0
- package/build/es/api/analytics/__tests__/AnalyticsBase.spec.js +34 -1
- package/build/es/api/analytics/utils.js +18 -1
- package/build/es/components/DataDimension/DataDimension.js +27 -6
- package/build/es/components/DataDimension/DataTypeSelector.js +30 -9
- package/build/es/components/DataDimension/GroupSelector.js +7 -7
- package/build/es/components/DataDimension/ItemSelector.js +80 -62
- package/build/es/components/PeriodDimension/PeriodDimension.js +5 -2
- package/build/es/components/PeriodDimension/PeriodTransfer.js +65 -32
- package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +1 -1
- package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +1 -12
- package/build/es/components/VisTypeIcon.js +8 -3
- package/build/es/index.js +4 -4
- package/build/es/locales/en/translations.json +5 -1
- package/build/es/modules/__tests__/getAdaptedUiLayoutByType.spec.js +16 -1
- package/build/es/modules/axis.js +5 -1
- package/build/es/modules/getAdaptedUiLayoutByType.js +10 -1
- package/build/es/modules/layout/axisGetDimensionIds.js +1 -1
- package/build/es/modules/layout/dimension.js +7 -1
- package/build/es/modules/layout/dimensionCreate.js +4 -1
- package/build/es/modules/layout/dimensionGetId.js +10 -4
- package/build/es/modules/layout/layoutFilterDimensions.js +1 -1
- package/build/es/modules/layout/layoutGetAxisIdDimensionIdsObject.js +1 -1
- package/build/es/modules/layout/layoutGetDimensionIdItemIdsObject.js +1 -1
- package/build/es/modules/layout/layoutHasDynamicDimension.js +1 -1
- package/build/es/modules/layoutTypes.js +2 -1
- package/build/es/modules/layoutUiRules/__tests__/rules.spec.js +14 -2
- package/build/es/modules/layoutUiRules/index.js +2 -2
- package/build/es/modules/layoutUiRules/rules.js +22 -3
- package/build/es/modules/layoutUiRules/rulesHelper.js +3 -2
- package/build/es/modules/layoutUiRules/rulesUtils.js +6 -2
- package/build/es/modules/visTypeToLayoutType.js +4 -3
- package/build/es/modules/visTypes.js +7 -3
- package/package.json +6 -3
|
@@ -58,7 +58,8 @@ class AnalyticsResponse {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
extractHeaders() {
|
|
61
|
-
|
|
61
|
+
// some endpoints (ie. outlierDetection) don't return dimensions in metaData
|
|
62
|
+
const dimensions = this.response.metaData.dimensions || {};
|
|
62
63
|
const headers = this.response.headers || [];
|
|
63
64
|
return headers.map((header, index) => new _AnalyticsResponseHeader.default(header, {
|
|
64
65
|
isPrefix: isPrefixHeader(header, dimensions[header.name]),
|
|
@@ -94,48 +95,50 @@ class AnalyticsResponse {
|
|
|
94
95
|
items
|
|
95
96
|
} = metaData;
|
|
96
97
|
|
|
97
|
-
//
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
// some endpoints (ie. outlierDetection) don't return dimensions or items
|
|
99
|
+
if (dimensions && items) {
|
|
100
|
+
this.headers.filter(header => !DEFAULT_COLLECT_IGNORE_HEADERS.includes(header.name)).forEach(header => {
|
|
101
|
+
let ids;
|
|
100
102
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// create items
|
|
113
|
-
dimensions[header.name].forEach((prefixedId, index) => {
|
|
114
|
-
const id = ids[index];
|
|
115
|
-
const valueType = header.valueType;
|
|
116
|
-
const name = getNameByIdsByValueType(id, valueType);
|
|
117
|
-
items[prefixedId] = {
|
|
118
|
-
name
|
|
119
|
-
};
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
});
|
|
103
|
+
// collect row values
|
|
104
|
+
if (header.isCollect) {
|
|
105
|
+
ids = this.getSortedUniqueRowIdStringsByHeader(header);
|
|
106
|
+
dimensions[header.name] = ids;
|
|
107
|
+
} else {
|
|
108
|
+
ids = dimensions[header.name];
|
|
109
|
+
}
|
|
110
|
+
if (header.isPrefix) {
|
|
111
|
+
// create prefixed dimensions array
|
|
112
|
+
dimensions[header.name] = ids.map(id => getPrefixedId(id, header.name));
|
|
123
113
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
ouName = row[ouNameHeaderIndex];
|
|
134
|
-
items[ouId] = {
|
|
135
|
-
name: ouName
|
|
136
|
-
};
|
|
114
|
+
// create items
|
|
115
|
+
dimensions[header.name].forEach((prefixedId, index) => {
|
|
116
|
+
const id = ids[index];
|
|
117
|
+
const valueType = header.valueType;
|
|
118
|
+
const name = getNameByIdsByValueType(id, valueType);
|
|
119
|
+
items[prefixedId] = {
|
|
120
|
+
name
|
|
121
|
+
};
|
|
122
|
+
});
|
|
137
123
|
}
|
|
138
124
|
});
|
|
125
|
+
|
|
126
|
+
// for events, add items from 'ouname'
|
|
127
|
+
if (this.hasHeader(OUNAME) && this.hasHeader(OU)) {
|
|
128
|
+
const ouNameHeaderIndex = this.getHeader(OUNAME).getIndex();
|
|
129
|
+
const ouHeaderIndex = this.getHeader(OU).getIndex();
|
|
130
|
+
let ouId;
|
|
131
|
+
let ouName;
|
|
132
|
+
this.rows.forEach(row => {
|
|
133
|
+
ouId = row[ouHeaderIndex];
|
|
134
|
+
if (items[ouId] === undefined) {
|
|
135
|
+
ouName = row[ouNameHeaderIndex];
|
|
136
|
+
items[ouId] = {
|
|
137
|
+
name: ouName
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
139
142
|
}
|
|
140
143
|
return metaData;
|
|
141
144
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _AnalyticsBase = _interopRequireDefault(require("./AnalyticsBase.js"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
/**
|
|
10
|
+
* @extends module:analytics.AnalyticsBase
|
|
11
|
+
*
|
|
12
|
+
* @description
|
|
13
|
+
* Analytics tracked entities class used to request analytics tracked entities data from Web API.
|
|
14
|
+
*
|
|
15
|
+
* @memberof module:analytics
|
|
16
|
+
*/
|
|
17
|
+
class AnalyticsTrackedEntities extends _AnalyticsBase.default {
|
|
18
|
+
/**
|
|
19
|
+
* @param {!AnalyticsRequest} req Request object
|
|
20
|
+
*
|
|
21
|
+
* @returns {Promise} Promise that resolves with the analytics query data from the api.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
// TODO: provide working example
|
|
25
|
+
*/
|
|
26
|
+
getQuery(req) {
|
|
27
|
+
return this.fetch(req.withPath('trackedEntities/query'));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
var _default = AnalyticsTrackedEntities;
|
|
31
|
+
exports.default = _default;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _Analytics = _interopRequireDefault(require("../Analytics.js"));
|
|
4
4
|
var _AnalyticsAggregate = _interopRequireDefault(require("../AnalyticsAggregate.js"));
|
|
5
|
+
var _AnalyticsEnrollments = _interopRequireDefault(require("../AnalyticsEnrollments.js"));
|
|
5
6
|
var _AnalyticsEvents = _interopRequireDefault(require("../AnalyticsEvents.js"));
|
|
6
7
|
var _AnalyticsRequest = _interopRequireDefault(require("../AnalyticsRequest.js"));
|
|
7
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -10,6 +11,7 @@ describe('Analytics', () => {
|
|
|
10
11
|
beforeEach(() => {
|
|
11
12
|
analytics = new _Analytics.default({
|
|
12
13
|
aggregate: new _AnalyticsAggregate.default(),
|
|
14
|
+
enrollments: new _AnalyticsEnrollments.default(),
|
|
13
15
|
events: new _AnalyticsEvents.default(),
|
|
14
16
|
request: _AnalyticsRequest.default
|
|
15
17
|
});
|
|
@@ -23,6 +25,9 @@ describe('Analytics', () => {
|
|
|
23
25
|
it('should contain an instance of AnalyticsAggregate', () => {
|
|
24
26
|
expect(analytics.aggregate).toBeInstanceOf(_AnalyticsAggregate.default);
|
|
25
27
|
});
|
|
28
|
+
it('should contain an instance of AnalyticsEnrollments', () => {
|
|
29
|
+
expect(analytics.enrollments).toBeInstanceOf(_AnalyticsEnrollments.default);
|
|
30
|
+
});
|
|
26
31
|
it('should contain an instance of AnalyticsEvents', () => {
|
|
27
32
|
expect(analytics.events).toBeInstanceOf(_AnalyticsEvents.default);
|
|
28
33
|
});
|
|
@@ -87,4 +87,33 @@ describe('Analytics.aggregate', () => {
|
|
|
87
87
|
expect(data.height).toEqual(0);
|
|
88
88
|
}));
|
|
89
89
|
});
|
|
90
|
+
describe('.getOutliersData', () => {
|
|
91
|
+
beforeEach(() => {
|
|
92
|
+
aggregate = new _AnalyticsAggregate.default(new _DataEngine.default());
|
|
93
|
+
request = new _AnalyticsRequest.default();
|
|
94
|
+
request.withParameters({
|
|
95
|
+
dx: 'fbfJHSPpUQD,cYeuwXTCPkU',
|
|
96
|
+
pe: 'THIS_YEAR',
|
|
97
|
+
ou: 'at6UHUQatSo',
|
|
98
|
+
headers: 'dxname,pename,ouname,value,absdev,modifiedzscore,median,lowerbound,upperbound',
|
|
99
|
+
algorithm: 'MOD_Z_SCORE',
|
|
100
|
+
maxResults: 100,
|
|
101
|
+
threshold: 3
|
|
102
|
+
});
|
|
103
|
+
fixture = _fixtures.default.get('/api/analytics/outlierDetection');
|
|
104
|
+
dataEngineMock.query.mockReturnValue(Promise.resolve({
|
|
105
|
+
data: fixture
|
|
106
|
+
}));
|
|
107
|
+
});
|
|
108
|
+
it('should be a function', () => {
|
|
109
|
+
expect(aggregate.getOutliersData).toBeInstanceOf(Function);
|
|
110
|
+
});
|
|
111
|
+
it('should resolve a promise with data', () => aggregate.getOutliersData(request).then(data => {
|
|
112
|
+
expect(data.metaData.items).toEqual(fixture.metaData.items);
|
|
113
|
+
expect(data.metaData.dimensions).toEqual(fixture.metaData.dimensions);
|
|
114
|
+
expect(data.headers).toEqual(fixture.headers);
|
|
115
|
+
expect(data.width).toEqual(8);
|
|
116
|
+
expect(data.height).toEqual(13);
|
|
117
|
+
}));
|
|
118
|
+
});
|
|
90
119
|
});
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _AnalyticsBase =
|
|
4
|
-
function
|
|
3
|
+
var _AnalyticsBase = _interopRequireWildcard(require("../AnalyticsBase.js"));
|
|
4
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
5
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
5
6
|
let base;
|
|
6
7
|
describe('constructor', () => {
|
|
7
8
|
beforeEach(() => {
|
|
@@ -15,4 +16,37 @@ describe('constructor', () => {
|
|
|
15
16
|
base = new _AnalyticsBase.default(dataEngineMock);
|
|
16
17
|
expect(base.dataEngine).toBe(dataEngineMock);
|
|
17
18
|
});
|
|
19
|
+
});
|
|
20
|
+
describe('generateDimensionString', () => {
|
|
21
|
+
const tests = [{
|
|
22
|
+
input: [{
|
|
23
|
+
dimension: 'dim2',
|
|
24
|
+
items: ['item2', 'item1']
|
|
25
|
+
}, {
|
|
26
|
+
dimension: 'dim1',
|
|
27
|
+
items: ['item1']
|
|
28
|
+
}],
|
|
29
|
+
output: ['dim2:item2;item1', 'dim1:item1'],
|
|
30
|
+
outputSorted: ['dim1:item1', 'dim2:item1;item2']
|
|
31
|
+
}];
|
|
32
|
+
it('should return dimension strings correctly formatted', () => {
|
|
33
|
+
tests.forEach(_ref => {
|
|
34
|
+
let {
|
|
35
|
+
input,
|
|
36
|
+
output
|
|
37
|
+
} = _ref;
|
|
38
|
+
expect((0, _AnalyticsBase.generateDimensionStrings)(input)).toEqual(output);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
it('should return dimension strings correctly formatted and sorted', () => {
|
|
42
|
+
tests.forEach(_ref2 => {
|
|
43
|
+
let {
|
|
44
|
+
input,
|
|
45
|
+
outputSorted
|
|
46
|
+
} = _ref2;
|
|
47
|
+
expect((0, _AnalyticsBase.generateDimensionStrings)(input, {
|
|
48
|
+
sorted: true
|
|
49
|
+
})).toEqual(outputSorted);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
18
52
|
});
|
|
@@ -3,10 +3,29 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.customEncodeURIComponent = void 0;
|
|
6
|
+
exports.formatRequestPath = exports.formatDimension = exports.customEncodeURIComponent = void 0;
|
|
7
7
|
// Define our very own special list of characters that we don't want to encode in the URI
|
|
8
8
|
const whitelistURI = ',&$=/;:';
|
|
9
9
|
const whitelistURICodes = whitelistURI.split('').map(c => encodeURIComponent(c));
|
|
10
10
|
const whitelistRegExp = new RegExp(`(?:${whitelistURICodes.join('|')})`, 'g');
|
|
11
11
|
const customEncodeURIComponent = uri => encodeURIComponent(uri).replace(whitelistRegExp, decodeURIComponent);
|
|
12
|
-
exports.customEncodeURIComponent = customEncodeURIComponent;
|
|
12
|
+
exports.customEncodeURIComponent = customEncodeURIComponent;
|
|
13
|
+
const formatRequestPath = _ref => {
|
|
14
|
+
let {
|
|
15
|
+
path,
|
|
16
|
+
program,
|
|
17
|
+
trackedEntityType
|
|
18
|
+
} = _ref;
|
|
19
|
+
return [path, program, trackedEntityType].filter(Boolean).join('/');
|
|
20
|
+
};
|
|
21
|
+
exports.formatRequestPath = formatRequestPath;
|
|
22
|
+
const formatDimension = _ref2 => {
|
|
23
|
+
let {
|
|
24
|
+
outputType,
|
|
25
|
+
programId,
|
|
26
|
+
programStageId,
|
|
27
|
+
dimension
|
|
28
|
+
} = _ref2;
|
|
29
|
+
return [outputType === 'TRACKED_ENTITY_INSTANCE' ? programId : undefined, programStageId, dimension].filter(Boolean).join('.');
|
|
30
|
+
};
|
|
31
|
+
exports.formatDimension = formatDimension;
|
|
@@ -3,25 +3,40 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = void 0;
|
|
6
|
+
exports.useDataDimensionContext = exports.default = void 0;
|
|
7
7
|
var _appRuntime = require("@dhis2/app-runtime");
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
-
var _react =
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _dataTypes = require("../../modules/dataTypes.js");
|
|
10
11
|
var _predefinedDimensions = require("../../modules/predefinedDimensions.js");
|
|
11
12
|
var _ItemSelector = _interopRequireDefault(require("./ItemSelector.js"));
|
|
13
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
const DataDimensionCtx = /*#__PURE__*/(0, _react.createContext)({});
|
|
13
17
|
const DataDimension = _ref => {
|
|
14
18
|
let {
|
|
15
19
|
onSelect,
|
|
16
20
|
selectedDimensions,
|
|
17
21
|
displayNameProp,
|
|
22
|
+
enabledDataTypes,
|
|
18
23
|
infoBoxMessage,
|
|
19
|
-
onCalculationSave
|
|
24
|
+
onCalculationSave,
|
|
25
|
+
visType
|
|
20
26
|
} = _ref;
|
|
21
27
|
const {
|
|
22
28
|
serverVersion
|
|
23
29
|
} = (0, _appRuntime.useConfig)();
|
|
24
|
-
const
|
|
30
|
+
const filterDataTypesByVersion = (0, _react.useCallback)(dataTypes => dataTypes.filter(_ref2 => {
|
|
31
|
+
let {
|
|
32
|
+
id
|
|
33
|
+
} = _ref2;
|
|
34
|
+
return (
|
|
35
|
+
// Calculations only available from 2.40
|
|
36
|
+
id !== _dataTypes.DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM || serverVersion.minor >= 40
|
|
37
|
+
);
|
|
38
|
+
}), [serverVersion.minor]);
|
|
39
|
+
const [dataTypes, setDataTypes] = (0, _react.useState)(filterDataTypesByVersion(enabledDataTypes || Object.values(_dataTypes.dataTypeMap)));
|
|
25
40
|
const onSelectItems = selectedItem => onSelect({
|
|
26
41
|
dimensionId: _predefinedDimensions.DIMENSION_ID_DATA,
|
|
27
42
|
items: selectedItem.map(item => ({
|
|
@@ -31,7 +46,12 @@ const DataDimension = _ref => {
|
|
|
31
46
|
expression: item.expression
|
|
32
47
|
}))
|
|
33
48
|
});
|
|
34
|
-
|
|
49
|
+
(0, _react.useEffect)(() => enabledDataTypes && setDataTypes(filterDataTypesByVersion(enabledDataTypes)), [enabledDataTypes, filterDataTypesByVersion]);
|
|
50
|
+
return /*#__PURE__*/_react.default.createElement(DataDimensionCtx.Provider, {
|
|
51
|
+
value: {
|
|
52
|
+
visType
|
|
53
|
+
}
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement(_ItemSelector.default, {
|
|
35
55
|
selectedItems: selectedDimensions.map(item => ({
|
|
36
56
|
value: item.id,
|
|
37
57
|
label: item.name,
|
|
@@ -44,9 +64,9 @@ const DataDimension = _ref => {
|
|
|
44
64
|
displayNameProp: displayNameProp,
|
|
45
65
|
infoBoxMessage: infoBoxMessage,
|
|
46
66
|
dataTest: 'data-dimension',
|
|
47
|
-
|
|
67
|
+
dataTypes: dataTypes,
|
|
48
68
|
onEDISave: onCalculationSave
|
|
49
|
-
});
|
|
69
|
+
}));
|
|
50
70
|
};
|
|
51
71
|
DataDimension.propTypes = {
|
|
52
72
|
displayNameProp: _propTypes.default.string.isRequired,
|
|
@@ -58,12 +78,16 @@ DataDimension.propTypes = {
|
|
|
58
78
|
type: _propTypes.default.string
|
|
59
79
|
})).isRequired,
|
|
60
80
|
onSelect: _propTypes.default.func.isRequired,
|
|
81
|
+
enabledDataTypes: _propTypes.default.array,
|
|
61
82
|
infoBoxMessage: _propTypes.default.string,
|
|
83
|
+
visType: _propTypes.default.string,
|
|
62
84
|
onCalculationSave: _propTypes.default.func
|
|
63
85
|
};
|
|
64
86
|
DataDimension.defaultProps = {
|
|
65
87
|
selectedDimensions: [],
|
|
66
88
|
onSelect: Function.prototype
|
|
67
89
|
};
|
|
90
|
+
const useDataDimensionContext = () => (0, _react.useContext)(DataDimensionCtx);
|
|
91
|
+
exports.useDataDimensionContext = useDataDimensionContext;
|
|
68
92
|
var _default = DataDimension;
|
|
69
93
|
exports.default = _default;
|
|
@@ -10,22 +10,43 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
|
11
11
|
var _index = _interopRequireDefault(require("../../locales/index.js"));
|
|
12
12
|
var _dataTypes = require("../../modules/dataTypes.js");
|
|
13
|
+
var _visTypes = require("../../modules/visTypes.js");
|
|
14
|
+
var _DataDimension = require("./DataDimension.js");
|
|
13
15
|
var _DataTypeSelectorStyle = _interopRequireDefault(require("./styles/DataTypeSelector.style.js"));
|
|
14
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
17
|
const DataTypeSelector = _ref => {
|
|
16
|
-
var _dataTypes$currentDat;
|
|
17
18
|
let {
|
|
18
19
|
currentDataType,
|
|
20
|
+
dataTypes,
|
|
19
21
|
onChange,
|
|
20
|
-
dataTest
|
|
21
|
-
includeCalculations
|
|
22
|
+
dataTest
|
|
22
23
|
} = _ref;
|
|
24
|
+
const {
|
|
25
|
+
visType
|
|
26
|
+
} = (0, _DataDimension.useDataDimensionContext)();
|
|
27
|
+
const label = _index.default.t('Data Type');
|
|
23
28
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
24
29
|
className: `jsx-${_DataTypeSelectorStyle.default.__hash}` + " " + "container"
|
|
25
|
-
}, /*#__PURE__*/_react.default.createElement(_ui.SingleSelectField, {
|
|
26
|
-
label:
|
|
30
|
+
}, dataTypes.length === 1 ? /*#__PURE__*/_react.default.createElement(_ui.SingleSelectField, {
|
|
31
|
+
label: label,
|
|
27
32
|
dataTest: dataTest,
|
|
28
|
-
selected:
|
|
33
|
+
selected: dataTypes[0].id,
|
|
34
|
+
onChange: ref => onChange(ref.selected),
|
|
35
|
+
dense: true,
|
|
36
|
+
disabled: true,
|
|
37
|
+
helpText: visType ? _index.default.t('Only {{dataType}} can be used in {{visType}}', {
|
|
38
|
+
dataType: _dataTypes.dataTypeMap[dataTypes[0].id].getName(),
|
|
39
|
+
visType: (0, _visTypes.getDisplayNameByVisType)(visType)
|
|
40
|
+
}) : ''
|
|
41
|
+
}, dataTypes.map(type => /*#__PURE__*/_react.default.createElement(_ui.SingleSelectOption, {
|
|
42
|
+
value: type.id,
|
|
43
|
+
key: type.id,
|
|
44
|
+
label: type.getName(),
|
|
45
|
+
dataTest: `${dataTest}-option-${type.id}`
|
|
46
|
+
}))) : /*#__PURE__*/_react.default.createElement(_ui.SingleSelectField, {
|
|
47
|
+
label: label,
|
|
48
|
+
dataTest: dataTest,
|
|
49
|
+
selected: currentDataType || _dataTypes.DIMENSION_TYPE_ALL,
|
|
29
50
|
onChange: ref => onChange(ref.selected),
|
|
30
51
|
dense: true
|
|
31
52
|
}, /*#__PURE__*/_react.default.createElement(_ui.SingleSelectOption, {
|
|
@@ -33,7 +54,7 @@ const DataTypeSelector = _ref => {
|
|
|
33
54
|
key: _dataTypes.DIMENSION_TYPE_ALL,
|
|
34
55
|
label: _index.default.t('All types'),
|
|
35
56
|
dataTest: `${dataTest}-option-all`
|
|
36
|
-
}),
|
|
57
|
+
}), dataTypes.map(type => /*#__PURE__*/_react.default.createElement(_ui.SingleSelectOption, {
|
|
37
58
|
value: type.id,
|
|
38
59
|
key: type.id,
|
|
39
60
|
label: type.getName(),
|
|
@@ -46,7 +67,7 @@ DataTypeSelector.propTypes = {
|
|
|
46
67
|
currentDataType: _propTypes.default.string.isRequired,
|
|
47
68
|
onChange: _propTypes.default.func.isRequired,
|
|
48
69
|
dataTest: _propTypes.default.string,
|
|
49
|
-
|
|
70
|
+
dataTypes: _propTypes.default.array
|
|
50
71
|
};
|
|
51
72
|
var _default = DataTypeSelector;
|
|
52
73
|
exports.default = _default;
|
|
@@ -34,15 +34,15 @@ const GroupSelector = _ref => {
|
|
|
34
34
|
const [isLoading, setIsLoading] = (0, _react.useState)(true);
|
|
35
35
|
const defaultGroup = (_dataTypes$dataType = _dataTypes.dataTypeMap[dataType]) === null || _dataTypes$dataType === void 0 ? void 0 : _dataTypes$dataType.defaultGroup;
|
|
36
36
|
const subGroupType = (_dataTypes$dataType2 = _dataTypes.dataTypeMap[dataType]) === null || _dataTypes$dataType2 === void 0 ? void 0 : _dataTypes$dataType2.subGroup;
|
|
37
|
-
const fetchGroups = async () => {
|
|
38
|
-
setIsLoading(true);
|
|
39
|
-
const result = await (0, _dimensions.apiFetchGroups)(dataEngine, dataType, displayNameProp);
|
|
40
|
-
setGroups(result);
|
|
41
|
-
setIsLoading(false);
|
|
42
|
-
};
|
|
43
37
|
(0, _react.useEffect)(() => {
|
|
38
|
+
const fetchGroups = async () => {
|
|
39
|
+
setIsLoading(true);
|
|
40
|
+
const result = await (0, _dimensions.apiFetchGroups)(dataEngine, dataType, displayNameProp);
|
|
41
|
+
setGroups(result);
|
|
42
|
+
setIsLoading(false);
|
|
43
|
+
};
|
|
44
44
|
fetchGroups();
|
|
45
|
-
}, [dataType]);
|
|
45
|
+
}, [dataEngine, dataType, displayNameProp]);
|
|
46
46
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
47
47
|
className: `jsx-${_GroupSelectorStyle.default.__hash}` + " " + "container"
|
|
48
48
|
}, /*#__PURE__*/_react.default.createElement(_style.default, {
|