@dhis2/analytics 26.13.3 → 27.0.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/components/FileMenu/FileMenu.js +1 -2
- package/build/cjs/components/FileMenu/RenameDialog.js +10 -66
- package/build/cjs/components/FileMenu/__tests__/RenameDialog.spec.js +65 -33
- package/build/cjs/components/FileMenu/__tests__/utils.spec.js +239 -0
- package/build/cjs/components/FileMenu/utils.js +59 -3
- package/build/cjs/index.js +14 -0
- package/build/cjs/locales/en/translations.json +2 -0
- package/build/cjs/modules/visTypes.js +32 -2
- package/build/cjs/visualizations/util/__tests__/getFilterText.spec.js +11 -15
- package/build/cjs/visualizations/util/getFilterText.js +8 -0
- package/build/es/components/FileMenu/FileMenu.js +1 -2
- package/build/es/components/FileMenu/RenameDialog.js +12 -68
- package/build/es/components/FileMenu/__tests__/RenameDialog.spec.js +64 -32
- package/build/es/components/FileMenu/__tests__/utils.spec.js +237 -0
- package/build/es/components/FileMenu/utils.js +56 -1
- package/build/es/index.js +2 -2
- package/build/es/locales/en/translations.json +2 -0
- package/build/es/modules/visTypes.js +30 -1
- package/build/es/visualizations/util/__tests__/getFilterText.spec.js +11 -15
- package/build/es/visualizations/util/getFilterText.js +9 -1
- package/package.json +3 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import i18n from '@dhis2/d2-i18n';
|
|
2
|
+
import { getDisplayNameByVisType, getApiEndpointByVisType } from '../../modules/visTypes.js';
|
|
2
3
|
export const FILE_TYPE_EVENT_REPORT = 'eventReport';
|
|
3
4
|
export const FILE_TYPE_VISUALIZATION = 'visualization';
|
|
4
5
|
export const FILE_TYPE_MAP = 'map';
|
|
@@ -34,11 +35,65 @@ export const appPathFor = (fileType, id, apiVersion) => {
|
|
|
34
35
|
};
|
|
35
36
|
export const preparePayloadForSaveAs = _ref => {
|
|
36
37
|
let {
|
|
37
|
-
|
|
38
|
+
visualization,
|
|
39
|
+
name,
|
|
40
|
+
description
|
|
38
41
|
} = _ref;
|
|
39
42
|
delete visualization.id;
|
|
40
43
|
delete visualization.created;
|
|
41
44
|
delete visualization.createdBy;
|
|
42
45
|
delete visualization.user;
|
|
46
|
+
visualization.name = name || visualization.name || i18n.t('Untitled {{visualizationType}}, {{date}}', {
|
|
47
|
+
visualizationType: getDisplayNameByVisType(visualization.type),
|
|
48
|
+
date: new Date().toLocaleDateString(undefined, {
|
|
49
|
+
year: 'numeric',
|
|
50
|
+
month: 'short',
|
|
51
|
+
day: '2-digit'
|
|
52
|
+
})
|
|
53
|
+
});
|
|
54
|
+
visualization.description = description !== undefined ? description : visualization.description;
|
|
55
|
+
return visualization;
|
|
56
|
+
};
|
|
57
|
+
const getSubscriberQuery = type => ({
|
|
58
|
+
ao: {
|
|
59
|
+
resource: getApiEndpointByVisType(type),
|
|
60
|
+
id: _ref2 => {
|
|
61
|
+
let {
|
|
62
|
+
id
|
|
63
|
+
} = _ref2;
|
|
64
|
+
return id;
|
|
65
|
+
},
|
|
66
|
+
params: {
|
|
67
|
+
fields: 'subscribers'
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const apiFetchAOSubscribers = (dataEngine, id, type) => {
|
|
72
|
+
return dataEngine.query(getSubscriberQuery(type), {
|
|
73
|
+
variables: {
|
|
74
|
+
id
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
export const preparePayloadForSave = async _ref3 => {
|
|
79
|
+
let {
|
|
80
|
+
visualization,
|
|
81
|
+
name,
|
|
82
|
+
description,
|
|
83
|
+
engine
|
|
84
|
+
} = _ref3;
|
|
85
|
+
const {
|
|
86
|
+
ao
|
|
87
|
+
} = await apiFetchAOSubscribers(engine, visualization.id, visualization.type);
|
|
88
|
+
visualization.subscribers = ao.subscribers;
|
|
89
|
+
visualization.name = name || visualization.name || i18n.t('Untitled {{visualizationType}}, {{date}}', {
|
|
90
|
+
visualizationType: getDisplayNameByVisType(visualization.type),
|
|
91
|
+
date: new Date().toLocaleDateString(undefined, {
|
|
92
|
+
year: 'numeric',
|
|
93
|
+
month: 'short',
|
|
94
|
+
day: '2-digit'
|
|
95
|
+
})
|
|
96
|
+
});
|
|
97
|
+
visualization.description = description !== undefined ? description : visualization.description;
|
|
43
98
|
return visualization;
|
|
44
99
|
};
|
package/build/es/index.js
CHANGED
|
@@ -12,7 +12,7 @@ export { default as DimensionFilter } from './components/Filter/Filter.js';
|
|
|
12
12
|
export { default as DimensionMenu } from './components/DimensionMenu.js';
|
|
13
13
|
export { default as PivotTable } from './components/PivotTable/PivotTable.js';
|
|
14
14
|
export { default as FileMenu } from './components/FileMenu/FileMenu.js';
|
|
15
|
-
export { preparePayloadForSaveAs } from './components/FileMenu/utils.js';
|
|
15
|
+
export { preparePayloadForSaveAs, preparePayloadForSave } from './components/FileMenu/utils.js';
|
|
16
16
|
export { default as VisTypeIcon } from './components/VisTypeIcon.js';
|
|
17
17
|
export { default as LegendKey } from './components/LegendKey/LegendKey.js';
|
|
18
18
|
export { default as AboutAOUnit } from './components/AboutAOUnit/AboutAOUnit.js';
|
|
@@ -99,7 +99,7 @@ export { getLayoutTypeByVisType } from './modules/visTypeToLayoutType.js';
|
|
|
99
99
|
|
|
100
100
|
// Modules: visTypes
|
|
101
101
|
|
|
102
|
-
export { VIS_TYPE_GROUP_ALL, VIS_TYPE_GROUP_CHARTS, VIS_TYPE_COLUMN, VIS_TYPE_STACKED_COLUMN, VIS_TYPE_BAR, VIS_TYPE_STACKED_BAR, VIS_TYPE_LINE, VIS_TYPE_AREA, VIS_TYPE_STACKED_AREA, VIS_TYPE_PIE, VIS_TYPE_RADAR, VIS_TYPE_GAUGE, VIS_TYPE_BUBBLE, VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_SINGLE_VALUE, VIS_TYPE_PIVOT_TABLE, VIS_TYPE_SCATTER, VIS_TYPE_LINE_LIST, VIS_TYPE_OUTLIER_TABLE, visTypeDisplayNames, visTypeIcons, getDisplayNameByVisType, defaultVisType, isStacked, isMultiType, isYearOverYear, isDualAxisType, isSingleValue, isOutlierTable, isTwoCategoryChartType, isLegendSetType, isColumnBasedType, isVerticalType } from './modules/visTypes.js';
|
|
102
|
+
export { VIS_TYPE_GROUP_ALL, VIS_TYPE_GROUP_CHARTS, VIS_TYPE_COLUMN, VIS_TYPE_STACKED_COLUMN, VIS_TYPE_BAR, VIS_TYPE_STACKED_BAR, VIS_TYPE_LINE, VIS_TYPE_AREA, VIS_TYPE_STACKED_AREA, VIS_TYPE_PIE, VIS_TYPE_RADAR, VIS_TYPE_GAUGE, VIS_TYPE_BUBBLE, VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_SINGLE_VALUE, VIS_TYPE_PIVOT_TABLE, VIS_TYPE_SCATTER, VIS_TYPE_LINE_LIST, VIS_TYPE_OUTLIER_TABLE, VIS_TYPE_MAP, visTypeDisplayNames, visTypeIcons, getDisplayNameByVisType, defaultVisType, isStacked, isMultiType, isYearOverYear, isDualAxisType, isSingleValue, isOutlierTable, isTwoCategoryChartType, isLegendSetType, isColumnBasedType, isVerticalType } from './modules/visTypes.js';
|
|
103
103
|
|
|
104
104
|
// Modules: layoutTypes
|
|
105
105
|
|
|
@@ -162,6 +162,7 @@
|
|
|
162
162
|
"line list": "line list",
|
|
163
163
|
"map": "map",
|
|
164
164
|
"visualization": "visualization",
|
|
165
|
+
"Untitled {{visualizationType}}, {{date}}": "Untitled {{visualizationType}}, {{date}}",
|
|
165
166
|
"Edit": "Edit",
|
|
166
167
|
"Write a reply": "Write a reply",
|
|
167
168
|
"Post reply": "Post reply",
|
|
@@ -451,6 +452,7 @@
|
|
|
451
452
|
"Single value": "Single value",
|
|
452
453
|
"Outlier table": "Outlier table",
|
|
453
454
|
"All charts": "All charts",
|
|
455
|
+
"Map": "Map",
|
|
454
456
|
"{{seriesName}} (trend)": "{{seriesName}} (trend)",
|
|
455
457
|
"Trend": "Trend",
|
|
456
458
|
"No legend for this series": "No legend for this series",
|
|
@@ -20,6 +20,7 @@ export const VIS_TYPE_BUBBLE = 'BUBBLE';
|
|
|
20
20
|
export const VIS_TYPE_GROUP_ALL = 'ALL';
|
|
21
21
|
export const VIS_TYPE_GROUP_CHARTS = 'CHARTS';
|
|
22
22
|
export const VIS_TYPE_OUTLIER_TABLE = 'OUTLIER_TABLE';
|
|
23
|
+
export const VIS_TYPE_MAP = 'MAP';
|
|
23
24
|
export const visTypeDisplayNames = {
|
|
24
25
|
[VIS_TYPE_PIVOT_TABLE]: i18n.t('Pivot table'),
|
|
25
26
|
[VIS_TYPE_AREA]: i18n.t('Area'),
|
|
@@ -39,7 +40,8 @@ export const visTypeDisplayNames = {
|
|
|
39
40
|
[VIS_TYPE_SINGLE_VALUE]: i18n.t('Single value'),
|
|
40
41
|
[VIS_TYPE_OUTLIER_TABLE]: i18n.t('Outlier table'),
|
|
41
42
|
[VIS_TYPE_GROUP_ALL]: i18n.t('All types'),
|
|
42
|
-
[VIS_TYPE_GROUP_CHARTS]: i18n.t('All charts')
|
|
43
|
+
[VIS_TYPE_GROUP_CHARTS]: i18n.t('All charts'),
|
|
44
|
+
[VIS_TYPE_MAP]: i18n.t('Map')
|
|
43
45
|
};
|
|
44
46
|
export const visTypeIcons = {
|
|
45
47
|
[VIS_TYPE_PIVOT_TABLE]: IconVisualizationPivotTable24,
|
|
@@ -60,6 +62,26 @@ export const visTypeIcons = {
|
|
|
60
62
|
[VIS_TYPE_SINGLE_VALUE]: IconVisualizationSingleValue24,
|
|
61
63
|
[VIS_TYPE_OUTLIER_TABLE]: IconVisualizationOutlierTable24
|
|
62
64
|
};
|
|
65
|
+
const visTypeApiEndpoints = {
|
|
66
|
+
[VIS_TYPE_PIVOT_TABLE]: 'visualizations',
|
|
67
|
+
[VIS_TYPE_AREA]: 'visualizations',
|
|
68
|
+
[VIS_TYPE_STACKED_AREA]: 'visualizations',
|
|
69
|
+
[VIS_TYPE_BAR]: 'visualizations',
|
|
70
|
+
[VIS_TYPE_STACKED_BAR]: 'visualizations',
|
|
71
|
+
[VIS_TYPE_COLUMN]: 'visualizations',
|
|
72
|
+
[VIS_TYPE_YEAR_OVER_YEAR_COLUMN]: 'visualizations',
|
|
73
|
+
[VIS_TYPE_STACKED_COLUMN]: 'visualizations',
|
|
74
|
+
[VIS_TYPE_GAUGE]: 'visualizations',
|
|
75
|
+
[VIS_TYPE_LINE]: 'visualizations',
|
|
76
|
+
[VIS_TYPE_YEAR_OVER_YEAR_LINE]: 'visualizations',
|
|
77
|
+
[VIS_TYPE_PIE]: 'visualizations',
|
|
78
|
+
[VIS_TYPE_RADAR]: 'visualizations',
|
|
79
|
+
[VIS_TYPE_SCATTER]: 'visualizations',
|
|
80
|
+
[VIS_TYPE_SINGLE_VALUE]: 'visualizations',
|
|
81
|
+
[VIS_TYPE_OUTLIER_TABLE]: 'visualizations',
|
|
82
|
+
[VIS_TYPE_LINE_LIST]: 'eventVisualizations',
|
|
83
|
+
[VIS_TYPE_MAP]: 'maps'
|
|
84
|
+
};
|
|
63
85
|
export const getDisplayNameByVisType = visType => {
|
|
64
86
|
const displayName = visTypeDisplayNames[visType];
|
|
65
87
|
if (!displayName) {
|
|
@@ -67,6 +89,13 @@ export const getDisplayNameByVisType = visType => {
|
|
|
67
89
|
}
|
|
68
90
|
return displayName;
|
|
69
91
|
};
|
|
92
|
+
export const getApiEndpointByVisType = visType => {
|
|
93
|
+
const apiEndpoint = visTypeApiEndpoints[visType];
|
|
94
|
+
if (!apiEndpoint) {
|
|
95
|
+
throw new Error(`${visType} is not a valid visualization type`);
|
|
96
|
+
}
|
|
97
|
+
return apiEndpoint;
|
|
98
|
+
};
|
|
70
99
|
const stackedTypes = [VIS_TYPE_STACKED_COLUMN, VIS_TYPE_STACKED_BAR, VIS_TYPE_STACKED_AREA];
|
|
71
100
|
const yearOverYearTypes = [VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_YEAR_OVER_YEAR_COLUMN];
|
|
72
101
|
const dualAxisTypes = [VIS_TYPE_COLUMN, VIS_TYPE_BAR, VIS_TYPE_LINE, VIS_TYPE_AREA];
|
|
@@ -111,24 +111,20 @@ describe('getFilterText', () => {
|
|
|
111
111
|
filters.push({
|
|
112
112
|
dimension: 'pe',
|
|
113
113
|
items: [{
|
|
114
|
-
id: '
|
|
115
|
-
|
|
114
|
+
id: '201801'
|
|
115
|
+
}, {
|
|
116
|
+
id: 'LAST_3_MONTHS'
|
|
117
|
+
}, {
|
|
118
|
+
id: 'LAST_MONTH'
|
|
116
119
|
}]
|
|
117
120
|
});
|
|
118
|
-
metaData.dimensions.pe = ['
|
|
119
|
-
metaData.items
|
|
120
|
-
name: '
|
|
121
|
-
uid: '_LAST_2_MONTHS_'
|
|
122
|
-
};
|
|
123
|
-
metaData.items._201801_ = {
|
|
124
|
-
name: '01 of 2018',
|
|
125
|
-
uid: '_201801_'
|
|
126
|
-
};
|
|
127
|
-
metaData.items._201802_ = {
|
|
128
|
-
name: '02 of 2018',
|
|
129
|
-
uid: '_201802_'
|
|
121
|
+
metaData.dimensions.pe = ['202501', '202502', '202503', '202504', '201801'];
|
|
122
|
+
metaData.items['201801'] = {
|
|
123
|
+
name: 'January 2018'
|
|
130
124
|
};
|
|
131
|
-
|
|
125
|
+
|
|
126
|
+
// Relative period names come from relativePeriods.js
|
|
127
|
+
expect(getFilterText(filters, metaData)).toEqual('Clinics, Hospital - January 2018, Last 3 months, Last month');
|
|
132
128
|
});
|
|
133
129
|
});
|
|
134
130
|
});
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { getRelativePeriodsName } from '../../components/PeriodDimension/utils/relativePeriods.js';
|
|
1
2
|
import { getOuLevelAndGroupText } from '../../modules/getOuLevelAndGroupText.js';
|
|
3
|
+
import { dimensionGetItemIds } from '../../modules/layout/dimensionGetItemIds.js';
|
|
2
4
|
import { dimensionGetItems } from '../../modules/layout/dimensionGetItems.js';
|
|
3
5
|
import { dimensionIs } from '../../modules/layout/dimensionIs.js';
|
|
4
6
|
import { ouIdHelper } from '../../modules/ouIdHelper/index.js';
|
|
5
|
-
import { DIMENSION_ID_ORGUNIT } from '../../modules/predefinedDimensions.js';
|
|
7
|
+
import { DIMENSION_ID_ORGUNIT, DIMENSION_ID_PERIOD } from '../../modules/predefinedDimensions.js';
|
|
6
8
|
export default function (filters, metaData) {
|
|
7
9
|
if (!Array.isArray(filters) || !filters.length) {
|
|
8
10
|
return '';
|
|
@@ -19,6 +21,12 @@ export default function (filters, metaData) {
|
|
|
19
21
|
return ouIdHelper.hasGroupPrefix(id) || ouIdHelper.hasLevelPrefix(id);
|
|
20
22
|
})) {
|
|
21
23
|
titleFragments.push(getOuLevelAndGroupText(filter, metaData));
|
|
24
|
+
} else if (dimensionIs(filter, DIMENSION_ID_PERIOD)) {
|
|
25
|
+
const relativePeriodNames = getRelativePeriodsName();
|
|
26
|
+
titleFragments.push(dimensionGetItemIds(filter).map(id => {
|
|
27
|
+
var _metaData$items$id;
|
|
28
|
+
return relativePeriodNames[id] || ((_metaData$items$id = metaData.items[id]) === null || _metaData$items$id === void 0 ? void 0 : _metaData$items$id.name) || id;
|
|
29
|
+
}).join(', '));
|
|
22
30
|
} else {
|
|
23
31
|
const filterItems = metaData.dimensions[filter.dimension];
|
|
24
32
|
if (Array.isArray(filterItems)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhis2/analytics",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "27.0.0",
|
|
4
4
|
"main": "./build/cjs/index.js",
|
|
5
5
|
"module": "./build/es/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"@storybook/preset-create-react-app": "^8.3.6",
|
|
40
40
|
"@storybook/react": "^8.3.6",
|
|
41
41
|
"@storybook/react-webpack5": "^8.3.6",
|
|
42
|
-
"@testing-library/jest-dom": "
|
|
43
|
-
"@testing-library/react": "^12
|
|
42
|
+
"@testing-library/jest-dom": "6.6.3",
|
|
43
|
+
"@testing-library/react": "^12",
|
|
44
44
|
"enzyme": "^3.9.0",
|
|
45
45
|
"enzyme-adapter-react-16": "^1.15.6",
|
|
46
46
|
"fs-extra": "^10.1.0",
|