@dhis2/analytics 24.5.0-alpha.2 → 24.5.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/CHANGELOG.md +7 -0
- package/build/cjs/components/PeriodDimension/PeriodTransfer.js +24 -3
- package/build/cjs/components/PeriodDimension/__tests__/PeriodSelector.spec.js +8 -0
- package/build/cjs/components/PeriodDimension/utils/fixedPeriods.js +52 -50
- package/build/es/components/PeriodDimension/PeriodTransfer.js +24 -4
- package/build/es/components/PeriodDimension/__tests__/PeriodSelector.spec.js +8 -0
- package/build/es/components/PeriodDimension/utils/fixedPeriods.js +52 -50
- package/package.json +2 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [24.5.0-alpha.3](https://github.com/dhis2/analytics/compare/v24.5.0-alpha.2...v24.5.0-alpha.3) (2023-02-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* localise fixed periods according to user settings ([c640c90](https://github.com/dhis2/analytics/commit/c640c90ce2d1944a14706507284af43c7480fa2a))
|
|
7
|
+
|
|
1
8
|
# [24.5.0-alpha.2](https://github.com/dhis2/analytics/compare/v24.5.0-alpha.1...v24.5.0-alpha.2) (2023-02-14)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -45,6 +45,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
45
45
|
|
|
46
46
|
function _extends() { _extends = Object.assign || 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); }
|
|
47
47
|
|
|
48
|
+
const userSettingsQuery = {
|
|
49
|
+
userSettings: {
|
|
50
|
+
resource: 'userSettings',
|
|
51
|
+
params: {
|
|
52
|
+
key: ['keyUiLocale']
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
48
57
|
const PeriodTransfer = _ref => {
|
|
49
58
|
let {
|
|
50
59
|
onSelect,
|
|
@@ -56,11 +65,23 @@ const PeriodTransfer = _ref => {
|
|
|
56
65
|
const {
|
|
57
66
|
systemInfo
|
|
58
67
|
} = (0, _appRuntime.useConfig)();
|
|
68
|
+
const result = (0, _appRuntime.useDataQuery)(userSettingsQuery);
|
|
59
69
|
const {
|
|
60
70
|
calendar = 'gregory'
|
|
61
71
|
} = systemInfo;
|
|
72
|
+
const {
|
|
73
|
+
data: {
|
|
74
|
+
userSettings: {
|
|
75
|
+
keyUiLocale: locale
|
|
76
|
+
} = {}
|
|
77
|
+
} = {}
|
|
78
|
+
} = result;
|
|
79
|
+
const periodsSettings = {
|
|
80
|
+
calendar,
|
|
81
|
+
locale
|
|
82
|
+
};
|
|
62
83
|
const defaultRelativePeriodType = excludedPeriodTypes.includes(_index2.MONTHLY) ? (0, _relativePeriods.getRelativePeriodsOptionsById)(_index2.QUARTERLY) : (0, _relativePeriods.getRelativePeriodsOptionsById)(_index2.MONTHLY);
|
|
63
|
-
const defaultFixedPeriodType = excludedPeriodTypes.includes(_index2.MONTHLY) ? (0, _fixedPeriods.getFixedPeriodsOptionsById)(_index2.QUARTERLY,
|
|
84
|
+
const defaultFixedPeriodType = excludedPeriodTypes.includes(_index2.MONTHLY) ? (0, _fixedPeriods.getFixedPeriodsOptionsById)(_index2.QUARTERLY, periodsSettings) : (0, _fixedPeriods.getFixedPeriodsOptionsById)(_index2.MONTHLY, periodsSettings);
|
|
64
85
|
const now = (0, _multiCalendarDates.getNowInCalendar)(calendar); // use ".eraYear" rather than ".year" because in Ethiopian calendar, eraYear is what our users expect to see (for other calendars, it doesn't matter)
|
|
65
86
|
// there is still a pending decision in Temporal regarding which era to use by default: https://github.com/js-temporal/temporal-polyfill/blob/9350ee7dd0d29f329fc097debf923a517c32f813/lib/calendar.ts#L1964
|
|
66
87
|
|
|
@@ -86,7 +107,7 @@ const PeriodTransfer = _ref => {
|
|
|
86
107
|
const onIsRelativeClick = state => {
|
|
87
108
|
if (state !== isRelative) {
|
|
88
109
|
setIsRelative(state);
|
|
89
|
-
setAllPeriods(state ? (0, _relativePeriods.getRelativePeriodsOptionsById)(relativeFilter.periodType).getPeriods() : (0, _fixedPeriods.getFixedPeriodsOptionsById)(fixedFilter.periodType,
|
|
110
|
+
setAllPeriods(state ? (0, _relativePeriods.getRelativePeriodsOptionsById)(relativeFilter.periodType).getPeriods() : (0, _fixedPeriods.getFixedPeriodsOptionsById)(fixedFilter.periodType, periodsSettings).getPeriods(fixedPeriodConfig(Number(fixedFilter.year))));
|
|
90
111
|
}
|
|
91
112
|
};
|
|
92
113
|
|
|
@@ -139,7 +160,7 @@ const PeriodTransfer = _ref => {
|
|
|
139
160
|
|
|
140
161
|
const onSelectFixedPeriods = filter => {
|
|
141
162
|
setFixedFilter(filter);
|
|
142
|
-
setAllPeriods((0, _fixedPeriods.getFixedPeriodsOptionsById)(filter.periodType,
|
|
163
|
+
setAllPeriods((0, _fixedPeriods.getFixedPeriodsOptionsById)(filter.periodType, periodsSettings).getPeriods(fixedPeriodConfig(Number(filter.year)), periodsSettings));
|
|
143
164
|
};
|
|
144
165
|
|
|
145
166
|
const renderEmptySelection = () => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", {
|
|
@@ -11,8 +11,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
11
11
|
jest.mock('@dhis2/app-runtime', () => ({
|
|
12
12
|
useConfig: () => ({
|
|
13
13
|
systemInfo: {}
|
|
14
|
+
}),
|
|
15
|
+
useDataQuery: () => ({
|
|
16
|
+
data: {
|
|
17
|
+
userSettings: {
|
|
18
|
+
keyUiLocale: 'en'
|
|
19
|
+
}
|
|
20
|
+
}
|
|
14
21
|
})
|
|
15
22
|
}));
|
|
23
|
+
afterEach(jest.clearAllMocks);
|
|
16
24
|
describe('The Period Selector component', () => {
|
|
17
25
|
let props;
|
|
18
26
|
let shallowPeriodTransfer;
|
|
@@ -56,18 +56,22 @@ const getPeriods = _ref => {
|
|
|
56
56
|
periodType,
|
|
57
57
|
config,
|
|
58
58
|
fnFilter,
|
|
59
|
-
|
|
59
|
+
periodSettings = {}
|
|
60
60
|
} = _ref;
|
|
61
61
|
const offset = parseInt(config.offset, 10);
|
|
62
62
|
const isFilter = config.filterFuturePeriods;
|
|
63
63
|
const isReverse = periodType.match(/^FY|YEARLY/) ? true : config.reversePeriods;
|
|
64
|
+
const {
|
|
65
|
+
calendar = 'gregory',
|
|
66
|
+
locale = 'en'
|
|
67
|
+
} = periodSettings;
|
|
64
68
|
const now = (0, _multiCalendarDates.getNowInCalendar)(calendar);
|
|
65
69
|
const year = (now.eraYear || now.year) + offset;
|
|
66
70
|
const params = {
|
|
67
71
|
periodType,
|
|
68
72
|
year,
|
|
69
73
|
calendar,
|
|
70
|
-
locale
|
|
74
|
+
locale,
|
|
71
75
|
startingDay: config.startDay
|
|
72
76
|
};
|
|
73
77
|
let periods = (0, _multiCalendarDates.generateFixedPeriods)(params);
|
|
@@ -76,18 +80,18 @@ const getPeriods = _ref => {
|
|
|
76
80
|
return periods;
|
|
77
81
|
};
|
|
78
82
|
|
|
79
|
-
const getDailyPeriodType = (fnFilter,
|
|
83
|
+
const getDailyPeriodType = (fnFilter, periodSettings) => {
|
|
80
84
|
return config => {
|
|
81
85
|
return getPeriods({
|
|
82
86
|
periodType: 'DAILY',
|
|
83
87
|
config,
|
|
84
88
|
fnFilter,
|
|
85
|
-
|
|
89
|
+
periodSettings
|
|
86
90
|
});
|
|
87
91
|
};
|
|
88
92
|
};
|
|
89
93
|
|
|
90
|
-
const getWeeklyPeriodType = (weekObj, fnFilter,
|
|
94
|
+
const getWeeklyPeriodType = (weekObj, fnFilter, periodSettings) => {
|
|
91
95
|
return config => {
|
|
92
96
|
return getPeriods({
|
|
93
97
|
periodType: 'WEEKLY',
|
|
@@ -95,128 +99,128 @@ const getWeeklyPeriodType = (weekObj, fnFilter, calendar) => {
|
|
|
95
99
|
startDay: weekObj.startDay
|
|
96
100
|
},
|
|
97
101
|
fnFilter,
|
|
98
|
-
|
|
102
|
+
periodSettings
|
|
99
103
|
});
|
|
100
104
|
};
|
|
101
105
|
};
|
|
102
106
|
|
|
103
|
-
const getBiWeeklyPeriodType = (fnFilter,
|
|
107
|
+
const getBiWeeklyPeriodType = (fnFilter, periodSettings) => {
|
|
104
108
|
return config => {
|
|
105
109
|
return getPeriods({
|
|
106
110
|
periodType: 'BIWEEKLY',
|
|
107
111
|
config,
|
|
108
112
|
fnFilter,
|
|
109
|
-
|
|
113
|
+
periodSettings
|
|
110
114
|
});
|
|
111
115
|
};
|
|
112
116
|
};
|
|
113
117
|
|
|
114
|
-
const getMonthlyPeriodType = (fnFilter,
|
|
118
|
+
const getMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
115
119
|
return config => {
|
|
116
120
|
return getPeriods({
|
|
117
121
|
periodType: 'MONTHLY',
|
|
118
122
|
config,
|
|
119
123
|
fnFilter,
|
|
120
|
-
|
|
124
|
+
periodSettings
|
|
121
125
|
});
|
|
122
126
|
};
|
|
123
127
|
};
|
|
124
128
|
|
|
125
|
-
const getBiMonthlyPeriodType = (fnFilter,
|
|
129
|
+
const getBiMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
126
130
|
return config => {
|
|
127
131
|
return getPeriods({
|
|
128
132
|
periodType: 'BIMONTHLY',
|
|
129
133
|
config,
|
|
130
134
|
fnFilter,
|
|
131
|
-
|
|
135
|
+
periodSettings
|
|
132
136
|
});
|
|
133
137
|
};
|
|
134
138
|
};
|
|
135
139
|
|
|
136
|
-
const getQuarterlyPeriodType = (fnFilter,
|
|
140
|
+
const getQuarterlyPeriodType = (fnFilter, periodSettings) => {
|
|
137
141
|
return config => {
|
|
138
142
|
return getPeriods({
|
|
139
143
|
periodType: 'QUARTERLY',
|
|
140
144
|
config,
|
|
141
145
|
fnFilter,
|
|
142
|
-
|
|
146
|
+
periodSettings
|
|
143
147
|
});
|
|
144
148
|
};
|
|
145
149
|
};
|
|
146
150
|
|
|
147
|
-
const getSixMonthlyPeriodType = (fnFilter,
|
|
151
|
+
const getSixMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
148
152
|
return config => {
|
|
149
153
|
return getPeriods({
|
|
150
154
|
periodType: 'SIXMONTHLY',
|
|
151
155
|
config,
|
|
152
156
|
fnFilter,
|
|
153
|
-
|
|
157
|
+
periodSettings
|
|
154
158
|
});
|
|
155
159
|
};
|
|
156
160
|
};
|
|
157
161
|
|
|
158
|
-
const getSixMonthlyAprilPeriodType = (fnFilter,
|
|
162
|
+
const getSixMonthlyAprilPeriodType = (fnFilter, periodSettings) => {
|
|
159
163
|
return config => {
|
|
160
164
|
return getPeriods({
|
|
161
165
|
periodType: 'SIXMONTHLYAPR',
|
|
162
166
|
config,
|
|
163
167
|
fnFilter,
|
|
164
|
-
|
|
168
|
+
periodSettings
|
|
165
169
|
});
|
|
166
170
|
};
|
|
167
171
|
};
|
|
168
172
|
|
|
169
|
-
const getYearlyPeriodType = (fnFilter,
|
|
173
|
+
const getYearlyPeriodType = (fnFilter, periodSettings) => {
|
|
170
174
|
return config => {
|
|
171
175
|
return getPeriods({
|
|
172
176
|
periodType: 'YEARLY',
|
|
173
177
|
config,
|
|
174
178
|
fnFilter,
|
|
175
|
-
|
|
179
|
+
periodSettings
|
|
176
180
|
});
|
|
177
181
|
};
|
|
178
182
|
};
|
|
179
183
|
|
|
180
|
-
const getFinancialOctoberPeriodType = (fnFilter,
|
|
184
|
+
const getFinancialOctoberPeriodType = (fnFilter, periodSettings) => {
|
|
181
185
|
return config => {
|
|
182
186
|
return getPeriods({
|
|
183
187
|
periodType: 'FYOCT',
|
|
184
188
|
config,
|
|
185
189
|
fnFilter,
|
|
186
|
-
|
|
190
|
+
periodSettings
|
|
187
191
|
});
|
|
188
192
|
};
|
|
189
193
|
};
|
|
190
194
|
|
|
191
|
-
const getFinancialNovemberPeriodType = (fnFilter,
|
|
195
|
+
const getFinancialNovemberPeriodType = (fnFilter, periodSettings) => {
|
|
192
196
|
return config => {
|
|
193
197
|
return getPeriods({
|
|
194
198
|
periodType: 'FYNOV',
|
|
195
199
|
config,
|
|
196
200
|
fnFilter,
|
|
197
|
-
|
|
201
|
+
periodSettings
|
|
198
202
|
});
|
|
199
203
|
};
|
|
200
204
|
};
|
|
201
205
|
|
|
202
|
-
const getFinancialJulyPeriodType = (fnFilter,
|
|
206
|
+
const getFinancialJulyPeriodType = (fnFilter, periodSettings) => {
|
|
203
207
|
return config => {
|
|
204
208
|
return getPeriods({
|
|
205
209
|
periodType: 'FYJUL',
|
|
206
210
|
config,
|
|
207
211
|
fnFilter,
|
|
208
|
-
|
|
212
|
+
periodSettings
|
|
209
213
|
});
|
|
210
214
|
};
|
|
211
215
|
};
|
|
212
216
|
|
|
213
|
-
const getFinancialAprilPeriodType = (fnFilter,
|
|
217
|
+
const getFinancialAprilPeriodType = (fnFilter, periodSettings) => {
|
|
214
218
|
return config => {
|
|
215
219
|
return getPeriods({
|
|
216
220
|
periodType: 'FYAPR',
|
|
217
221
|
config,
|
|
218
222
|
fnFilter,
|
|
219
|
-
|
|
223
|
+
periodSettings
|
|
220
224
|
});
|
|
221
225
|
};
|
|
222
226
|
};
|
|
@@ -234,92 +238,90 @@ const filterFuturePeriods = periods => {
|
|
|
234
238
|
return array;
|
|
235
239
|
};
|
|
236
240
|
|
|
237
|
-
const getOptions =
|
|
238
|
-
let calendar = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'gregory';
|
|
241
|
+
const getOptions = periodSettings => {
|
|
239
242
|
return [{
|
|
240
243
|
id: _index2.DAILY,
|
|
241
|
-
getPeriods: getDailyPeriodType(filterFuturePeriods,
|
|
244
|
+
getPeriods: getDailyPeriodType(filterFuturePeriods, periodSettings),
|
|
242
245
|
name: _index.default.t('Daily')
|
|
243
246
|
}, {
|
|
244
247
|
id: _index2.WEEKLY,
|
|
245
248
|
getPeriods: getWeeklyPeriodType({
|
|
246
249
|
startDay: 1
|
|
247
|
-
}, filterFuturePeriods,
|
|
250
|
+
}, filterFuturePeriods, periodSettings),
|
|
248
251
|
name: _index.default.t('Weekly')
|
|
249
252
|
}, {
|
|
250
253
|
id: _index2.WEEKLYWED,
|
|
251
254
|
getPeriods: getWeeklyPeriodType({
|
|
252
255
|
startDay: 3
|
|
253
|
-
}, filterFuturePeriods,
|
|
256
|
+
}, filterFuturePeriods, periodSettings),
|
|
254
257
|
name: _index.default.t('Weekly (Start Wednesday)')
|
|
255
258
|
}, {
|
|
256
259
|
id: _index2.WEEKLYTHU,
|
|
257
260
|
getPeriods: getWeeklyPeriodType({
|
|
258
261
|
startDay: 4
|
|
259
|
-
}, filterFuturePeriods,
|
|
262
|
+
}, filterFuturePeriods, periodSettings),
|
|
260
263
|
name: _index.default.t('Weekly (Start Thursday)')
|
|
261
264
|
}, {
|
|
262
265
|
id: _index2.WEEKLYSAT,
|
|
263
266
|
getPeriods: getWeeklyPeriodType({
|
|
264
267
|
startDay: 6
|
|
265
|
-
}, filterFuturePeriods,
|
|
268
|
+
}, filterFuturePeriods, periodSettings),
|
|
266
269
|
name: _index.default.t('Weekly (Start Saturday)')
|
|
267
270
|
}, {
|
|
268
271
|
id: _index2.WEEKLYSUN,
|
|
269
272
|
getPeriods: getWeeklyPeriodType({
|
|
270
273
|
startDay: 7
|
|
271
|
-
}, filterFuturePeriods,
|
|
274
|
+
}, filterFuturePeriods, periodSettings),
|
|
272
275
|
name: _index.default.t('Weekly (Start Sunday)')
|
|
273
276
|
}, {
|
|
274
277
|
id: _index2.BIWEEKLY,
|
|
275
|
-
getPeriods: getBiWeeklyPeriodType(filterFuturePeriods,
|
|
278
|
+
getPeriods: getBiWeeklyPeriodType(filterFuturePeriods, periodSettings),
|
|
276
279
|
name: _index.default.t('Bi-weekly')
|
|
277
280
|
}, {
|
|
278
281
|
id: _index2.MONTHLY,
|
|
279
|
-
getPeriods: getMonthlyPeriodType(filterFuturePeriods,
|
|
282
|
+
getPeriods: getMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
280
283
|
name: _index.default.t('Monthly')
|
|
281
284
|
}, {
|
|
282
285
|
id: _index2.BIMONTHLY,
|
|
283
|
-
getPeriods: getBiMonthlyPeriodType(filterFuturePeriods,
|
|
286
|
+
getPeriods: getBiMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
284
287
|
name: _index.default.t('Bi-monthly')
|
|
285
288
|
}, {
|
|
286
289
|
id: _index2.QUARTERLY,
|
|
287
|
-
getPeriods: getQuarterlyPeriodType(filterFuturePeriods,
|
|
290
|
+
getPeriods: getQuarterlyPeriodType(filterFuturePeriods, periodSettings),
|
|
288
291
|
name: _index.default.t('Quarterly')
|
|
289
292
|
}, {
|
|
290
293
|
id: _index2.SIXMONTHLY,
|
|
291
|
-
getPeriods: getSixMonthlyPeriodType(filterFuturePeriods,
|
|
294
|
+
getPeriods: getSixMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
292
295
|
name: _index.default.t('Six-monthly')
|
|
293
296
|
}, {
|
|
294
297
|
id: _index2.SIXMONTHLYAPR,
|
|
295
|
-
getPeriods: getSixMonthlyAprilPeriodType(filterFuturePeriods,
|
|
298
|
+
getPeriods: getSixMonthlyAprilPeriodType(filterFuturePeriods, periodSettings),
|
|
296
299
|
name: _index.default.t('Six-monthly April')
|
|
297
300
|
}, {
|
|
298
301
|
id: _index2.YEARLY,
|
|
299
|
-
getPeriods: getYearlyPeriodType(filterFuturePeriods,
|
|
302
|
+
getPeriods: getYearlyPeriodType(filterFuturePeriods, periodSettings),
|
|
300
303
|
name: _index.default.t('Yearly')
|
|
301
304
|
}, {
|
|
302
305
|
id: _index2.FYNOV,
|
|
303
|
-
getPeriods: getFinancialNovemberPeriodType(filterFuturePeriods,
|
|
306
|
+
getPeriods: getFinancialNovemberPeriodType(filterFuturePeriods, periodSettings),
|
|
304
307
|
name: _index.default.t('Financial year (Start November)')
|
|
305
308
|
}, {
|
|
306
309
|
id: _index2.FYOCT,
|
|
307
|
-
getPeriods: getFinancialOctoberPeriodType(filterFuturePeriods,
|
|
310
|
+
getPeriods: getFinancialOctoberPeriodType(filterFuturePeriods, periodSettings),
|
|
308
311
|
name: _index.default.t('Financial year (Start October)')
|
|
309
312
|
}, {
|
|
310
313
|
id: _index2.FYJUL,
|
|
311
|
-
getPeriods: getFinancialJulyPeriodType(filterFuturePeriods,
|
|
314
|
+
getPeriods: getFinancialJulyPeriodType(filterFuturePeriods, periodSettings),
|
|
312
315
|
name: _index.default.t('Financial year (Start July)')
|
|
313
316
|
}, {
|
|
314
317
|
id: _index2.FYAPR,
|
|
315
|
-
getPeriods: getFinancialAprilPeriodType(filterFuturePeriods,
|
|
318
|
+
getPeriods: getFinancialAprilPeriodType(filterFuturePeriods, periodSettings),
|
|
316
319
|
name: _index.default.t('Financial year (Start April)')
|
|
317
320
|
}];
|
|
318
321
|
};
|
|
319
322
|
|
|
320
|
-
const getFixedPeriodsOptionsById =
|
|
321
|
-
|
|
322
|
-
return getOptions(calendar).find(option => option.id === id);
|
|
323
|
+
const getFixedPeriodsOptionsById = (id, periodSettings) => {
|
|
324
|
+
return getOptions(periodSettings).find(option => option.id === id);
|
|
323
325
|
};
|
|
324
326
|
|
|
325
327
|
exports.getFixedPeriodsOptionsById = getFixedPeriodsOptionsById;
|
|
@@ -2,7 +2,7 @@ import _JSXStyle from "styled-jsx/style";
|
|
|
2
2
|
|
|
3
3
|
function _extends() { _extends = Object.assign || 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); }
|
|
4
4
|
|
|
5
|
-
import { useConfig } from '@dhis2/app-runtime';
|
|
5
|
+
import { useConfig, useDataQuery } from '@dhis2/app-runtime';
|
|
6
6
|
import { getNowInCalendar } from '@dhis2/multi-calendar-dates';
|
|
7
7
|
import { TabBar, Tab, Transfer } from '@dhis2/ui';
|
|
8
8
|
import PropTypes from 'prop-types';
|
|
@@ -18,6 +18,14 @@ import RelativePeriodFilter from './RelativePeriodFilter.js';
|
|
|
18
18
|
import { getFixedPeriodsOptionsById } from './utils/fixedPeriods.js';
|
|
19
19
|
import { MONTHLY, QUARTERLY } from './utils/index.js';
|
|
20
20
|
import { getRelativePeriodsOptionsById } from './utils/relativePeriods.js';
|
|
21
|
+
const userSettingsQuery = {
|
|
22
|
+
userSettings: {
|
|
23
|
+
resource: 'userSettings',
|
|
24
|
+
params: {
|
|
25
|
+
key: ['keyUiLocale']
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
21
29
|
|
|
22
30
|
const PeriodTransfer = _ref => {
|
|
23
31
|
let {
|
|
@@ -30,11 +38,23 @@ const PeriodTransfer = _ref => {
|
|
|
30
38
|
const {
|
|
31
39
|
systemInfo
|
|
32
40
|
} = useConfig();
|
|
41
|
+
const result = useDataQuery(userSettingsQuery);
|
|
33
42
|
const {
|
|
34
43
|
calendar = 'gregory'
|
|
35
44
|
} = systemInfo;
|
|
45
|
+
const {
|
|
46
|
+
data: {
|
|
47
|
+
userSettings: {
|
|
48
|
+
keyUiLocale: locale
|
|
49
|
+
} = {}
|
|
50
|
+
} = {}
|
|
51
|
+
} = result;
|
|
52
|
+
const periodsSettings = {
|
|
53
|
+
calendar,
|
|
54
|
+
locale
|
|
55
|
+
};
|
|
36
56
|
const defaultRelativePeriodType = excludedPeriodTypes.includes(MONTHLY) ? getRelativePeriodsOptionsById(QUARTERLY) : getRelativePeriodsOptionsById(MONTHLY);
|
|
37
|
-
const defaultFixedPeriodType = excludedPeriodTypes.includes(MONTHLY) ? getFixedPeriodsOptionsById(QUARTERLY,
|
|
57
|
+
const defaultFixedPeriodType = excludedPeriodTypes.includes(MONTHLY) ? getFixedPeriodsOptionsById(QUARTERLY, periodsSettings) : getFixedPeriodsOptionsById(MONTHLY, periodsSettings);
|
|
38
58
|
const now = getNowInCalendar(calendar); // use ".eraYear" rather than ".year" because in Ethiopian calendar, eraYear is what our users expect to see (for other calendars, it doesn't matter)
|
|
39
59
|
// there is still a pending decision in Temporal regarding which era to use by default: https://github.com/js-temporal/temporal-polyfill/blob/9350ee7dd0d29f329fc097debf923a517c32f813/lib/calendar.ts#L1964
|
|
40
60
|
|
|
@@ -60,7 +80,7 @@ const PeriodTransfer = _ref => {
|
|
|
60
80
|
const onIsRelativeClick = state => {
|
|
61
81
|
if (state !== isRelative) {
|
|
62
82
|
setIsRelative(state);
|
|
63
|
-
setAllPeriods(state ? getRelativePeriodsOptionsById(relativeFilter.periodType).getPeriods() : getFixedPeriodsOptionsById(fixedFilter.periodType,
|
|
83
|
+
setAllPeriods(state ? getRelativePeriodsOptionsById(relativeFilter.periodType).getPeriods() : getFixedPeriodsOptionsById(fixedFilter.periodType, periodsSettings).getPeriods(fixedPeriodConfig(Number(fixedFilter.year))));
|
|
64
84
|
}
|
|
65
85
|
};
|
|
66
86
|
|
|
@@ -113,7 +133,7 @@ const PeriodTransfer = _ref => {
|
|
|
113
133
|
|
|
114
134
|
const onSelectFixedPeriods = filter => {
|
|
115
135
|
setFixedFilter(filter);
|
|
116
|
-
setAllPeriods(getFixedPeriodsOptionsById(filter.periodType,
|
|
136
|
+
setAllPeriods(getFixedPeriodsOptionsById(filter.periodType, periodsSettings).getPeriods(fixedPeriodConfig(Number(filter.year)), periodsSettings));
|
|
117
137
|
};
|
|
118
138
|
|
|
119
139
|
const renderEmptySelection = () => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {
|
|
@@ -4,8 +4,16 @@ import PeriodTransfer from '../PeriodTransfer.js';
|
|
|
4
4
|
jest.mock('@dhis2/app-runtime', () => ({
|
|
5
5
|
useConfig: () => ({
|
|
6
6
|
systemInfo: {}
|
|
7
|
+
}),
|
|
8
|
+
useDataQuery: () => ({
|
|
9
|
+
data: {
|
|
10
|
+
userSettings: {
|
|
11
|
+
keyUiLocale: 'en'
|
|
12
|
+
}
|
|
13
|
+
}
|
|
7
14
|
})
|
|
8
15
|
}));
|
|
16
|
+
afterEach(jest.clearAllMocks);
|
|
9
17
|
describe('The Period Selector component', () => {
|
|
10
18
|
let props;
|
|
11
19
|
let shallowPeriodTransfer;
|
|
@@ -44,18 +44,22 @@ const getPeriods = _ref => {
|
|
|
44
44
|
periodType,
|
|
45
45
|
config,
|
|
46
46
|
fnFilter,
|
|
47
|
-
|
|
47
|
+
periodSettings = {}
|
|
48
48
|
} = _ref;
|
|
49
49
|
const offset = parseInt(config.offset, 10);
|
|
50
50
|
const isFilter = config.filterFuturePeriods;
|
|
51
51
|
const isReverse = periodType.match(/^FY|YEARLY/) ? true : config.reversePeriods;
|
|
52
|
+
const {
|
|
53
|
+
calendar = 'gregory',
|
|
54
|
+
locale = 'en'
|
|
55
|
+
} = periodSettings;
|
|
52
56
|
const now = getNowInCalendar(calendar);
|
|
53
57
|
const year = (now.eraYear || now.year) + offset;
|
|
54
58
|
const params = {
|
|
55
59
|
periodType,
|
|
56
60
|
year,
|
|
57
61
|
calendar,
|
|
58
|
-
locale
|
|
62
|
+
locale,
|
|
59
63
|
startingDay: config.startDay
|
|
60
64
|
};
|
|
61
65
|
let periods = generateFixedPeriods(params);
|
|
@@ -64,18 +68,18 @@ const getPeriods = _ref => {
|
|
|
64
68
|
return periods;
|
|
65
69
|
};
|
|
66
70
|
|
|
67
|
-
const getDailyPeriodType = (fnFilter,
|
|
71
|
+
const getDailyPeriodType = (fnFilter, periodSettings) => {
|
|
68
72
|
return config => {
|
|
69
73
|
return getPeriods({
|
|
70
74
|
periodType: 'DAILY',
|
|
71
75
|
config,
|
|
72
76
|
fnFilter,
|
|
73
|
-
|
|
77
|
+
periodSettings
|
|
74
78
|
});
|
|
75
79
|
};
|
|
76
80
|
};
|
|
77
81
|
|
|
78
|
-
const getWeeklyPeriodType = (weekObj, fnFilter,
|
|
82
|
+
const getWeeklyPeriodType = (weekObj, fnFilter, periodSettings) => {
|
|
79
83
|
return config => {
|
|
80
84
|
return getPeriods({
|
|
81
85
|
periodType: 'WEEKLY',
|
|
@@ -83,128 +87,128 @@ const getWeeklyPeriodType = (weekObj, fnFilter, calendar) => {
|
|
|
83
87
|
startDay: weekObj.startDay
|
|
84
88
|
},
|
|
85
89
|
fnFilter,
|
|
86
|
-
|
|
90
|
+
periodSettings
|
|
87
91
|
});
|
|
88
92
|
};
|
|
89
93
|
};
|
|
90
94
|
|
|
91
|
-
const getBiWeeklyPeriodType = (fnFilter,
|
|
95
|
+
const getBiWeeklyPeriodType = (fnFilter, periodSettings) => {
|
|
92
96
|
return config => {
|
|
93
97
|
return getPeriods({
|
|
94
98
|
periodType: 'BIWEEKLY',
|
|
95
99
|
config,
|
|
96
100
|
fnFilter,
|
|
97
|
-
|
|
101
|
+
periodSettings
|
|
98
102
|
});
|
|
99
103
|
};
|
|
100
104
|
};
|
|
101
105
|
|
|
102
|
-
const getMonthlyPeriodType = (fnFilter,
|
|
106
|
+
const getMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
103
107
|
return config => {
|
|
104
108
|
return getPeriods({
|
|
105
109
|
periodType: 'MONTHLY',
|
|
106
110
|
config,
|
|
107
111
|
fnFilter,
|
|
108
|
-
|
|
112
|
+
periodSettings
|
|
109
113
|
});
|
|
110
114
|
};
|
|
111
115
|
};
|
|
112
116
|
|
|
113
|
-
const getBiMonthlyPeriodType = (fnFilter,
|
|
117
|
+
const getBiMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
114
118
|
return config => {
|
|
115
119
|
return getPeriods({
|
|
116
120
|
periodType: 'BIMONTHLY',
|
|
117
121
|
config,
|
|
118
122
|
fnFilter,
|
|
119
|
-
|
|
123
|
+
periodSettings
|
|
120
124
|
});
|
|
121
125
|
};
|
|
122
126
|
};
|
|
123
127
|
|
|
124
|
-
const getQuarterlyPeriodType = (fnFilter,
|
|
128
|
+
const getQuarterlyPeriodType = (fnFilter, periodSettings) => {
|
|
125
129
|
return config => {
|
|
126
130
|
return getPeriods({
|
|
127
131
|
periodType: 'QUARTERLY',
|
|
128
132
|
config,
|
|
129
133
|
fnFilter,
|
|
130
|
-
|
|
134
|
+
periodSettings
|
|
131
135
|
});
|
|
132
136
|
};
|
|
133
137
|
};
|
|
134
138
|
|
|
135
|
-
const getSixMonthlyPeriodType = (fnFilter,
|
|
139
|
+
const getSixMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
136
140
|
return config => {
|
|
137
141
|
return getPeriods({
|
|
138
142
|
periodType: 'SIXMONTHLY',
|
|
139
143
|
config,
|
|
140
144
|
fnFilter,
|
|
141
|
-
|
|
145
|
+
periodSettings
|
|
142
146
|
});
|
|
143
147
|
};
|
|
144
148
|
};
|
|
145
149
|
|
|
146
|
-
const getSixMonthlyAprilPeriodType = (fnFilter,
|
|
150
|
+
const getSixMonthlyAprilPeriodType = (fnFilter, periodSettings) => {
|
|
147
151
|
return config => {
|
|
148
152
|
return getPeriods({
|
|
149
153
|
periodType: 'SIXMONTHLYAPR',
|
|
150
154
|
config,
|
|
151
155
|
fnFilter,
|
|
152
|
-
|
|
156
|
+
periodSettings
|
|
153
157
|
});
|
|
154
158
|
};
|
|
155
159
|
};
|
|
156
160
|
|
|
157
|
-
const getYearlyPeriodType = (fnFilter,
|
|
161
|
+
const getYearlyPeriodType = (fnFilter, periodSettings) => {
|
|
158
162
|
return config => {
|
|
159
163
|
return getPeriods({
|
|
160
164
|
periodType: 'YEARLY',
|
|
161
165
|
config,
|
|
162
166
|
fnFilter,
|
|
163
|
-
|
|
167
|
+
periodSettings
|
|
164
168
|
});
|
|
165
169
|
};
|
|
166
170
|
};
|
|
167
171
|
|
|
168
|
-
const getFinancialOctoberPeriodType = (fnFilter,
|
|
172
|
+
const getFinancialOctoberPeriodType = (fnFilter, periodSettings) => {
|
|
169
173
|
return config => {
|
|
170
174
|
return getPeriods({
|
|
171
175
|
periodType: 'FYOCT',
|
|
172
176
|
config,
|
|
173
177
|
fnFilter,
|
|
174
|
-
|
|
178
|
+
periodSettings
|
|
175
179
|
});
|
|
176
180
|
};
|
|
177
181
|
};
|
|
178
182
|
|
|
179
|
-
const getFinancialNovemberPeriodType = (fnFilter,
|
|
183
|
+
const getFinancialNovemberPeriodType = (fnFilter, periodSettings) => {
|
|
180
184
|
return config => {
|
|
181
185
|
return getPeriods({
|
|
182
186
|
periodType: 'FYNOV',
|
|
183
187
|
config,
|
|
184
188
|
fnFilter,
|
|
185
|
-
|
|
189
|
+
periodSettings
|
|
186
190
|
});
|
|
187
191
|
};
|
|
188
192
|
};
|
|
189
193
|
|
|
190
|
-
const getFinancialJulyPeriodType = (fnFilter,
|
|
194
|
+
const getFinancialJulyPeriodType = (fnFilter, periodSettings) => {
|
|
191
195
|
return config => {
|
|
192
196
|
return getPeriods({
|
|
193
197
|
periodType: 'FYJUL',
|
|
194
198
|
config,
|
|
195
199
|
fnFilter,
|
|
196
|
-
|
|
200
|
+
periodSettings
|
|
197
201
|
});
|
|
198
202
|
};
|
|
199
203
|
};
|
|
200
204
|
|
|
201
|
-
const getFinancialAprilPeriodType = (fnFilter,
|
|
205
|
+
const getFinancialAprilPeriodType = (fnFilter, periodSettings) => {
|
|
202
206
|
return config => {
|
|
203
207
|
return getPeriods({
|
|
204
208
|
periodType: 'FYAPR',
|
|
205
209
|
config,
|
|
206
210
|
fnFilter,
|
|
207
|
-
|
|
211
|
+
periodSettings
|
|
208
212
|
});
|
|
209
213
|
};
|
|
210
214
|
};
|
|
@@ -222,92 +226,90 @@ const filterFuturePeriods = periods => {
|
|
|
222
226
|
return array;
|
|
223
227
|
};
|
|
224
228
|
|
|
225
|
-
const getOptions =
|
|
226
|
-
let calendar = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'gregory';
|
|
229
|
+
const getOptions = periodSettings => {
|
|
227
230
|
return [{
|
|
228
231
|
id: DAILY,
|
|
229
|
-
getPeriods: getDailyPeriodType(filterFuturePeriods,
|
|
232
|
+
getPeriods: getDailyPeriodType(filterFuturePeriods, periodSettings),
|
|
230
233
|
name: i18n.t('Daily')
|
|
231
234
|
}, {
|
|
232
235
|
id: WEEKLY,
|
|
233
236
|
getPeriods: getWeeklyPeriodType({
|
|
234
237
|
startDay: 1
|
|
235
|
-
}, filterFuturePeriods,
|
|
238
|
+
}, filterFuturePeriods, periodSettings),
|
|
236
239
|
name: i18n.t('Weekly')
|
|
237
240
|
}, {
|
|
238
241
|
id: WEEKLYWED,
|
|
239
242
|
getPeriods: getWeeklyPeriodType({
|
|
240
243
|
startDay: 3
|
|
241
|
-
}, filterFuturePeriods,
|
|
244
|
+
}, filterFuturePeriods, periodSettings),
|
|
242
245
|
name: i18n.t('Weekly (Start Wednesday)')
|
|
243
246
|
}, {
|
|
244
247
|
id: WEEKLYTHU,
|
|
245
248
|
getPeriods: getWeeklyPeriodType({
|
|
246
249
|
startDay: 4
|
|
247
|
-
}, filterFuturePeriods,
|
|
250
|
+
}, filterFuturePeriods, periodSettings),
|
|
248
251
|
name: i18n.t('Weekly (Start Thursday)')
|
|
249
252
|
}, {
|
|
250
253
|
id: WEEKLYSAT,
|
|
251
254
|
getPeriods: getWeeklyPeriodType({
|
|
252
255
|
startDay: 6
|
|
253
|
-
}, filterFuturePeriods,
|
|
256
|
+
}, filterFuturePeriods, periodSettings),
|
|
254
257
|
name: i18n.t('Weekly (Start Saturday)')
|
|
255
258
|
}, {
|
|
256
259
|
id: WEEKLYSUN,
|
|
257
260
|
getPeriods: getWeeklyPeriodType({
|
|
258
261
|
startDay: 7
|
|
259
|
-
}, filterFuturePeriods,
|
|
262
|
+
}, filterFuturePeriods, periodSettings),
|
|
260
263
|
name: i18n.t('Weekly (Start Sunday)')
|
|
261
264
|
}, {
|
|
262
265
|
id: BIWEEKLY,
|
|
263
|
-
getPeriods: getBiWeeklyPeriodType(filterFuturePeriods,
|
|
266
|
+
getPeriods: getBiWeeklyPeriodType(filterFuturePeriods, periodSettings),
|
|
264
267
|
name: i18n.t('Bi-weekly')
|
|
265
268
|
}, {
|
|
266
269
|
id: MONTHLY,
|
|
267
|
-
getPeriods: getMonthlyPeriodType(filterFuturePeriods,
|
|
270
|
+
getPeriods: getMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
268
271
|
name: i18n.t('Monthly')
|
|
269
272
|
}, {
|
|
270
273
|
id: BIMONTHLY,
|
|
271
|
-
getPeriods: getBiMonthlyPeriodType(filterFuturePeriods,
|
|
274
|
+
getPeriods: getBiMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
272
275
|
name: i18n.t('Bi-monthly')
|
|
273
276
|
}, {
|
|
274
277
|
id: QUARTERLY,
|
|
275
|
-
getPeriods: getQuarterlyPeriodType(filterFuturePeriods,
|
|
278
|
+
getPeriods: getQuarterlyPeriodType(filterFuturePeriods, periodSettings),
|
|
276
279
|
name: i18n.t('Quarterly')
|
|
277
280
|
}, {
|
|
278
281
|
id: SIXMONTHLY,
|
|
279
|
-
getPeriods: getSixMonthlyPeriodType(filterFuturePeriods,
|
|
282
|
+
getPeriods: getSixMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
280
283
|
name: i18n.t('Six-monthly')
|
|
281
284
|
}, {
|
|
282
285
|
id: SIXMONTHLYAPR,
|
|
283
|
-
getPeriods: getSixMonthlyAprilPeriodType(filterFuturePeriods,
|
|
286
|
+
getPeriods: getSixMonthlyAprilPeriodType(filterFuturePeriods, periodSettings),
|
|
284
287
|
name: i18n.t('Six-monthly April')
|
|
285
288
|
}, {
|
|
286
289
|
id: YEARLY,
|
|
287
|
-
getPeriods: getYearlyPeriodType(filterFuturePeriods,
|
|
290
|
+
getPeriods: getYearlyPeriodType(filterFuturePeriods, periodSettings),
|
|
288
291
|
name: i18n.t('Yearly')
|
|
289
292
|
}, {
|
|
290
293
|
id: FYNOV,
|
|
291
|
-
getPeriods: getFinancialNovemberPeriodType(filterFuturePeriods,
|
|
294
|
+
getPeriods: getFinancialNovemberPeriodType(filterFuturePeriods, periodSettings),
|
|
292
295
|
name: i18n.t('Financial year (Start November)')
|
|
293
296
|
}, {
|
|
294
297
|
id: FYOCT,
|
|
295
|
-
getPeriods: getFinancialOctoberPeriodType(filterFuturePeriods,
|
|
298
|
+
getPeriods: getFinancialOctoberPeriodType(filterFuturePeriods, periodSettings),
|
|
296
299
|
name: i18n.t('Financial year (Start October)')
|
|
297
300
|
}, {
|
|
298
301
|
id: FYJUL,
|
|
299
|
-
getPeriods: getFinancialJulyPeriodType(filterFuturePeriods,
|
|
302
|
+
getPeriods: getFinancialJulyPeriodType(filterFuturePeriods, periodSettings),
|
|
300
303
|
name: i18n.t('Financial year (Start July)')
|
|
301
304
|
}, {
|
|
302
305
|
id: FYAPR,
|
|
303
|
-
getPeriods: getFinancialAprilPeriodType(filterFuturePeriods,
|
|
306
|
+
getPeriods: getFinancialAprilPeriodType(filterFuturePeriods, periodSettings),
|
|
304
307
|
name: i18n.t('Financial year (Start April)')
|
|
305
308
|
}];
|
|
306
309
|
};
|
|
307
310
|
|
|
308
|
-
export const getFixedPeriodsOptionsById =
|
|
309
|
-
|
|
310
|
-
return getOptions(calendar).find(option => option.id === id);
|
|
311
|
+
export const getFixedPeriodsOptionsById = (id, periodSettings) => {
|
|
312
|
+
return getOptions(periodSettings).find(option => option.id === id);
|
|
311
313
|
};
|
|
312
314
|
export const getFixedPeriodsOptions = () => getOptions();
|
|
313
315
|
export const getYearOffsetFromNow = yearStr => parseInt(yearStr) - new Date(Date.now()).getFullYear();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhis2/analytics",
|
|
3
|
-
"version": "24.5.0-alpha.
|
|
3
|
+
"version": "24.5.0-alpha.3",
|
|
4
4
|
"main": "./build/cjs/index.js",
|
|
5
5
|
"module": "./build/es/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -48,11 +48,6 @@
|
|
|
48
48
|
"styled-jsx": "^4.0.1",
|
|
49
49
|
"typeface-roboto": "^0.0.75"
|
|
50
50
|
},
|
|
51
|
-
"jest": {
|
|
52
|
-
"transformIgnorePatterns": [
|
|
53
|
-
"/!node_modules\\/multi-calendar-dates/"
|
|
54
|
-
]
|
|
55
|
-
},
|
|
56
51
|
"peerDependencies": {
|
|
57
52
|
"@dhis2/app-runtime": "^3",
|
|
58
53
|
"@dhis2/d2-i18n": "^1.1",
|
|
@@ -64,7 +59,7 @@
|
|
|
64
59
|
},
|
|
65
60
|
"dependencies": {
|
|
66
61
|
"@dhis2/d2-ui-rich-text": "^7.4.0",
|
|
67
|
-
"@dhis2/multi-calendar-dates": "1.0.0
|
|
62
|
+
"@dhis2/multi-calendar-dates": "1.0.0",
|
|
68
63
|
"classnames": "^2.3.1",
|
|
69
64
|
"d2-utilizr": "^0.2.16",
|
|
70
65
|
"d3-color": "^1.2.3",
|