@iapps/ng-dhis2-ui 1.0.0 → 1.0.2

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.
Files changed (103) hide show
  1. package/esm2022/index.mjs +4 -2
  2. package/esm2022/lib/modules/header-bar/header-bar.component.mjs +7 -8
  3. package/esm2022/lib/modules/organisation-unit-selector/components/OrgUnitDimension.mjs +212 -0
  4. package/esm2022/lib/modules/organisation-unit-selector/components/index.mjs +6 -0
  5. package/esm2022/lib/modules/organisation-unit-selector/components/styles/OrgUnitDimension.style.mjs +83 -0
  6. package/esm2022/lib/modules/organisation-unit-selector/components/utils/index.mjs +6 -0
  7. package/esm2022/lib/modules/organisation-unit-selector/components/utils/ouIdHelper/index.mjs +18 -0
  8. package/esm2022/lib/modules/organisation-unit-selector/components/utils/ouLevelUtils/index.mjs +27 -0
  9. package/esm2022/lib/modules/organisation-unit-selector/index.mjs +6 -0
  10. package/esm2022/lib/modules/organisation-unit-selector/models/index.mjs +5 -0
  11. package/esm2022/lib/modules/organisation-unit-selector/models/organisation-unit-config.model.mjs +16 -0
  12. package/esm2022/lib/modules/organisation-unit-selector/organisation-unit-selector.component.mjs +78 -0
  13. package/esm2022/lib/modules/organisation-unit-selector/organisation-unit-selector.module.mjs +19 -0
  14. package/esm2022/lib/modules/period-selector/components/FixedPeriodFilter.mjs +44 -0
  15. package/esm2022/lib/modules/period-selector/components/PeriodDimension.mjs +41 -0
  16. package/esm2022/lib/modules/period-selector/components/PeriodTransfer.mjs +110 -0
  17. package/esm2022/lib/modules/period-selector/components/RelativePeriodFilter.mjs +28 -0
  18. package/esm2022/lib/modules/period-selector/components/utils/fixedPeriods.mjs +308 -0
  19. package/esm2022/lib/modules/period-selector/components/utils/index.mjs +5 -0
  20. package/esm2022/lib/modules/period-selector/components/utils/periodTypes.mjs +23 -0
  21. package/esm2022/lib/modules/period-selector/components/utils/relativePeriods.mjs +139 -0
  22. package/esm2022/lib/modules/period-selector/index.mjs +6 -0
  23. package/esm2022/lib/modules/period-selector/period-selector.component.mjs +66 -0
  24. package/esm2022/lib/modules/period-selector/period-selector.module.mjs +19 -0
  25. package/esm2022/lib/shared/assets/AssignedCategoriesIcon.mjs +12 -0
  26. package/esm2022/lib/shared/assets/DimensionItemIcons/PeriodIcon.mjs +4 -0
  27. package/esm2022/lib/shared/components/TransferOption.mjs +130 -0
  28. package/esm2022/lib/shared/components/index.mjs +2 -1
  29. package/esm2022/lib/shared/index.mjs +7 -0
  30. package/esm2022/lib/shared/styles/DimensionSelector.style.mjs +39 -0
  31. package/esm2022/lib/shared/styles/index.mjs +5 -0
  32. package/esm2022/lib/shared/utils/axis.mjs +25 -0
  33. package/esm2022/lib/shared/utils/axisGetDimension.mjs +5 -0
  34. package/esm2022/lib/shared/utils/axisHasDimension.mjs +3 -0
  35. package/esm2022/lib/shared/utils/dimension.mjs +52 -0
  36. package/esm2022/lib/shared/utils/dimensionGetItems.mjs +6 -0
  37. package/esm2022/lib/shared/utils/dimensionIs.mjs +3 -0
  38. package/esm2022/lib/shared/utils/dimensionIsEmpty.mjs +5 -0
  39. package/esm2022/lib/shared/utils/dimensionIsValid.mjs +16 -0
  40. package/esm2022/lib/shared/utils/dimensionSelectorHelper.mjs +4 -0
  41. package/esm2022/lib/shared/utils/index.mjs +15 -0
  42. package/esm2022/lib/shared/utils/layoutGetAllAxes.mjs +7 -0
  43. package/esm2022/lib/shared/utils/layoutGetAllDimensions.mjs +6 -0
  44. package/esm2022/lib/shared/utils/layoutGetDimension.mjs +4 -0
  45. package/esm2022/lib/shared/utils/layoutReplaceDimension.mjs +17 -0
  46. package/esm2022/lib/shared/utils/list.mjs +15 -0
  47. package/esm2022/lib/shared/utils/predefinedDimensions.mjs +45 -0
  48. package/fesm2022/iapps-ng-dhis2-ui.mjs +1566 -55
  49. package/fesm2022/iapps-ng-dhis2-ui.mjs.map +1 -1
  50. package/index.d.ts +3 -1
  51. package/lib/modules/header-bar/header-bar.component.d.ts +0 -3
  52. package/lib/modules/organisation-unit-selector/components/OrgUnitDimension.d.ts +26 -0
  53. package/lib/modules/organisation-unit-selector/components/index.d.ts +2 -0
  54. package/lib/modules/organisation-unit-selector/components/styles/OrgUnitDimension.style.d.ts +1 -0
  55. package/lib/modules/organisation-unit-selector/components/utils/index.d.ts +2 -0
  56. package/lib/modules/organisation-unit-selector/components/utils/ouIdHelper/index.d.ts +10 -0
  57. package/lib/modules/organisation-unit-selector/components/utils/ouLevelUtils/index.d.ts +1 -0
  58. package/lib/modules/organisation-unit-selector/index.d.ts +2 -0
  59. package/lib/modules/organisation-unit-selector/models/index.d.ts +1 -0
  60. package/lib/modules/organisation-unit-selector/models/organisation-unit-config.model.d.ts +12 -0
  61. package/lib/modules/organisation-unit-selector/organisation-unit-selector.component.d.ts +26 -0
  62. package/lib/modules/organisation-unit-selector/organisation-unit-selector.module.d.ts +9 -0
  63. package/lib/modules/period-selector/components/FixedPeriodFilter.d.ts +18 -0
  64. package/lib/modules/period-selector/components/PeriodDimension.d.ts +15 -0
  65. package/lib/modules/period-selector/components/PeriodTransfer.d.ts +28 -0
  66. package/lib/modules/period-selector/components/RelativePeriodFilter.d.ts +11 -0
  67. package/lib/modules/period-selector/components/utils/fixedPeriods.d.ts +17 -0
  68. package/lib/modules/period-selector/components/utils/index.d.ts +4 -0
  69. package/lib/modules/period-selector/components/utils/periodTypes.d.ts +19 -0
  70. package/lib/modules/period-selector/components/utils/relativePeriods.d.ts +17 -0
  71. package/lib/modules/period-selector/index.d.ts +2 -0
  72. package/lib/modules/period-selector/period-selector.component.d.ts +21 -0
  73. package/lib/modules/period-selector/period-selector.module.d.ts +9 -0
  74. package/lib/shared/assets/AssignedCategoriesIcon.d.ts +2 -0
  75. package/lib/shared/assets/DimensionItemIcons/PeriodIcon.d.ts +3 -0
  76. package/lib/shared/components/TransferOption.d.ts +19 -0
  77. package/lib/shared/components/index.d.ts +1 -0
  78. package/lib/shared/index.d.ts +3 -0
  79. package/lib/shared/styles/DimensionSelector.style.d.ts +2 -0
  80. package/lib/shared/styles/index.d.ts +1 -0
  81. package/lib/shared/utils/axis.d.ts +11 -0
  82. package/lib/shared/utils/axisGetDimension.d.ts +1 -0
  83. package/lib/shared/utils/axisHasDimension.d.ts +1 -0
  84. package/lib/shared/utils/dimension.d.ts +45 -0
  85. package/lib/shared/utils/dimensionGetItems.d.ts +1 -0
  86. package/lib/shared/utils/dimensionIs.d.ts +1 -0
  87. package/lib/shared/utils/dimensionIsEmpty.d.ts +1 -0
  88. package/lib/shared/utils/dimensionIsValid.d.ts +1 -0
  89. package/lib/shared/utils/dimensionSelectorHelper.d.ts +3 -0
  90. package/lib/shared/utils/index.d.ts +11 -0
  91. package/lib/shared/utils/layoutGetAllAxes.d.ts +1 -0
  92. package/lib/shared/utils/layoutGetAllDimensions.d.ts +1 -0
  93. package/lib/shared/utils/layoutGetDimension.d.ts +1 -0
  94. package/lib/shared/utils/layoutReplaceDimension.d.ts +1 -0
  95. package/lib/shared/utils/list.d.ts +1 -0
  96. package/lib/shared/utils/predefinedDimensions.d.ts +65 -0
  97. package/package.json +1 -1
  98. package/esm2022/lib/modules/app-shell/app-shell.component.mjs +0 -33
  99. package/esm2022/lib/modules/app-shell/app-shell.module.mjs +0 -19
  100. package/esm2022/lib/modules/app-shell/index.mjs +0 -6
  101. package/lib/modules/app-shell/app-shell.component.d.ts +0 -8
  102. package/lib/modules/app-shell/app-shell.module.d.ts +0 -9
  103. package/lib/modules/app-shell/index.d.ts +0 -2
@@ -0,0 +1,308 @@
1
+ import { generateFixedPeriods, getNowInCalendar, } from '@dhis2/multi-calendar-dates';
2
+ import i18n from '@dhis2/d2-i18n';
3
+ import { DAILY, WEEKLY, WEEKLYWED, WEEKLYTHU, WEEKLYSAT, WEEKLYSUN, BIWEEKLY, MONTHLY, BIMONTHLY, QUARTERLY, SIXMONTHLY, SIXMONTHLYAPR, YEARLY, FYNOV, FYOCT, FYJUL, FYAPR, } from './periodTypes';
4
+ const PERIOD_TYPE_REGEX = {
5
+ [DAILY]: /^([0-9]{4})([0-9]{2})([0-9]{2})$/,
6
+ [WEEKLY]: /^([0-9]{4})()W([0-9]{1,2})$/,
7
+ [BIWEEKLY]: /^([0-9]{4})BiW([0-9]{1,2})$/,
8
+ [WEEKLYWED]: /^([0-9]{4})(Wed)W([0-9]{1,2})$/,
9
+ [WEEKLYTHU]: /^([0-9]{4})(Thu)W([0-9]{1,2})$/,
10
+ [WEEKLYSAT]: /^([0-9]{4})(Sat)W([0-9]{1,2})$/,
11
+ [WEEKLYSUN]: /^([0-9]{4})(Sun)W([0-9]{1,2})$/,
12
+ [MONTHLY]: /^([0-9]{4})([0-9]{2})$/,
13
+ [BIMONTHLY]: /^([0-9]{4})([0-9]{2})B$/,
14
+ [QUARTERLY]: /^([0-9]{4})Q([1234])$/,
15
+ [SIXMONTHLY]: /^([0-9]{4})S([12])$/,
16
+ [SIXMONTHLYAPR]: /^([0-9]{4})AprilS([12])$/,
17
+ // [SIXMONTHLYNOV]: /^([0-9]{4})NovS([12])$/, // YYYY"NovS"[1/2] Not supported?
18
+ [YEARLY]: /^([0-9]{4})$/,
19
+ [FYNOV]: /^([0-9]{4})Nov$/,
20
+ [FYOCT]: /^([0-9]{4})Oct$/,
21
+ [FYJUL]: /^([0-9]{4})July$/,
22
+ [FYAPR]: /^([0-9]{4})April$/, // YYYY"April"
23
+ };
24
+ const getPeriods = ({ periodType, config, fnFilter, periodSettings = {}, }) => {
25
+ const offset = parseInt(config.offset, 10);
26
+ const isFilter = config.filterFuturePeriods;
27
+ const isReverse = periodType.match(/^FY|YEARLY/)
28
+ ? true
29
+ : config.reversePeriods;
30
+ const { calendar = 'gregory', locale = 'en' } = periodSettings;
31
+ const now = getNowInCalendar(calendar);
32
+ const year = (now.eraYear || now.year) + offset;
33
+ const params = {
34
+ periodType,
35
+ year,
36
+ calendar,
37
+ locale,
38
+ startingDay: config.startDay,
39
+ };
40
+ let periods = generateFixedPeriods(params);
41
+ periods = isFilter ? fnFilter(periods) : periods;
42
+ periods = !isReverse ? periods : periods.reverse();
43
+ return periods;
44
+ };
45
+ const getDailyPeriodType = (fnFilter, periodSettings) => {
46
+ return (config) => {
47
+ return getPeriods({
48
+ periodType: 'DAILY',
49
+ config,
50
+ fnFilter,
51
+ periodSettings,
52
+ });
53
+ };
54
+ };
55
+ const getWeeklyPeriodType = (weekObj, fnFilter, periodSettings) => {
56
+ return (config) => {
57
+ return getPeriods({
58
+ periodType: 'WEEKLY',
59
+ config: {
60
+ ...config,
61
+ startDay: weekObj.startDay,
62
+ },
63
+ fnFilter,
64
+ periodSettings,
65
+ });
66
+ };
67
+ };
68
+ const getBiWeeklyPeriodType = (fnFilter, periodSettings) => {
69
+ return (config) => {
70
+ return getPeriods({
71
+ periodType: 'BIWEEKLY',
72
+ config,
73
+ fnFilter,
74
+ periodSettings,
75
+ });
76
+ };
77
+ };
78
+ const getMonthlyPeriodType = (fnFilter, periodSettings) => {
79
+ return (config) => {
80
+ return getPeriods({
81
+ periodType: 'MONTHLY',
82
+ config,
83
+ fnFilter,
84
+ periodSettings,
85
+ });
86
+ };
87
+ };
88
+ const getBiMonthlyPeriodType = (fnFilter, periodSettings) => {
89
+ return (config) => {
90
+ return getPeriods({
91
+ periodType: 'BIMONTHLY',
92
+ config,
93
+ fnFilter,
94
+ periodSettings,
95
+ });
96
+ };
97
+ };
98
+ const getQuarterlyPeriodType = (fnFilter, periodSettings) => {
99
+ return (config) => {
100
+ return getPeriods({
101
+ periodType: 'QUARTERLY',
102
+ config,
103
+ fnFilter,
104
+ periodSettings,
105
+ });
106
+ };
107
+ };
108
+ const getSixMonthlyPeriodType = (fnFilter, periodSettings) => {
109
+ return (config) => {
110
+ return getPeriods({
111
+ periodType: 'SIXMONTHLY',
112
+ config,
113
+ fnFilter,
114
+ periodSettings,
115
+ });
116
+ };
117
+ };
118
+ const getSixMonthlyAprilPeriodType = (fnFilter, periodSettings) => {
119
+ return (config) => {
120
+ return getPeriods({
121
+ periodType: 'SIXMONTHLYAPR',
122
+ config,
123
+ fnFilter,
124
+ periodSettings,
125
+ });
126
+ };
127
+ };
128
+ const getYearlyPeriodType = (fnFilter, periodSettings) => {
129
+ return (config) => {
130
+ return getPeriods({
131
+ periodType: 'YEARLY',
132
+ config,
133
+ fnFilter,
134
+ periodSettings,
135
+ });
136
+ };
137
+ };
138
+ const getFinancialOctoberPeriodType = (fnFilter, periodSettings) => {
139
+ return (config) => {
140
+ return getPeriods({
141
+ periodType: 'FYOCT',
142
+ config,
143
+ fnFilter,
144
+ periodSettings,
145
+ });
146
+ };
147
+ };
148
+ const getFinancialNovemberPeriodType = (fnFilter, periodSettings) => {
149
+ return (config) => {
150
+ return getPeriods({
151
+ periodType: 'FYNOV',
152
+ config,
153
+ fnFilter,
154
+ periodSettings,
155
+ });
156
+ };
157
+ };
158
+ const getFinancialJulyPeriodType = (fnFilter, periodSettings) => {
159
+ return (config) => {
160
+ return getPeriods({
161
+ periodType: 'FYJUL',
162
+ config,
163
+ fnFilter,
164
+ periodSettings,
165
+ });
166
+ };
167
+ };
168
+ const getFinancialAprilPeriodType = (fnFilter, periodSettings) => {
169
+ return (config) => {
170
+ return getPeriods({
171
+ periodType: 'FYAPR',
172
+ config,
173
+ fnFilter,
174
+ periodSettings,
175
+ });
176
+ };
177
+ };
178
+ const filterFuturePeriods = (periods) => {
179
+ const array = [];
180
+ const now = new Date(Date.now());
181
+ for (let i = 0; i < periods.length; i++) {
182
+ if (new Date(periods[i].startDate) <= now) {
183
+ array.push(periods[i]);
184
+ }
185
+ }
186
+ return array;
187
+ };
188
+ const getOptions = (periodSettings) => {
189
+ return [
190
+ {
191
+ id: DAILY,
192
+ getPeriods: getDailyPeriodType(filterFuturePeriods, periodSettings),
193
+ name: i18n.t('Daily'),
194
+ },
195
+ {
196
+ id: WEEKLY,
197
+ getPeriods: getWeeklyPeriodType({ startDay: 1 }, filterFuturePeriods, periodSettings),
198
+ name: i18n.t('Weekly'),
199
+ },
200
+ {
201
+ id: WEEKLYWED,
202
+ getPeriods: getWeeklyPeriodType({ startDay: 3 }, filterFuturePeriods, periodSettings),
203
+ name: i18n.t('Weekly (Start Wednesday)'),
204
+ },
205
+ {
206
+ id: WEEKLYTHU,
207
+ getPeriods: getWeeklyPeriodType({ startDay: 4 }, filterFuturePeriods, periodSettings),
208
+ name: i18n.t('Weekly (Start Thursday)'),
209
+ },
210
+ {
211
+ id: WEEKLYSAT,
212
+ getPeriods: getWeeklyPeriodType({ startDay: 6 }, filterFuturePeriods, periodSettings),
213
+ name: i18n.t('Weekly (Start Saturday)'),
214
+ },
215
+ {
216
+ id: WEEKLYSUN,
217
+ getPeriods: getWeeklyPeriodType({ startDay: 7 }, filterFuturePeriods, periodSettings),
218
+ name: i18n.t('Weekly (Start Sunday)'),
219
+ },
220
+ {
221
+ id: BIWEEKLY,
222
+ getPeriods: getBiWeeklyPeriodType(filterFuturePeriods, periodSettings),
223
+ name: i18n.t('Bi-weekly'),
224
+ },
225
+ {
226
+ id: MONTHLY,
227
+ getPeriods: getMonthlyPeriodType(filterFuturePeriods, periodSettings),
228
+ name: i18n.t('Monthly'),
229
+ },
230
+ {
231
+ id: BIMONTHLY,
232
+ getPeriods: getBiMonthlyPeriodType(filterFuturePeriods, periodSettings),
233
+ name: i18n.t('Bi-monthly'),
234
+ },
235
+ {
236
+ id: QUARTERLY,
237
+ getPeriods: getQuarterlyPeriodType(filterFuturePeriods, periodSettings),
238
+ name: i18n.t('Quarterly'),
239
+ },
240
+ {
241
+ id: SIXMONTHLY,
242
+ getPeriods: getSixMonthlyPeriodType(filterFuturePeriods, periodSettings),
243
+ name: i18n.t('Six-monthly'),
244
+ },
245
+ {
246
+ id: SIXMONTHLYAPR,
247
+ getPeriods: getSixMonthlyAprilPeriodType(filterFuturePeriods, periodSettings),
248
+ name: i18n.t('Six-monthly April'),
249
+ },
250
+ {
251
+ id: YEARLY,
252
+ getPeriods: getYearlyPeriodType(filterFuturePeriods, periodSettings),
253
+ name: i18n.t('Yearly'),
254
+ },
255
+ {
256
+ id: FYNOV,
257
+ getPeriods: getFinancialNovemberPeriodType(filterFuturePeriods, periodSettings),
258
+ name: i18n.t('Financial year (Start November)'),
259
+ },
260
+ {
261
+ id: FYOCT,
262
+ getPeriods: getFinancialOctoberPeriodType(filterFuturePeriods, periodSettings),
263
+ name: i18n.t('Financial year (Start October)'),
264
+ },
265
+ {
266
+ id: FYJUL,
267
+ getPeriods: getFinancialJulyPeriodType(filterFuturePeriods, periodSettings),
268
+ name: i18n.t('Financial year (Start July)'),
269
+ },
270
+ {
271
+ id: FYAPR,
272
+ getPeriods: getFinancialAprilPeriodType(filterFuturePeriods, periodSettings),
273
+ name: i18n.t('Financial year (Start April)'),
274
+ },
275
+ ];
276
+ };
277
+ export const getFixedPeriodsOptionsById = (id, periodSettings) => {
278
+ return getOptions(periodSettings).find((option) => option.id === id);
279
+ };
280
+ export const getFixedPeriodsOptions = () => getOptions();
281
+ export const getYearOffsetFromNow = (yearStr) => parseInt(yearStr) - new Date(Date.now()).getFullYear();
282
+ export const parsePeriodCode = (code, allowedTypes) => {
283
+ const periodTypes = Object.keys(PERIOD_TYPE_REGEX);
284
+ let i = 0;
285
+ let type = '';
286
+ let match = undefined;
287
+ while (i < periodTypes.length && !match) {
288
+ type = periodTypes[i];
289
+ match = code.match(PERIOD_TYPE_REGEX[type]);
290
+ i++;
291
+ }
292
+ if (!match ||
293
+ (Array.isArray(allowedTypes) && !allowedTypes.some((t) => t === type))) {
294
+ return undefined;
295
+ }
296
+ const period = getFixedPeriodsOptionsById(type);
297
+ const offset = getYearOffsetFromNow(match[1]);
298
+ const options = period?.getPeriods({ offset });
299
+ return period
300
+ ? {
301
+ id: period.id,
302
+ name: period.name,
303
+ year: match[1],
304
+ options,
305
+ }
306
+ : null;
307
+ };
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRQZXJpb2RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbmctZGhpczItdWkvc3JjL2xpYi9tb2R1bGVzL3BlcmlvZC1zZWxlY3Rvci9jb21wb25lbnRzL3V0aWxzL2ZpeGVkUGVyaW9kcy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixnQkFBZ0IsR0FDakIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFDVixhQUFhLEVBQ2IsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLENBQUMsS0FBSyxDQUFDLEVBQUUsa0NBQWtDO0lBQzNDLENBQUMsTUFBTSxDQUFDLEVBQUUsNkJBQTZCO0lBQ3ZDLENBQUMsUUFBUSxDQUFDLEVBQUUsNkJBQTZCO0lBQ3pDLENBQUMsU0FBUyxDQUFDLEVBQUUsZ0NBQWdDO0lBQzdDLENBQUMsU0FBUyxDQUFDLEVBQUUsZ0NBQWdDO0lBQzdDLENBQUMsU0FBUyxDQUFDLEVBQUUsZ0NBQWdDO0lBQzdDLENBQUMsU0FBUyxDQUFDLEVBQUUsZ0NBQWdDO0lBQzdDLENBQUMsT0FBTyxDQUFDLEVBQUUsd0JBQXdCO0lBQ25DLENBQUMsU0FBUyxDQUFDLEVBQUUseUJBQXlCO0lBQ3RDLENBQUMsU0FBUyxDQUFDLEVBQUUsdUJBQXVCO0lBQ3BDLENBQUMsVUFBVSxDQUFDLEVBQUUscUJBQXFCO0lBQ25DLENBQUMsYUFBYSxDQUFDLEVBQUUsMEJB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LEtBQUssRUFBRTtRQUN2QyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFFLGlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxFQUFFLENBQUM7S0FDTDtJQUVELElBQ0UsQ0FBQyxLQUFLO1FBQ04sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQ3RFO1FBQ0EsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUUvQyxPQUFPLE1BQU07UUFDWCxDQUFDLENBQUM7WUFDRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDYixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDZCxPQUFPO1NBQ1I7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2VuZXJhdGVGaXhlZFBlcmlvZHMsXG4gIGdldE5vd0luQ2FsZW5kYXIsXG59IGZyb20gJ0BkaGlzMi9tdWx0aS1jYWxlbmRhci1kYXRlcyc7XG5pbXBvcnQgaTE4biBmcm9tICdAZGhpczIvZDItaTE4bic7XG5pbXBvcnQge1xuICBEQUlMWSxcbiAgV0VFS0xZLFxuICBXRUVLTFlXRUQsXG4gIFdFRUtMWVRIVSxcbiAgV0VFS0xZU0FULFxuICBXRUVLTFlTVU4sXG4gIEJJV0VFS0xZLFxuICBNT05USExZLFxuICBCSU1PTlRITFksXG4gIFFVQVJURVJMWSxcbiAgU0lYTU9OVEhMWSxcbiAgU0lYTU9OVEhMWUFQUixcbiAgWUVBUkxZLFxuICBGWU5PVixcbiAgRllPQ1QsXG4gIEZZSlVMLFxuICBGWUFQUixcbn0gZnJvbSAnLi9wZXJpb2RUeXBlcyc7XG5cbmNvbnN0IFBFUklPRF9UWVBFX1JFR0VYID0ge1xuICBbREFJTFldOiAvXihbMC05XXs0fSkoWzAtOV17Mn0pKFswLTldezJ9KSQvLCAvLyBZWVlZTU1ERFxuICBbV0VFS0xZXTogL14oWzAtOV17NH0pKClXKFswLTldezEsMn0pJC8sIC8vIFlZWVlcIldcIlsxLTUzXVxuICBbQklXRUVLTFldOiAvXihbMC05XXs0fSlCaVcoWzAtOV17MSwyfSkkLywgLy8gWVlZWVwiQmlXXCJbMS0yN11cbiAgW1dFRUtMWVdFRF06IC9eKFswLTldezR9KShXZWQpVyhbMC05XXsxLDJ9KSQvLCAvLyBZWVlZXCJXZWRXXCJbMS01M11cbiAgW1dFRUtMWVRIVV06IC9eKFswLTldezR9KShUaHUpVyhbMC05XXsxLDJ9KSQvLCAvLyBZWVlZXCJUaHVXXCJbMS01M11cbiAgW1dFRUtMWVNBVF06IC9eKFswLTldezR9KShTYXQpVyhbMC05XXsxLDJ9KSQvLCAvLyBZWVlZXCJTYXRXXCJbMS01M11cbiAgW1dFRUtMWVNVTl06IC9eKFswLTldezR9KShTdW4pVyhbMC05XXsxLDJ9KSQvLCAvLyBZWVlZXCJTdW5XXCJbMS01M11cbiAgW01PTlRITFldOiAvXihbMC05XXs0fSkoWzAtOV17Mn0pJC8sIC8vIFlZWVlNTVxuICBbQklNT05USExZXTogL14oWzAtOV17NH0pKFswLTldezJ9KUIkLywgLy8gWVlZWTBbMS02XVwiQlwiXG4gIFtRVUFSVEVSTFldOiAvXihbMC05XXs0fSlRKFsxMjM0XSkkLywgLy8gWVlZWVwiUVwiWzEtNF1cbiAgW1NJWE1PTlRITFldOiAvXihbMC05XXs0fSlTKFsxMl0pJC8sIC8vIFlZWVlcIlNcIlsxLzJdXG4gIFtTSVhNT05USExZQVBSXTogL14oWzAtOV17NH0pQXByaWxTKFsxMl0pJC8sIC8vIFlZWVlcIkFwcmlsU1wiWzEvMl1cbiAgLy8gW1NJWE1PTlRITFlOT1ZdOiAvXihbMC05XXs0fSlOb3ZTKFsxMl0pJC8sIC8vIFlZWVlcIk5vdlNcIlsxLzJdIE5vdCBzdXBwb3J0ZWQ/XG4gIFtZRUFSTFldOiAvXihbMC05XXs0fSkkLywgLy8gWVlZWVxuICBbRllOT1ZdOiAvXihbMC05XXs0fSlOb3YkLywgLy8gWVlZWVwiTm92XCJcbiAgW0ZZT0NUXTogL14oWzAtOV17NH0pT2N0JC8sIC8vIFlZWVlcIk9jdFwiXG4gIFtGWUpVTF06IC9eKFswLTldezR9KUp1bHkkLywgLy8gWVlZWVwiSnVseVwiXG4gIFtGWUFQUl06IC9eKFswLTldezR9KUFwcmlsJC8sIC8vIFlZWVlcIkFwcmlsXCJcbn07XG5cbmNvbnN0IGdldFBlcmlvZHMgPSAoe1xuICBwZXJpb2RUeXBlLFxuICBjb25maWcsXG4gIGZuRmlsdGVyLFxuICBwZXJpb2RTZXR0aW5ncyA9IHt9LFxufTogYW55KSA9PiB7XG4gIGNvbnN0IG9mZnNldCA9IHBhcnNlSW50KGNvbmZpZy5vZmZzZXQsIDEwKTtcbiAgY29uc3QgaXNGaWx0ZXIgPSBjb25maWcuZmlsdGVyRnV0dXJlUGVyaW9kcztcbiAgY29uc3QgaXNSZXZlcnNlID0gcGVyaW9kVHlwZS5tYXRjaCgvXkZZfFlFQVJMWS8pXG4gICAgPyB0cnVlXG4gICAgOiBjb25maWcucmV2ZXJzZVBlcmlvZHM7XG5cbiAgY29uc3QgeyBjYWxlbmRhciA9ICdncmVnb3J5JywgbG9jYWxlID0gJ2VuJyB9ID0gcGVyaW9kU2V0dGluZ3MgYXMgYW55O1xuICBjb25zdCBub3cgPSBnZXROb3dJbkNhbGVuZGFyKGNhbGVuZGFyKTtcbiAgY29uc3QgeWVhciA9IChub3cuZXJhWWVhciB8fCBub3cueWVhcikgKyBvZmZzZXQ7XG5cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHBlcmlvZFR5cGUsXG4gICAgeWVhcixcbiAgICBjYWxlbmRhcixcbiAgICBsb2NhbGUsXG4gICAgc3RhcnRpbmdEYXk6IGNvbmZpZy5zdGFydERheSxcbiAgfTtcblxuICBsZXQgcGVyaW9kcyA9IGdlbmVyYXRlRml4ZWRQZXJpb2RzKHBhcmFtcyk7XG5cbiAgcGVyaW9kcyA9IGlzRmlsdGVyID8gZm5GaWx0ZXIocGVyaW9kcykgOiBwZXJpb2RzO1xuICBwZXJpb2RzID0gIWlzUmV2ZXJzZSA/IHBlcmlvZHMgOiBwZXJpb2RzLnJldmVyc2UoKTtcblxuICByZXR1cm4gcGVyaW9kcztcbn07XG5cbmNvbnN0IGdldERhaWx5UGVyaW9kVHlwZSA9IChmbkZpbHRlcjogYW55LCBwZXJpb2RTZXR0aW5ncz86IGFueSkgPT4ge1xuICByZXR1cm4gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGdldFBlcmlvZHMoe1xuICAgICAgcGVyaW9kVHlwZTogJ0RBSUxZJyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGZuRmlsdGVyLFxuICAgICAgcGVyaW9kU2V0dGluZ3MsXG4gICAgfSk7XG4gIH07XG59O1xuXG5jb25zdCBnZXRXZWVrbHlQZXJpb2RUeXBlID0gKFxuICB3ZWVrT2JqOiBhbnksXG4gIGZuRmlsdGVyOiBhbnksXG4gIHBlcmlvZFNldHRpbmdzOiBhbnlcbikgPT4ge1xuICByZXR1cm4gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGdldFBlcmlvZHMoe1xuICAgICAgcGVyaW9kVHlwZTogJ1dFRUtMWScsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBzdGFydERheTogd2Vla09iai5zdGFydERheSxcbiAgICAgIH0sXG4gICAgICBmbkZpbHRlcixcbiAgICAgIHBlcmlvZFNldHRpbmdzLFxuICAgIH0pO1xuICB9O1xufTtcblxuY29uc3QgZ2V0QmlXZWVrbHlQZXJpb2RUeXBlID0gKGZuRmlsdGVyOiBhbnksIHBlcmlvZFNldHRpbmdzOiBhbnkpID0+IHtcbiAgcmV0dXJuIChjb25maWc6IGFueSkgPT4ge1xuICAgIHJldHVybiBnZXRQZXJpb2RzKHtcbiAgICAgIHBlcmlvZFR5cGU6ICdCSVdFRUtMWScsXG4gICAgICBjb25maWcsXG4gICAgICBmbkZpbHRlcixcbiAgICAgIHBlcmlvZFNldHRpbmdzLFxuICAgIH0pO1xuICB9O1xufTtcblxuY29uc3QgZ2V0TW9udGhseVBlcmlvZFR5cGUgPSAoZm5GaWx0ZXI6IGFueSwgcGVyaW9kU2V0dGluZ3M6IGFueSkgPT4ge1xuICByZXR1cm4gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGdldFBlcmlvZHMoe1xuICAgICAgcGVyaW9kVHlwZTogJ01PTlRITFknLFxuICAgICAgY29uZmlnLFxuICAgICAgZm5GaWx0ZXIsXG4gICAgICBwZXJpb2RTZXR0aW5ncyxcbiAgICB9KTtcbiAgfTtcbn07XG5cbmNvbnN0IGdldEJpTW9udGhseVBlcmlvZFR5cGUgPSAoZm5GaWx0ZXI6IGFueSwgcGVyaW9kU2V0dGluZ3M6IGFueSkgPT4ge1xuICByZXR1cm4gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGdldFBlcmlvZHMoe1xuICAgICAgcGVyaW9kVHlwZTogJ0JJTU9OVEhMWScsXG4gICAgICBjb25maWcsXG4gICAgICBmbkZpbHRlcixcbiAgICAgIHBlcmlvZFNldHRpbmdzLFxuICAgIH0pO1xuICB9O1xufTtcblxuY29uc3QgZ2V0UXVhcnRlcmx5UGVyaW9kVHlwZSA9IChmbkZpbHRlcjogYW55LCBwZXJpb2RTZXR0aW5nczogYW55KSA9PiB7XG4gIHJldHVybiAoY29uZmlnOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZ2V0UGVyaW9kcyh7XG4gICAgICBwZXJpb2RUeXBlOiAnUVVBUlRFUkxZJyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGZuRmlsdGVyLFxuICAgICAgcGVyaW9kU2V0dGluZ3MsXG4gICAgfSk7XG4gIH07XG59O1xuXG5jb25zdCBnZXRTaXhNb250aGx5UGVyaW9kVHlwZSA9IChmbkZpbHRlcjogYW55LCBwZXJpb2RTZXR0aW5nczogYW55KSA9PiB7XG4gIHJldHVybiAoY29uZmlnOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZ2V0UGVyaW9kcyh7XG4gICAgICBwZXJpb2RUeXBlOiAnU0lYTU9OVEhMWScsXG4gICAgICBjb25maWcsXG4gICAgICBmbkZpbHRlcixcbiAgICAgIHBlcmlvZFNldHRpbmdzLFxuICAgIH0pO1xuICB9O1xufTtcblxuY29uc3QgZ2V0U2l4TW9udGhseUFwcmlsUGVyaW9kVHlwZSA9IChmbkZpbHRlcjogYW55LCBwZXJpb2RTZXR0aW5nczogYW55KSA9PiB7XG4gIHJldHVybiAoY29uZmlnOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZ2V0UGVyaW9kcyh7XG4gICAgICBwZXJpb2RUeXBlOiAnU0lYTU9OVEhMWUFQUicsXG4gICAgICBjb25maWcsXG4gICAgICBmbkZpbHRlcixcbiAgICAgIHBlcmlvZFNldHRpbmdzLFxuICAgIH0pO1xuICB9O1xufTtcblxuY29uc3QgZ2V0WWVhcmx5UGVyaW9kVHlwZSA9IChmbkZpbHRlcjogYW55LCBwZXJpb2RTZXR0aW5nczogYW55KSA9PiB7XG4gIHJldHVybiAoY29uZmlnOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZ2V0UGVyaW9kcyh7XG4gICAgICBwZXJpb2RUeXBlOiAnWUVBUkxZJyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGZuRmlsdGVyLFxuICAgICAgcGVyaW9kU2V0dGluZ3MsXG4gICAgfSk7XG4gIH07XG59O1xuXG5jb25zdCBnZXRGaW5hbmNpYWxPY3RvYmVyUGVyaW9kVHlwZSA9IChmbkZpbHRlcjogYW55LCBwZXJpb2RTZXR0aW5nczogYW55KSA9PiB7XG4gIHJldHVybiAoY29uZmlnOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZ2V0UGVyaW9kcyh7XG4gICAgICBwZXJpb2RUeXBlOiAnRllPQ1QnLFxuICAgICAgY29uZmlnLFxuICAgICAgZm5GaWx0ZXIsXG4gICAgICBwZXJpb2RTZXR0aW5ncyxcbiAgICB9KTtcbiAgfTtcbn07XG5cbmNvbnN0IGdldEZpbmFuY2lhbE5vdmVtYmVyUGVyaW9kVHlwZSA9IChmbkZpbHRlcjogYW55LCBwZXJpb2RTZXR0aW5nczogYW55KSA9PiB7XG4gIHJldHVybiAoY29uZmlnOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZ2V0UGVyaW9kcyh7XG4gICAgICBwZXJpb2RUeXBlOiAnRllOT1YnLFxuICAgICAgY29uZmlnLFxuICAgICAgZm5GaWx0ZXIsXG4gICAgICBwZXJpb2RTZXR0aW5ncyxcbiAgICB9KTtcbiAgfTtcbn07XG5cbmNvbnN0IGdldEZpbmFuY2lhbEp1bHlQZXJpb2RUeXBlID0gKGZuRmlsdGVyOiBhbnksIHBlcmlvZFNldHRpbmdzOiBhbnkpID0+IHtcbiAgcmV0dXJuIChjb25maWc6IGFueSkgPT4ge1xuICAgIHJldHVybiBnZXRQZXJpb2RzKHtcbiAgICAgIHBlcmlvZFR5cGU6ICdGWUpVTCcsXG4gICAgICBjb25maWcsXG4gICAgICBmbkZpbHRlcixcbiAgICAgIHBlcmlvZFNldHRpbmdzLFxuICAgIH0pO1xuICB9O1xufTtcblxuY29uc3QgZ2V0RmluYW5jaWFsQXByaWxQZXJpb2RUeXBlID0gKGZuRmlsdGVyOiBhbnksIHBlcmlvZFNldHRpbmdzOiBhbnkpID0+IHtcbiAgcmV0dXJuIChjb25maWc6IGFueSkgPT4ge1xuICAgIHJldHVybiBnZXRQZXJpb2RzKHtcbiAgICAgIHBlcmlvZFR5cGU6ICdGWUFQUicsXG4gICAgICBjb25maWcsXG4gICAgICBmbkZpbHRlcixcbiAgICAgIHBlcmlvZFNldHRpbmdzLFxuICAgIH0pO1xuICB9O1xufTtcblxuY29uc3QgZmlsdGVyRnV0dXJlUGVyaW9kcyA9IChwZXJpb2RzOiBhbnkpID0+IHtcbiAgY29uc3QgYXJyYXkgPSBbXTtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoRGF0ZS5ub3coKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJpb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5ldyBEYXRlKHBlcmlvZHNbaV0uc3RhcnREYXRlKSA8PSBub3cpIHtcbiAgICAgIGFycmF5LnB1c2gocGVyaW9kc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufTtcblxuY29uc3QgZ2V0T3B0aW9ucyA9IChwZXJpb2RTZXR0aW5ncz86IGFueSkgPT4ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGlkOiBEQUlMWSxcbiAgICAgIGdldFBlcmlvZHM6IGdldERhaWx5UGVyaW9kVHlwZShmaWx0ZXJGdXR1cmVQZXJpb2RzLCBwZXJpb2RTZXR0aW5ncyksXG4gICAgICBuYW1lOiBpMThuLnQoJ0RhaWx5JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogV0VFS0xZLFxuICAgICAgZ2V0UGVyaW9kczogZ2V0V2Vla2x5UGVyaW9kVHlwZShcbiAgICAgICAgeyBzdGFydERheTogMSB9LFxuICAgICAgICBmaWx0ZXJGdXR1cmVQZXJpb2RzLFxuICAgICAgICBwZXJpb2RTZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIG5hbWU6IGkxOG4udCgnV2Vla2x5JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogV0VFS0xZV0VELFxuICAgICAgZ2V0UGVyaW9kczogZ2V0V2Vla2x5UGVyaW9kVHlwZShcbiAgICAgICAgeyBzdGFydERheTogMyB9LFxuICAgICAgICBmaWx0ZXJGdXR1cmVQZXJpb2RzLFxuICAgICAgICBwZXJpb2RTZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIG5hbWU6IGkxOG4udCgnV2Vla2x5IChTdGFydCBXZWRuZXNkYXkpJyksXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogV0VFS0xZVEhVLFxuICAgICAgZ2V0UGVyaW9kczogZ2V0V2Vla2x5UGVyaW9kVHlwZShcbiAgICAgICAgeyBzdGFydERheTogNCB9LFxuICAgICAgICBmaWx0ZXJGdXR1cmVQZXJpb2RzLFxuICAgICAgICBwZXJpb2RTZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIG5hbWU6IGkxOG4udCgnV2Vla2x5IChTdGFydCBUaHVyc2RheSknKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBXRUVLTFlTQVQsXG4gICAgICBnZXRQZXJpb2RzOiBnZXRXZWVrbHlQZXJpb2RUeXBlKFxuICAgICAgICB7IHN0YXJ0RGF5OiA2IH0sXG4gICAgICAgIGZpbHRlckZ1dHVyZVBlcmlvZHMsXG4gICAgICAgIHBlcmlvZFNldHRpbmdzXG4gICAgICApLFxuICAgICAgbmFtZTogaTE4bi50KCdXZWVrbHkgKFN0YXJ0IFNhdHVyZGF5KScpLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFdFRUtMWVNVTixcbiAgICAgIGdldFBlcmlvZHM6IGdldFdlZWtseVBlcmlvZFR5cGUoXG4gICAgICAgIHsgc3RhcnREYXk6IDcgfSxcbiAgICAgICAgZmlsdGVyRnV0dXJlUGVyaW9kcyxcbiAgICAgICAgcGVyaW9kU2V0dGluZ3NcbiAgICAgICksXG4gICAgICBuYW1lOiBpMThuLnQoJ1dlZWtseSAoU3RhcnQgU3VuZGF5KScpLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IEJJV0VFS0xZLFxuICAgICAgZ2V0UGVyaW9kczogZ2V0QmlXZWVrbHlQZXJpb2RUeXBlKGZpbHRlckZ1dHVyZVBlcmlvZHMsIHBlcmlvZFNldHRpbmdzKSxcbiAgICAgIG5hbWU6IGkxOG4udCgnQmktd2Vla2x5JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogTU9OVEhMWSxcbiAgICAgIGdldFBlcmlvZHM6IGdldE1vbnRobHlQZXJpb2RUeXBlKGZpbHRlckZ1dHVyZVBlcmlvZHMsIHBlcmlvZFNldHRpbmdzKSxcbiAgICAgIG5hbWU6IGkxOG4udCgnTW9udGhseScpLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IEJJTU9OVEhMWSxcbiAgICAgIGdldFBlcmlvZHM6IGdldEJpTW9udGhseVBlcmlvZFR5cGUoZmlsdGVyRnV0dXJlUGVyaW9kcywgcGVyaW9kU2V0dGluZ3MpLFxuICAgICAgbmFtZTogaTE4bi50KCdCaS1tb250aGx5JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUVVBUlRFUkxZLFxuICAgICAgZ2V0UGVyaW9kczogZ2V0UXVhcnRlcmx5UGVyaW9kVHlwZShmaWx0ZXJGdXR1cmVQZXJpb2RzLCBwZXJpb2RTZXR0aW5ncyksXG4gICAgICBuYW1lOiBpMThuLnQoJ1F1YXJ0ZXJseScpLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFNJWE1PTlRITFksXG4gICAgICBnZXRQZXJpb2RzOiBnZXRTaXhNb250aGx5UGVyaW9kVHlwZShmaWx0ZXJGdXR1cmVQZXJpb2RzLCBwZXJpb2RTZXR0aW5ncyksXG4gICAgICBuYW1lOiBpMThuLnQoJ1NpeC1tb250aGx5JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogU0lYTU9OVEhMWUFQUixcbiAgICAgIGdldFBlcmlvZHM6IGdldFNpeE1vbnRobHlBcHJpbFBlcmlvZFR5cGUoXG4gICAgICAgIGZpbHRlckZ1dHVyZVBlcmlvZHMsXG4gICAgICAgIHBlcmlvZFNldHRpbmdzXG4gICAgICApLFxuICAgICAgbmFtZTogaTE4bi50KCdTaXgtbW9udGhseSBBcHJpbCcpLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFlFQVJMWSxcbiAgICAgIGdldFBlcmlvZHM6IGdldFllYXJseVBlcmlvZFR5cGUoZmlsdGVyRnV0dXJlUGVyaW9kcywgcGVyaW9kU2V0dGluZ3MpLFxuICAgICAgbmFtZTogaTE4bi50KCdZZWFybHknKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBGWU5PVixcbiAgICAgIGdldFBlcmlvZHM6IGdldEZpbmFuY2lhbE5vdmVtYmVyUGVyaW9kVHlwZShcbiAgICAgICAgZmlsdGVyRnV0dXJlUGVyaW9kcyxcbiAgICAgICAgcGVyaW9kU2V0dGluZ3NcbiAgICAgICksXG4gICAgICBuYW1lOiBpMThuLnQoJ0ZpbmFuY2lhbCB5ZWFyIChTdGFydCBOb3ZlbWJlciknKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBGWU9DVCxcbiAgICAgIGdldFBlcmlvZHM6IGdldEZpbmFuY2lhbE9jdG9iZXJQZXJpb2RUeXBlKFxuICAgICAgICBmaWx0ZXJGdXR1cmVQZXJpb2RzLFxuICAgICAgICBwZXJpb2RTZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIG5hbWU6IGkxOG4udCgnRmluYW5jaWFsIHllYXIgKFN0YXJ0IE9jdG9iZXIpJyksXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogRllKVUwsXG4gICAgICBnZXRQZXJpb2RzOiBnZXRGaW5hbmNpYWxKdWx5UGVyaW9kVHlwZShcbiAgICAgICAgZmlsdGVyRnV0dXJlUGVyaW9kcyxcbiAgICAgICAgcGVyaW9kU2V0dGluZ3NcbiAgICAgICksXG4gICAgICBuYW1lOiBpMThuLnQoJ0ZpbmFuY2lhbCB5ZWFyIChTdGFydCBKdWx5KScpLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IEZZQVBSLFxuICAgICAgZ2V0UGVyaW9kczogZ2V0RmluYW5jaWFsQXByaWxQZXJpb2RUeXBlKFxuICAgICAgICBmaWx0ZXJGdXR1cmVQZXJpb2RzLFxuICAgICAgICBwZXJpb2RTZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIG5hbWU6IGkxOG4udCgnRmluYW5jaWFsIHllYXIgKFN0YXJ0IEFwcmlsKScpLFxuICAgIH0sXG4gIF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rml4ZWRQZXJpb2RzT3B0aW9uc0J5SWQgPSAoXG4gIGlkOiBzdHJpbmcsXG4gIHBlcmlvZFNldHRpbmdzPzogYW55XG4pID0+IHtcbiAgcmV0dXJuIGdldE9wdGlvbnMocGVyaW9kU2V0dGluZ3MpLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBpZCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rml4ZWRQZXJpb2RzT3B0aW9ucyA9ICgpID0+IGdldE9wdGlvbnMoKTtcblxuZXhwb3J0IGNvbnN0IGdldFllYXJPZmZzZXRGcm9tTm93ID0gKHllYXJTdHI6IGFueSkgPT5cbiAgcGFyc2VJbnQoeWVhclN0cikgLSBuZXcgRGF0ZShEYXRlLm5vdygpKS5nZXRGdWxsWWVhcigpO1xuXG5leHBvcnQgY29uc3QgcGFyc2VQZXJpb2RDb2RlID0gKGNvZGU6IGFueSwgYWxsb3dlZFR5cGVzOiBhbnkpID0+IHtcbiAgY29uc3QgcGVyaW9kVHlwZXMgPSBPYmplY3Qua2V5cyhQRVJJT0RfVFlQRV9SRUdFWCk7XG4gIGxldCBpID0gMDtcbiAgbGV0IHR5cGUgPSAnJztcbiAgbGV0IG1hdGNoID0gdW5kZWZpbmVkO1xuXG4gIHdoaWxlIChpIDwgcGVyaW9kVHlwZXMubGVuZ3RoICYmICFtYXRjaCkge1xuICAgIHR5cGUgPSBwZXJpb2RUeXBlc1tpXTtcbiAgICBtYXRjaCA9IGNvZGUubWF0Y2goKFBFUklPRF9UWVBFX1JFR0VYIGFzIGFueSlbdHlwZV0pO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChcbiAgICAhbWF0Y2ggfHxcbiAgICAoQXJyYXkuaXNBcnJheShhbGxvd2VkVHlwZXMpICYmICFhbGxvd2VkVHlwZXMuc29tZSgodCkgPT4gdCA9PT0gdHlwZSkpXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwZXJpb2QgPSBnZXRGaXhlZFBlcmlvZHNPcHRpb25zQnlJZCh0eXBlKTtcbiAgY29uc3Qgb2Zmc2V0ID0gZ2V0WWVhck9mZnNldEZyb21Ob3cobWF0Y2hbMV0pO1xuICBjb25zdCBvcHRpb25zID0gcGVyaW9kPy5nZXRQZXJpb2RzKHsgb2Zmc2V0IH0pO1xuXG4gIHJldHVybiBwZXJpb2RcbiAgICA/IHtcbiAgICAgICAgaWQ6IHBlcmlvZC5pZCxcbiAgICAgICAgbmFtZTogcGVyaW9kLm5hbWUsXG4gICAgICAgIHllYXI6IG1hdGNoWzFdLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfVxuICAgIDogbnVsbDtcbn07XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export const filterPeriodTypesById = (allPeriodTypes = [], excludedPeriodTypes = []) => allPeriodTypes.filter((period) => !excludedPeriodTypes.includes(period['id']));
2
+ export * from './relativePeriods';
3
+ export * from './fixedPeriods';
4
+ export * from './periodTypes';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9uZy1kaGlzMi11aS9zcmMvbGliL21vZHVsZXMvcGVyaW9kLXNlbGVjdG9yL2NvbXBvbmVudHMvdXRpbHMvaW5kZXgudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQ25DLGNBQWMsR0FBRyxFQUFFLEVBQ25CLG1CQUFtQixHQUFHLEVBQUUsRUFDeEIsRUFBRSxDQUNGLGNBQWMsQ0FBQyxNQUFNLENBQ25CLENBQUMsTUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBRSxNQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQzVFLENBQUM7QUFFSixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZmlsdGVyUGVyaW9kVHlwZXNCeUlkID0gKFxuICBhbGxQZXJpb2RUeXBlcyA9IFtdLFxuICBleGNsdWRlZFBlcmlvZFR5cGVzID0gW11cbikgPT5cbiAgYWxsUGVyaW9kVHlwZXMuZmlsdGVyKFxuICAgIChwZXJpb2Q6IHVua25vd24pID0+ICFleGNsdWRlZFBlcmlvZFR5cGVzLmluY2x1ZGVzKChwZXJpb2QgYXMgbmV2ZXIpWydpZCddKVxuICApO1xuXG5leHBvcnQgKiBmcm9tICcuL3JlbGF0aXZlUGVyaW9kcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpeGVkUGVyaW9kcyc7XG5leHBvcnQgKiBmcm9tICcuL3BlcmlvZFR5cGVzJztcbiJdfQ==
@@ -0,0 +1,23 @@
1
+ // Copyright 2023 UDSM DHIS2 Lab. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+ export const DAILY = 'DAILY';
5
+ export const WEEKLY = 'WEEKLY';
6
+ export const WEEKLYWED = 'WEEKLYWED';
7
+ export const WEEKLYTHU = 'WEEKLYTHU';
8
+ export const WEEKLYSAT = 'WEEKLYSAT';
9
+ export const WEEKLYSUN = 'WEEKLYSUN';
10
+ export const WEEKS_THIS_YEAR = 'WEEKS_THIS_YEAR';
11
+ export const BIWEEKLY = 'BIWEEKLY';
12
+ export const MONTHLY = 'MONTHLY';
13
+ export const BIMONTHLY = 'BIMONTHLY';
14
+ export const QUARTERLY = 'QUARTERLY';
15
+ export const SIXMONTHLY = 'SIXMONTHLY';
16
+ export const SIXMONTHLYAPR = 'SIXMONTHLYAPR';
17
+ export const YEARLY = 'YEARLY';
18
+ export const FINANCIAL = 'FINANCIAL';
19
+ export const FYNOV = 'FYNOV';
20
+ export const FYOCT = 'FYOCT';
21
+ export const FYJUL = 'FYJUL';
22
+ export const FYAPR = 'FYAPR';
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyaW9kVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9uZy1kaGlzMi11aS9zcmMvbGliL21vZHVsZXMvcGVyaW9kLXNlbGVjdG9yL2NvbXBvbmVudHMvdXRpbHMvcGVyaW9kVHlwZXMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxxREFBcUQ7QUFDckQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDN0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDakMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUM3QixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDN0IsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDIzIFVEU00gREhJUzIgTGFiLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGVcbi8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS5cbmV4cG9ydCBjb25zdCBEQUlMWSA9ICdEQUlMWSc7XG5leHBvcnQgY29uc3QgV0VFS0xZID0gJ1dFRUtMWSc7XG5leHBvcnQgY29uc3QgV0VFS0xZV0VEID0gJ1dFRUtMWVdFRCc7XG5leHBvcnQgY29uc3QgV0VFS0xZVEhVID0gJ1dFRUtMWVRIVSc7XG5leHBvcnQgY29uc3QgV0VFS0xZU0FUID0gJ1dFRUtMWVNBVCc7XG5leHBvcnQgY29uc3QgV0VFS0xZU1VOID0gJ1dFRUtMWVNVTic7XG5leHBvcnQgY29uc3QgV0VFS1NfVEhJU19ZRUFSID0gJ1dFRUtTX1RISVNfWUVBUic7XG5leHBvcnQgY29uc3QgQklXRUVLTFkgPSAnQklXRUVLTFknO1xuZXhwb3J0IGNvbnN0IE1PTlRITFkgPSAnTU9OVEhMWSc7XG5leHBvcnQgY29uc3QgQklNT05USExZID0gJ0JJTU9OVEhMWSc7XG5leHBvcnQgY29uc3QgUVVBUlRFUkxZID0gJ1FVQVJURVJMWSc7XG5leHBvcnQgY29uc3QgU0lYTU9OVEhMWSA9ICdTSVhNT05USExZJztcbmV4cG9ydCBjb25zdCBTSVhNT05USExZQVBSID0gJ1NJWE1PTlRITFlBUFInO1xuZXhwb3J0IGNvbnN0IFlFQVJMWSA9ICdZRUFSTFknO1xuZXhwb3J0IGNvbnN0IEZJTkFOQ0lBTCA9ICdGSU5BTkNJQUwnO1xuZXhwb3J0IGNvbnN0IEZZTk9WID0gJ0ZZTk9WJztcbmV4cG9ydCBjb25zdCBGWU9DVCA9ICdGWU9DVCc7XG5leHBvcnQgY29uc3QgRllKVUwgPSAnRllKVUwnO1xuZXhwb3J0IGNvbnN0IEZZQVBSID0gJ0ZZQVBSJztcbiJdfQ==
@@ -0,0 +1,139 @@
1
+ import i18n from '@dhis2/d2-i18n';
2
+ import { DAILY, WEEKLY, BIWEEKLY, WEEKS_THIS_YEAR, MONTHLY, BIMONTHLY, QUARTERLY, SIXMONTHLY, FINANCIAL, YEARLY, } from './periodTypes';
3
+ const getDaysPeriodType = () => [
4
+ { id: 'TODAY', name: i18n.t('Today') },
5
+ { id: 'YESTERDAY', name: i18n.t('Yesterday') },
6
+ { id: 'LAST_3_DAYS', name: i18n.t('Last 3 days') },
7
+ { id: 'LAST_7_DAYS', name: i18n.t('Last 7 days') },
8
+ { id: 'LAST_14_DAYS', name: i18n.t('Last 14 days') },
9
+ { id: 'LAST_30_DAYS', name: i18n.t('Last 30 days') },
10
+ { id: 'LAST_60_DAYS', name: i18n.t('Last 60 days') },
11
+ { id: 'LAST_90_DAYS', name: i18n.t('Last 90 days') },
12
+ { id: 'LAST_180_DAYS', name: i18n.t('Last 180 days') },
13
+ ];
14
+ const getWeeksPeriodType = () => [
15
+ { id: 'THIS_WEEK', name: i18n.t('This week') },
16
+ { id: 'LAST_WEEK', name: i18n.t('Last week') },
17
+ { id: 'LAST_4_WEEKS', name: i18n.t('Last 4 weeks') },
18
+ { id: 'LAST_12_WEEKS', name: i18n.t('Last 12 weeks') },
19
+ { id: 'LAST_52_WEEKS', name: i18n.t('Last 52 weeks') },
20
+ { id: WEEKS_THIS_YEAR, name: i18n.t('Weeks this year') },
21
+ ];
22
+ const getBiWeeksPeriodType = () => [
23
+ { id: 'THIS_BIWEEK', name: i18n.t('This bi-week') },
24
+ { id: 'LAST_BIWEEK', name: i18n.t('Last bi-week') },
25
+ { id: 'LAST_4_BIWEEKS', name: i18n.t('Last 4 bi-weeks') },
26
+ ];
27
+ const getMonthsPeriodType = () => [
28
+ { id: 'THIS_MONTH', name: i18n.t('This month') },
29
+ { id: 'LAST_MONTH', name: i18n.t('Last month') },
30
+ { id: 'LAST_3_MONTHS', name: i18n.t('Last 3 months') },
31
+ { id: 'LAST_6_MONTHS', name: i18n.t('Last 6 months') },
32
+ { id: 'LAST_12_MONTHS', name: i18n.t('Last 12 months') },
33
+ {
34
+ id: 'MONTHS_THIS_YEAR',
35
+ name: i18n.t('Months this year'),
36
+ },
37
+ ];
38
+ const getBiMonthsPeriodType = () => [
39
+ { id: 'THIS_BIMONTH', name: i18n.t('This bi-month') },
40
+ { id: 'LAST_BIMONTH', name: i18n.t('Last bi-month') },
41
+ {
42
+ id: 'LAST_6_BIMONTHS',
43
+ name: i18n.t('Last 6 bi-months'),
44
+ },
45
+ {
46
+ id: 'BIMONTHS_THIS_YEAR',
47
+ name: i18n.t('Bi-months this year'),
48
+ },
49
+ ];
50
+ const getQuartersPeriodType = () => [
51
+ { id: 'THIS_QUARTER', name: i18n.t('This quarter') },
52
+ { id: 'LAST_QUARTER', name: i18n.t('Last quarter') },
53
+ { id: 'LAST_4_QUARTERS', name: i18n.t('Last 4 quarters') },
54
+ {
55
+ id: 'QUARTERS_THIS_YEAR',
56
+ name: i18n.t('Quarters this year'),
57
+ },
58
+ ];
59
+ const getSixMonthsPeriodType = () => [
60
+ { id: 'THIS_SIX_MONTH', name: i18n.t('This six-month') },
61
+ { id: 'LAST_SIX_MONTH', name: i18n.t('Last six-month') },
62
+ {
63
+ id: 'LAST_2_SIXMONTHS',
64
+ name: i18n.t('Last 2 six-month'),
65
+ },
66
+ ];
67
+ const getFinancialYearsPeriodType = () => [
68
+ {
69
+ id: 'THIS_FINANCIAL_YEAR',
70
+ name: i18n.t('This financial year'),
71
+ },
72
+ {
73
+ id: 'LAST_FINANCIAL_YEAR',
74
+ name: i18n.t('Last financial year'),
75
+ },
76
+ {
77
+ id: 'LAST_5_FINANCIAL_YEARS',
78
+ name: i18n.t('Last 5 financial years'),
79
+ },
80
+ ];
81
+ const getYearsPeriodType = () => [
82
+ { id: 'THIS_YEAR', name: i18n.t('This year') },
83
+ { id: 'LAST_YEAR', name: i18n.t('Last year') },
84
+ { id: 'LAST_5_YEARS', name: i18n.t('Last 5 years') },
85
+ { id: 'LAST_10_YEARS', name: i18n.t('Last 10 years') },
86
+ ];
87
+ const getOptions = () => [
88
+ {
89
+ id: DAILY,
90
+ getPeriods: () => getDaysPeriodType(),
91
+ name: i18n.t('Days'),
92
+ },
93
+ {
94
+ id: WEEKLY,
95
+ getPeriods: () => getWeeksPeriodType(),
96
+ name: i18n.t('Weeks'),
97
+ },
98
+ {
99
+ id: BIWEEKLY,
100
+ getPeriods: () => getBiWeeksPeriodType(),
101
+ name: i18n.t('Bi-weeks'),
102
+ },
103
+ {
104
+ id: MONTHLY,
105
+ getPeriods: () => getMonthsPeriodType(),
106
+ name: i18n.t('Months'),
107
+ },
108
+ {
109
+ id: BIMONTHLY,
110
+ getPeriods: () => getBiMonthsPeriodType(),
111
+ name: i18n.t('Bi-months'),
112
+ },
113
+ {
114
+ id: QUARTERLY,
115
+ getPeriods: () => getQuartersPeriodType(),
116
+ name: i18n.t('Quarters'),
117
+ },
118
+ {
119
+ id: SIXMONTHLY,
120
+ getPeriods: () => getSixMonthsPeriodType(),
121
+ name: i18n.t('Six-months'),
122
+ },
123
+ {
124
+ id: FINANCIAL,
125
+ getPeriods: () => getFinancialYearsPeriodType(),
126
+ name: i18n.t('Financial Years'),
127
+ },
128
+ {
129
+ id: YEARLY,
130
+ getPeriods: () => getYearsPeriodType(),
131
+ name: i18n.t('Years'),
132
+ },
133
+ ];
134
+ export const getRelativePeriodsOptionsById = (id) => getOptions().find((option) => option.id === id);
135
+ export const getRelativePeriodsOptions = () => getOptions();
136
+ export const getRelativePeriodIds = () => Object.values(getOptions())
137
+ .map((option) => option.getPeriods().map((period) => period.id))
138
+ .flat();
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpdmVQZXJpb2RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbmctZGhpczItdWkvc3JjL2xpYi9tb2R1bGVzL3BlcmlvZC1zZWxlY3Rvci9jb21wb25lbnRzL3V0aWxzL3JlbGF0aXZlUGVyaW9kcy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEMsT0FBTyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsRUFDZixPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQzlCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtJQUN0QyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUU7SUFDOUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0lBQ2xELEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRTtJQUNsRCxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUU7SUFDcEQsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0lBQ3BELEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFB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QixHQUFHLEdBQUcsRUFBRSxDQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0tBQ3hCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQy9ELElBQUksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGkxOG4gZnJvbSAnQGRoaXMyL2QyLWkxOG4nO1xuaW1wb3J0IHtcbiAgREFJTFksXG4gIFdFRUtMWSxcbiAgQklXRUVLTFksXG4gIFdFRUtTX1RISVNfWUVBUixcbiAgTU9OVEhMWSxcbiAgQklNT05USExZLFxuICBRVUFSVEVSTFksXG4gIFNJWE1PTlRITFksXG4gIEZJTkFOQ0lBTCxcbiAgWUVBUkxZLFxufSBmcm9tICcuL3BlcmlvZFR5cGVzJztcblxuY29uc3QgZ2V0RGF5c1BlcmlvZFR5cGUgPSAoKSA9PiBbXG4gIHsgaWQ6ICdUT0RBWScsIG5hbWU6IGkxOG4udCgnVG9kYXknKSB9LFxuICB7IGlkOiAnWUVTVEVSREFZJywgbmFtZTogaTE4bi50KCdZZXN0ZXJkYXknKSB9LFxuICB7IGlkOiAnTEFTVF8zX0RBWVMnLCBuYW1lOiBpMThuLnQoJ0xhc3QgMyBkYXlzJykgfSxcbiAgeyBpZDogJ0xBU1RfN19EQVlTJywgbmFtZTogaTE4bi50KCdMYXN0IDcgZGF5cycpIH0sXG4gIHsgaWQ6ICdMQVNUXzE0X0RBWVMnLCBuYW1lOiBpMThuLnQoJ0xhc3QgMTQgZGF5cycpIH0sXG4gIHsgaWQ6ICdMQVNUXzMwX0RBWVMnLCBuYW1lOiBpMThuLnQoJ0xhc3QgMzAgZGF5cycpIH0sXG4gIHsgaWQ6ICdMQVNUXzYwX0RBWVMnLCBuYW1lOiBpMThuLnQoJ0xhc3QgNjAgZGF5cycpIH0sXG4gIHsgaWQ6ICdMQVNUXzkwX0RBWVMnLCBuYW1lOiBpMThuLnQoJ0xhc3QgOTAgZGF5cycpIH0sXG4gIHsgaWQ6ICdMQVNUXzE4MF9EQVlTJywgbmFtZTogaTE4bi50KCdMYXN0IDE4MCBkYXlzJykgfSxcbl07XG5cbmNvbnN0IGdldFdlZWtzUGVyaW9kVHlwZSA9ICgpID0+IFtcbiAgeyBpZDogJ1RISVNfV0VFSycsIG5hbWU6IGkxOG4udCgnVGhpcyB3ZWVrJykgfSxcbiAgeyBpZDogJ0xBU1RfV0VFSycsIG5hbWU6IGkxOG4udCgnTGFzdCB3ZWVrJykgfSxcbiAgeyBpZDogJ0xBU1RfNF9XRUVLUycsIG5hbWU6IGkxOG4udCgnTGFzdCA0IHdlZWtzJykgfSxcbiAgeyBpZDogJ0xBU1RfMTJfV0VFS1MnLCBuYW1lOiBpMThuLnQoJ0xhc3QgMTIgd2Vla3MnKSB9LFxuICB7IGlkOiAnTEFTVF81Ml9XRUVLUycsIG5hbWU6IGkxOG4udCgnTGFzdCA1MiB3ZWVrcycpIH0sXG4gIHsgaWQ6IFdFRUtTX1RISVNfWUVBUiwgbmFtZTogaTE4bi50KCdXZWVrcyB0aGlzIHllYXInKSB9LFxuXTtcblxuY29uc3QgZ2V0QmlXZWVrc1BlcmlvZFR5cGUgPSAoKSA9PiBbXG4gIHsgaWQ6ICdUSElTX0JJV0VFSycsIG5hbWU6IGkxOG4udCgnVGhpcyBiaS13ZWVrJykgfSxcbiAgeyBpZDogJ0xBU1RfQklXRUVLJywgbmFtZTogaTE4bi50KCdMYXN0IGJpLXdlZWsnKSB9LFxuICB7IGlkOiAnTEFTVF80X0JJV0VFS1MnLCBuYW1lOiBpMThuLnQoJ0xhc3QgNCBiaS13ZWVrcycpIH0sXG5dO1xuXG5jb25zdCBnZXRNb250aHNQZXJpb2RUeXBlID0gKCkgPT4gW1xuICB7IGlkOiAnVEhJU19NT05USCcsIG5hbWU6IGkxOG4udCgnVGhpcyBtb250aCcpIH0sXG4gIHsgaWQ6ICdMQVNUX01PTlRIJywgbmFtZTogaTE4bi50KCdMYXN0IG1vbnRoJykgfSxcbiAgeyBpZDogJ0xBU1RfM19NT05USFMnLCBuYW1lOiBpMThuLnQoJ0xhc3QgMyBtb250aHMnKSB9LFxuICB7IGlkOiAnTEFTVF82X01PTlRIUycsIG5hbWU6IGkxOG4udCgnTGFzdCA2IG1vbnRocycpIH0sXG4gIHsgaWQ6ICdMQVNUXzEyX01PTlRIUycsIG5hbWU6IGkxOG4udCgnTGFzdCAxMiBtb250aHMnKSB9LFxuICB7XG4gICAgaWQ6ICdNT05USFNfVEhJU19ZRUFSJyxcbiAgICBuYW1lOiBpMThuLnQoJ01vbnRocyB0aGlzIHllYXInKSxcbiAgfSxcbl07XG5cbmNvbnN0IGdldEJpTW9udGhzUGVyaW9kVHlwZSA9ICgpID0+IFtcbiAgeyBpZDogJ1RISVNfQklNT05USCcsIG5hbWU6IGkxOG4udCgnVGhpcyBiaS1tb250aCcpIH0sXG4gIHsgaWQ6ICdMQVNUX0JJTU9OVEgnLCBuYW1lOiBpMThuLnQoJ0xhc3QgYmktbW9udGgnKSB9LFxuICB7XG4gICAgaWQ6ICdMQVNUXzZfQklNT05USFMnLFxuICAgIG5hbWU6IGkxOG4udCgnTGFzdCA2IGJpLW1vbnRocycpLFxuICB9LFxuICB7XG4gICAgaWQ6ICdCSU1PTlRIU19USElTX1lFQVInLFxuICAgIG5hbWU6IGkxOG4udCgnQmktbW9udGhzIHRoaXMgeWVhcicpLFxuICB9LFxuXTtcblxuY29uc3QgZ2V0UXVhcnRlcnNQZXJpb2RUeXBlID0gKCkgPT4gW1xuICB7IGlkOiAnVEhJU19RVUFSVEVSJywgbmFtZTogaTE4bi50KCdUaGlzIHF1YXJ0ZXInKSB9LFxuICB7IGlkOiAnTEFTVF9RVUFSVEVSJywgbmFtZTogaTE4bi50KCdMYXN0IHF1YXJ0ZXInKSB9LFxuICB7IGlkOiAnTEFTVF80X1FVQVJURVJTJywgbmFtZTogaTE4bi50KCdMYXN0IDQgcXVhcnRlcnMnKSB9LFxuICB7XG4gICAgaWQ6ICdRVUFSVEVSU19USElTX1lFQVInLFxuICAgIG5hbWU6IGkxOG4udCgnUXVhcnRlcnMgdGhpcyB5ZWFyJyksXG4gIH0sXG5dO1xuXG5jb25zdCBnZXRTaXhNb250aHNQZXJpb2RUeXBlID0gKCkgPT4gW1xuICB7IGlkOiAnVEhJU19TSVhfTU9OVEgnLCBuYW1lOiBpMThuLnQoJ1RoaXMgc2l4LW1vbnRoJykgfSxcbiAgeyBpZDogJ0xBU1RfU0lYX01PTlRIJywgbmFtZTogaTE4bi50KCdMYXN0IHNpeC1tb250aCcpIH0sXG4gIHtcbiAgICBpZDogJ0xBU1RfMl9TSVhNT05USFMnLFxuICAgIG5hbWU6IGkxOG4udCgnTGFzdCAyIHNpeC1tb250aCcpLFxuICB9LFxuXTtcblxuY29uc3QgZ2V0RmluYW5jaWFsWWVhcnNQZXJpb2RUeXBlID0gKCkgPT4gW1xuICB7XG4gICAgaWQ6ICdUSElTX0ZJTkFOQ0lBTF9ZRUFSJyxcbiAgICBuYW1lOiBpMThuLnQoJ1RoaXMgZmluYW5jaWFsIHllYXInKSxcbiAgfSxcbiAge1xuICAgIGlkOiAnTEFTVF9GSU5BTkNJQUxfWUVBUicsXG4gICAgbmFtZTogaTE4bi50KCdMYXN0IGZpbmFuY2lhbCB5ZWFyJyksXG4gIH0sXG4gIHtcbiAgICBpZDogJ0xBU1RfNV9GSU5BTkNJQUxfWUVBUlMnLFxuICAgIG5hbWU6IGkxOG4udCgnTGFzdCA1IGZpbmFuY2lhbCB5ZWFycycpLFxuICB9LFxuXTtcblxuY29uc3QgZ2V0WWVhcnNQZXJpb2RUeXBlID0gKCkgPT4gW1xuICB7IGlkOiAnVEhJU19ZRUFSJywgbmFtZTogaTE4bi50KCdUaGlzIHllYXInKSB9LFxuICB7IGlkOiAnTEFTVF9ZRUFSJywgbmFtZTogaTE4bi50KCdMYXN0IHllYXInKSB9LFxuICB7IGlkOiAnTEFTVF81X1lFQVJTJywgbmFtZTogaTE4bi50KCdMYXN0IDUgeWVhcnMnKSB9LFxuICB7IGlkOiAnTEFTVF8xMF9ZRUFSUycsIG5hbWU6IGkxOG4udCgnTGFzdCAxMCB5ZWFycycpIH0sXG5dO1xuXG5jb25zdCBnZXRPcHRpb25zID0gKCkgPT4gW1xuICB7XG4gICAgaWQ6IERBSUxZLFxuICAgIGdldFBlcmlvZHM6ICgpID0+IGdldERheXNQZXJpb2RUeXBlKCksXG4gICAgbmFtZTogaTE4bi50KCdEYXlzJyksXG4gIH0sXG4gIHtcbiAgICBpZDogV0VFS0xZLFxuICAgIGdldFBlcmlvZHM6ICgpID0+IGdldFdlZWtzUGVyaW9kVHlwZSgpLFxuICAgIG5hbWU6IGkxOG4udCgnV2Vla3MnKSxcbiAgfSxcbiAge1xuICAgIGlkOiBCSVdFRUtMWSxcbiAgICBnZXRQZXJpb2RzOiAoKSA9PiBnZXRCaVdlZWtzUGVyaW9kVHlwZSgpLFxuICAgIG5hbWU6IGkxOG4udCgnQmktd2Vla3MnKSxcbiAgfSxcbiAge1xuICAgIGlkOiBNT05USExZLFxuICAgIGdldFBlcmlvZHM6ICgpID0+IGdldE1vbnRoc1BlcmlvZFR5cGUoKSxcbiAgICBuYW1lOiBpMThuLnQoJ01vbnRocycpLFxuICB9LFxuICB7XG4gICAgaWQ6IEJJTU9OVEhMWSxcbiAgICBnZXRQZXJpb2RzOiAoKSA9PiBnZXRCaU1vbnRoc1BlcmlvZFR5cGUoKSxcbiAgICBuYW1lOiBpMThuLnQoJ0JpLW1vbnRocycpLFxuICB9LFxuICB7XG4gICAgaWQ6IFFVQVJURVJMWSxcbiAgICBnZXRQZXJpb2RzOiAoKSA9PiBnZXRRdWFydGVyc1BlcmlvZFR5cGUoKSxcbiAgICBuYW1lOiBpMThuLnQoJ1F1YXJ0ZXJzJyksXG4gIH0sXG4gIHtcbiAgICBpZDogU0lYTU9OVEhMWSxcbiAgICBnZXRQZXJpb2RzOiAoKSA9PiBnZXRTaXhNb250aHNQZXJpb2RUeXBlKCksXG4gICAgbmFtZTogaTE4bi50KCdTaXgtbW9udGhzJyksXG4gIH0sXG4gIHtcbiAgICBpZDogRklOQU5DSUFMLFxuICAgIGdldFBlcmlvZHM6ICgpID0+IGdldEZpbmFuY2lhbFllYXJzUGVyaW9kVHlwZSgpLFxuICAgIG5hbWU6IGkxOG4udCgnRmluYW5jaWFsIFllYXJzJyksXG4gIH0sXG4gIHtcbiAgICBpZDogWUVBUkxZLFxuICAgIGdldFBlcmlvZHM6ICgpID0+IGdldFllYXJzUGVyaW9kVHlwZSgpLFxuICAgIG5hbWU6IGkxOG4udCgnWWVhcnMnKSxcbiAgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGl2ZVBlcmlvZHNPcHRpb25zQnlJZCA9IChpZDogc3RyaW5nKSA9PlxuICBnZXRPcHRpb25zKCkuZmluZCgob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGlkKTtcblxuZXhwb3J0IGNvbnN0IGdldFJlbGF0aXZlUGVyaW9kc09wdGlvbnMgPSAoKSA9PiBnZXRPcHRpb25zKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGl2ZVBlcmlvZElkcyA9ICgpID0+XG4gIE9iamVjdC52YWx1ZXMoZ2V0T3B0aW9ucygpKVxuICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmdldFBlcmlvZHMoKS5tYXAoKHBlcmlvZCkgPT4gcGVyaW9kLmlkKSlcbiAgICAuZmxhdCgpO1xuIl19
@@ -0,0 +1,6 @@
1
+ // Copyright 2023 UDSM DHIS2 Lab. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+ export * from './period-selector.module';
5
+ export * from './period-selector.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9uZy1kaGlzMi11aS9zcmMvbGliL21vZHVsZXMvcGVyaW9kLXNlbGVjdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxxREFBcUQ7QUFDckQsaURBQWlEO0FBQ2pELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDIzIFVEU00gREhJUzIgTGFiLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGVcbi8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS5cbmV4cG9ydCAqIGZyb20gJy4vcGVyaW9kLXNlbGVjdG9yLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3BlcmlvZC1zZWxlY3Rvci5jb21wb25lbnQnO1xuIl19
@@ -0,0 +1,66 @@
1
+ import { Component, Input, ElementRef, Output, EventEmitter, } from '@angular/core';
2
+ import { DataProvider } from '@dhis2/app-runtime';
3
+ import { NgxDhis2HttpClientService } from '@iapps/ngx-dhis2-http-client';
4
+ import React from 'react';
5
+ import * as ReactDOM from 'react-dom/client';
6
+ import { firstValueFrom } from 'rxjs';
7
+ import { ReactWrapperComponent } from '../../shared/components';
8
+ import { PeriodDimension } from './components/PeriodDimension';
9
+ import { BIMONTHLY, BIWEEKLY, DAILY, MONTHLY, WEEKLY, WEEKLYSAT, WEEKLYSUN, WEEKLYTHU, WEEKLYWED, } from './components/utils';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@iapps/ngx-dhis2-http-client";
12
+ export class PeriodSelectorComponent extends ReactWrapperComponent {
13
+ constructor(elementRef, httpClient) {
14
+ super(elementRef);
15
+ this.httpClient = httpClient;
16
+ this.selectedPeriods = [];
17
+ this.selectPeriods = new EventEmitter();
18
+ this.props = {
19
+ onSelect: (e) => {
20
+ this.onSelectItems(e);
21
+ },
22
+ };
23
+ this.getExcludedPeriodTypes = (systemSettings = {}) => {
24
+ const types = [];
25
+ if (systemSettings['hideDailyPeriods']) {
26
+ types.push(DAILY);
27
+ }
28
+ if (systemSettings['hideWeeklyPeriods']) {
29
+ types.push(WEEKLY, WEEKLYWED, WEEKLYTHU, WEEKLYSAT, WEEKLYSUN);
30
+ }
31
+ if (systemSettings['hideBiWeeklyPeriods']) {
32
+ types.push(BIWEEKLY);
33
+ }
34
+ if (systemSettings['hideMonthlyPeriods']) {
35
+ types.push(MONTHLY);
36
+ }
37
+ if (systemSettings['hideBiMonthlyPeriods']) {
38
+ types.push(BIMONTHLY);
39
+ }
40
+ return types;
41
+ };
42
+ }
43
+ async ngAfterViewInit() {
44
+ if (!this.elementRef)
45
+ throw new Error('No element ref');
46
+ this.reactDomRoot = ReactDOM.createRoot(this.elementRef.nativeElement);
47
+ const systemInfo = await firstValueFrom(this.httpClient.systemInfo());
48
+ const excludedPeriodTypes = this.getExcludedPeriodTypes(systemInfo);
49
+ this.component = () => (React.createElement(DataProvider, null, React.createElement(PeriodDimension, { selectedPeriods: this.selectedPeriods, onSelect: (selectionEvent) => this.onSelectItems(selectionEvent), excludedPeriodTypes: excludedPeriodTypes, systemInfo: systemInfo })));
50
+ this.render();
51
+ }
52
+ onSelectItems(selectionEvent) {
53
+ this.selectPeriods.emit(selectionEvent.items);
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PeriodSelectorComponent, deps: [{ token: i0.ElementRef }, { token: i1.NgxDhis2HttpClientService }], target: i0.ɵɵFactoryTarget.Component }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PeriodSelectorComponent, selector: "ng-dhis2-ui-period-selector", inputs: { selectedPeriods: "selectedPeriods" }, outputs: { selectPeriods: "selectPeriods" }, usesInheritance: true, ngImport: i0, template: `<ng-container></ng-container>`, isInline: true, styles: ["::ng-deep .content-container{z-index:0!important}\n"] }); }
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PeriodSelectorComponent, decorators: [{
59
+ type: Component,
60
+ args: [{ selector: 'ng-dhis2-ui-period-selector', template: `<ng-container></ng-container>`, styles: ["::ng-deep .content-container{z-index:0!important}\n"] }]
61
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.NgxDhis2HttpClientService }]; }, propDecorators: { selectedPeriods: [{
62
+ type: Input
63
+ }], selectPeriods: [{
64
+ type: Output
65
+ }] } });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyaW9kLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL25nLWRoaXMyLXVpL3NyYy9saWIvbW9kdWxlcy9wZXJpb2Qtc2VsZWN0b3IvcGVyaW9kLXNlbGVjdG9yLmNvbXBvbmVudC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssUUFBUSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLG9CQUFvQixDQUFDOzs7QUFrQjVCLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxxQkFBcUI7SUFXaEUsWUFDRSxVQUFtQyxFQUMzQixVQUFxQztRQUU3QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFGVixlQUFVLEdBQVYsVUFBVSxDQUEyQjtRQVp0QyxvQkFBZSxHQUFVLEVBQUUsQ0FBQztRQUUzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEMsVUFBSyxHQUE0QjtZQUN4QyxRQUFRLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixDQUFDO1NBQ0YsQ0FBQztRQW9DRiwyQkFBc0IsR0FBRyxDQUFDLGlCQUFzQixFQUFFLEVBQUUsRUFBRTtZQUNwRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxjQUFjLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQkFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNuQjtZQUNELElBQUksY0FBYyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7Z0JBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ2hFO1lBQ0QsSUFBSSxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFBRTtnQkFDekMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN0QjtZQUNELElBQUksY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7Z0JBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckI7WUFDRCxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO2dCQUMxQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7SUEvQ0YsQ0FBQztJQUVRLEtBQUssQ0FBQyxlQUFlO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RSxNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdEUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUNyQixvQkFBQyxZQUFZLFFBRVQsb0JBQUMsZUFBZSxJQUNkLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUNyQyxRQUFRLEVBQUUsQ0FBQyxjQUFvQyxFQUFFLEVBQUUsQ0FDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFFcEMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQ3hDLFVBQVUsRUFBRSxVQUFVLEdBQ3RCLENBRVMsQ0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsYUFBYSxDQUFDLGNBQW9DO1FBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDOytHQTNDVSx1QkFBdUI7bUdBQXZCLHVCQUF1Qix1TEFUeEIsK0JBQStCOzs0RkFTOUIsdUJBQXVCO2tCQVhuQyxTQUFTOytCQUNFLDZCQUE2QixZQUM3QiwrQkFBK0I7eUlBVWhDLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIEVsZW1lbnRSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFQcm92aWRlciB9IGZyb20gJ0BkaGlzMi9hcHAtcnVudGltZSc7XG5pbXBvcnQgeyBOZ3hEaGlzMkh0dHBDbGllbnRTZXJ2aWNlIH0gZnJvbSAnQGlhcHBzL25neC1kaGlzMi1odHRwLWNsaWVudCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVhY3RXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgUGVyaW9kRGltZW5zaW9uIH0gZnJvbSAnLi9jb21wb25lbnRzL1BlcmlvZERpbWVuc2lvbic7XG5pbXBvcnQge1xuICBCSU1PTlRITFksXG4gIEJJV0VFS0xZLFxuICBEQUlMWSxcbiAgTU9OVEhMWSxcbiAgV0VFS0xZLFxuICBXRUVLTFlTQVQsXG4gIFdFRUtMWVNVTixcbiAgV0VFS0xZVEhVLFxuICBXRUVLTFlXRUQsXG59IGZyb20gJy4vY29tcG9uZW50cy91dGlscyc7XG5cbnR5cGUgUGVyaW9kU2VsZWN0aW9uRXZlbnQgPSB7XG4gIGRpbWVuc2lvbklkOiBzdHJpbmc7XG4gIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctZGhpczItdWktcGVyaW9kLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGU6IGA8bmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPmAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDo6bmctZGVlcCAuY29udGVudC1jb250YWluZXIge1xuICAgICAgICB6LWluZGV4OiAwICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVyaW9kU2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBSZWFjdFdyYXBwZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBzZWxlY3RlZFBlcmlvZHM6IGFueVtdID0gW107XG5cbiAgQE91dHB1dCgpIHNlbGVjdFBlcmlvZHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgb3ZlcnJpZGUgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIG9uU2VsZWN0OiAoZTogYW55KSA9PiB7XG4gICAgICB0aGlzLm9uU2VsZWN0SXRlbXMoZSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IE5neERoaXMySHR0cENsaWVudFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZik7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYpIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCByZWYnKTtcbiAgICB0aGlzLnJlYWN0RG9tUm9vdCA9IFJlYWN0RE9NLmNyZWF0ZVJvb3QodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IHN5c3RlbUluZm8gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuc3lzdGVtSW5mbygpKTtcbiAgICBjb25zdCBleGNsdWRlZFBlcmlvZFR5cGVzID0gdGhpcy5nZXRFeGNsdWRlZFBlcmlvZFR5cGVzKHN5c3RlbUluZm8pO1xuXG4gICAgdGhpcy5jb21wb25lbnQgPSAoKSA9PiAoXG4gICAgICA8RGF0YVByb3ZpZGVyPlxuICAgICAgICB7XG4gICAgICAgICAgPFBlcmlvZERpbWVuc2lvblxuICAgICAgICAgICAgc2VsZWN0ZWRQZXJpb2RzPXt0aGlzLnNlbGVjdGVkUGVyaW9kc31cbiAgICAgICAgICAgIG9uU2VsZWN0PXsoc2VsZWN0aW9uRXZlbnQ6IFBlcmlvZFNlbGVjdGlvbkV2ZW50KSA9PlxuICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0SXRlbXMoc2VsZWN0aW9uRXZlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleGNsdWRlZFBlcmlvZFR5cGVzPXtleGNsdWRlZFBlcmlvZFR5cGVzfVxuICAgICAgICAgICAgc3lzdGVtSW5mbz17c3lzdGVtSW5mb31cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L0RhdGFQcm92aWRlcj5cbiAgICApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvblNlbGVjdEl0ZW1zKHNlbGVjdGlvbkV2ZW50OiBQZXJpb2RTZWxlY3Rpb25FdmVudCkge1xuICAgIHRoaXMuc2VsZWN0UGVyaW9kcy5lbWl0KHNlbGVjdGlvbkV2ZW50Lml0ZW1zKTtcbiAgfVxuXG4gIGdldEV4Y2x1ZGVkUGVyaW9kVHlwZXMgPSAoc3lzdGVtU2V0dGluZ3M6IGFueSA9IHt9KSA9PiB7XG4gICAgY29uc3QgdHlwZXMgPSBbXTtcbiAgICBpZiAoc3lzdGVtU2V0dGluZ3NbJ2hpZGVEYWlseVBlcmlvZHMnXSkge1xuICAgICAgdHlwZXMucHVzaChEQUlMWSk7XG4gICAgfVxuICAgIGlmIChzeXN0ZW1TZXR0aW5nc1snaGlkZVdlZWtseVBlcmlvZHMnXSkge1xuICAgICAgdHlwZXMucHVzaChXRUVLTFksIFdFRUtMWVdFRCwgV0VFS0xZVEhVLCBXRUVLTFlTQVQsIFdFRUtMWVNVTik7XG4gICAgfVxuICAgIGlmIChzeXN0ZW1TZXR0aW5nc1snaGlkZUJpV2Vla2x5UGVyaW9kcyddKSB7XG4gICAgICB0eXBlcy5wdXNoKEJJV0VFS0xZKTtcbiAgICB9XG4gICAgaWYgKHN5c3RlbVNldHRpbmdzWydoaWRlTW9udGhseVBlcmlvZHMnXSkge1xuICAgICAgdHlwZXMucHVzaChNT05USExZKTtcbiAgICB9XG4gICAgaWYgKHN5c3RlbVNldHRpbmdzWydoaWRlQmlNb250aGx5UGVyaW9kcyddKSB7XG4gICAgICB0eXBlcy5wdXNoKEJJTU9OVEhMWSk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbiAgfTtcbn1cbiJdfQ==