@iapps/ng-dhis2-ui 1.1.26 → 1.1.28
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/fesm2022/iapps-ng-dhis2-ui.mjs +24 -16
- package/fesm2022/iapps-ng-dhis2-ui.mjs.map +1 -1
- package/lib/modules/form/utils/field-type.util.d.ts +1 -1
- package/lib/modules/form/utils/field.util.d.ts +1 -1
- package/lib/modules/line-list/containers/line-list.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -2043,7 +2043,7 @@ const FixedPeriodFilter = ({ allowedPeriodTypes, excludedPeriodTypes, currentPer
|
|
|
2043
2043
|
React__default.createElement("div", { className: "leftSection" },
|
|
2044
2044
|
React__default.createElement(SingleSelectField, { label: i18n.t('Period type'), onChange: ({ selected }) => onSelectPeriodType(selected), dense: true, selected: currentPeriodType, disabled: onlyAllowedTypeIsSelected, className: "filterElement", dataTest: `${dataTest}-period-type` }, (allowedPeriodTypes
|
|
2045
2045
|
? getFixedPeriodsOptions().filter((option) => allowedPeriodTypes.some((type) => type === option.id))
|
|
2046
|
-
: filterPeriodTypesById(getFixedPeriodsOptions(), excludedPeriodTypes)).map((option) => (React__default.createElement(SingleSelectOption, { key:
|
|
2046
|
+
: filterPeriodTypesById(getFixedPeriodsOptions(), excludedPeriodTypes)).map((option) => (React__default.createElement(SingleSelectOption, { key: option.id, value: option.id, label: option.name, dataTest: `${dataTest}-period-type-option-${option.id}` }))))),
|
|
2047
2047
|
React__default.createElement("div", { className: "rightSection" },
|
|
2048
2048
|
React__default.createElement(InputField$1, { label: i18n.t('Year'), className: "filterElement", type: "number", placeholder: i18n.t('Select year'), value: currentYear, onChange: ({ value }) => onSelectYear(value), dense: true, dataTest: `${dataTest}-year` })),
|
|
2049
2049
|
React__default.createElement("style", { jsx: true }, `
|
|
@@ -2074,7 +2074,7 @@ FixedPeriodFilter.propTypes = {
|
|
|
2074
2074
|
};
|
|
2075
2075
|
|
|
2076
2076
|
const RelativePeriodFilter = ({ currentFilter, onSelectFilter, dataTest, excludedPeriodTypes, }) => (React__default.createElement("div", { className: "leftSection" },
|
|
2077
|
-
React__default.createElement(SingleSelectField, { label: i18n.t('Period type'), onChange: ({ selected }) => onSelectFilter(selected), dense: true, selected: currentFilter, className: "filterElement", dataTest: dataTest }, filterPeriodTypesById(getRelativePeriodsOptions(), excludedPeriodTypes).map((option) => (React__default.createElement(SingleSelectOption, { key:
|
|
2077
|
+
React__default.createElement(SingleSelectField, { label: i18n.t('Period type'), onChange: ({ selected }) => onSelectFilter(selected), dense: true, selected: currentFilter, className: "filterElement", dataTest: dataTest }, filterPeriodTypesById(getRelativePeriodsOptions(), excludedPeriodTypes).map((option) => (React__default.createElement(SingleSelectOption, { key: option.id, value: option.id, label: option.name, dataTest: `${dataTest}-option-${option.id}` })))),
|
|
2078
2078
|
React__default.createElement("style", { jsx: true }, `
|
|
2079
2079
|
.leftSection {
|
|
2080
2080
|
flex-grow: 1;
|
|
@@ -3141,11 +3141,9 @@ class LineListService {
|
|
|
3141
3141
|
const filterParams = buildFilters(filters);
|
|
3142
3142
|
const dateFilter = startDate && endDate ? `&programStartDate=${startDate}&programEndDate=${endDate}` : '';
|
|
3143
3143
|
const ouModeIdentifier = ouMode ? `&ouMode=${ouMode}` : ``;
|
|
3144
|
-
return this.httpClient.get(`trackedEntityInstances.json?program=${programId}&ou=${orgUnit}${ouModeIdentifier}&page=${page}&pageSize=${pageSize}&fields=trackedEntityInstance,attributes[*,displayInList],enrollments[*]&totalPages=true&${filterParams}${dateFilter}`).pipe(map$1((response) => {
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
tei.attributes = tei.attributes.filter((attr) => attr.displayInList);
|
|
3148
|
-
});
|
|
3144
|
+
return this.httpClient.get(`trackedEntityInstances.json?program=${programId}&ou=${orgUnit}${ouModeIdentifier}&page=${page}&pageSize=${pageSize}&fields=trackedEntityInstance,attributes[*,displayInList],enrollments[*]&totalPages=true&${filterParams}${dateFilter}&order=created:desc`).pipe(map$1((response) => {
|
|
3145
|
+
//TODO: use the api to to order by desc
|
|
3146
|
+
// response.trackedEntityInstances.reverse();
|
|
3149
3147
|
return response;
|
|
3150
3148
|
}));
|
|
3151
3149
|
}
|
|
@@ -3313,6 +3311,8 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3313
3311
|
this.actionSelected = new EventEmitter();
|
|
3314
3312
|
this.reactStateUpdaters = null;
|
|
3315
3313
|
this.approvalSelected = new EventEmitter();
|
|
3314
|
+
this.isButtonLoading = false;
|
|
3315
|
+
this.buttonLabel = '';
|
|
3316
3316
|
this.setReactStateUpdaters = (updaters) => {
|
|
3317
3317
|
this.reactStateUpdaters = updaters;
|
|
3318
3318
|
};
|
|
@@ -3334,6 +3334,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3334
3334
|
const [startDateState, setStartDateState] = useState(this.startDate);
|
|
3335
3335
|
const [endDateState, setEndDateState] = useState(this.endDate);
|
|
3336
3336
|
const [loading, setLoading] = useState(false);
|
|
3337
|
+
const [isButtonLoading, setIsButtonLoading] = useState(this.isButtonLoading);
|
|
3337
3338
|
// Store updaters in refs for Angular to access
|
|
3338
3339
|
const updateRefs = useRef({
|
|
3339
3340
|
setProgramIdState,
|
|
@@ -3342,6 +3343,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3342
3343
|
setAttributeFiltersState,
|
|
3343
3344
|
setStartDateState,
|
|
3344
3345
|
setEndDateState,
|
|
3346
|
+
setIsButtonLoading,
|
|
3345
3347
|
});
|
|
3346
3348
|
useEffect(() => {
|
|
3347
3349
|
this.setReactStateUpdaters?.(updateRefs.current);
|
|
@@ -3416,7 +3418,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3416
3418
|
};
|
|
3417
3419
|
const handleApprovalClick = () => {
|
|
3418
3420
|
this.lineListService
|
|
3419
|
-
.getLineListData(this.programId, this.orgUnit, this.programStageId, pager.page,
|
|
3421
|
+
.getLineListData(this.programId, this.orgUnit, this.programStageId, pager.page, 1000, this.attributeFilters, this.startDate, this.endDate, this.ouMode)
|
|
3420
3422
|
.subscribe((response) => {
|
|
3421
3423
|
if ('trackedEntityInstances' in response.data) {
|
|
3422
3424
|
const trackedEntityInstances = response.data.trackedEntityInstances;
|
|
@@ -3452,8 +3454,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3452
3454
|
gap: 8,
|
|
3453
3455
|
padding: 8,
|
|
3454
3456
|
marginBottom: 16,
|
|
3455
|
-
} },
|
|
3456
|
-
React__default.createElement(Button$1, { className: "bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600", onClick: handleApprovalClick, primary: true }, "Approval"))),
|
|
3457
|
+
} }, isButtonLoading ? (React__default.createElement(CircularLoader$1, { small: true })) : (React__default.createElement(Button$1, { className: "bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600", onClick: handleApprovalClick, primary: true }, this.buttonLabel)))),
|
|
3457
3458
|
loading ? (React__default.createElement("div", { style: {
|
|
3458
3459
|
display: 'flex',
|
|
3459
3460
|
alignItems: 'center',
|
|
@@ -3501,6 +3502,9 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3501
3502
|
if (changes['endDate']) {
|
|
3502
3503
|
this.reactStateUpdaters.setEndDateState(this.endDate);
|
|
3503
3504
|
}
|
|
3505
|
+
if (changes['isButtonLoading']) {
|
|
3506
|
+
this.reactStateUpdaters.setIsButtonLoading(this.isButtonLoading);
|
|
3507
|
+
}
|
|
3504
3508
|
}
|
|
3505
3509
|
}
|
|
3506
3510
|
async ngAfterViewInit() {
|
|
@@ -3511,7 +3515,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3511
3515
|
this.render();
|
|
3512
3516
|
}
|
|
3513
3517
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: LineListTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3514
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", type: LineListTableComponent, isStandalone: false, selector: "app-line-list", inputs: { programId: "programId", orgUnit: "orgUnit", programStageId: "programStageId", actionOptions: "actionOptions", attributeFilters: "attributeFilters", startDate: "startDate", endDate: "endDate", filters: "filters", ouMode: "ouMode", showApprovalButton: "showApprovalButton" }, outputs: { actionSelected: "actionSelected", approvalSelected: "approvalSelected" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["[data-test=dhis2-uiwidgets-pagination]{display:flex!important;flex-direction:row!important;justify-content:space-between!important;align-items:center!important}\n"] }); }
|
|
3518
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", type: LineListTableComponent, isStandalone: false, selector: "app-line-list", inputs: { programId: "programId", orgUnit: "orgUnit", programStageId: "programStageId", actionOptions: "actionOptions", attributeFilters: "attributeFilters", startDate: "startDate", endDate: "endDate", filters: "filters", ouMode: "ouMode", showApprovalButton: "showApprovalButton", isButtonLoading: "isButtonLoading", buttonLabel: "buttonLabel" }, outputs: { actionSelected: "actionSelected", approvalSelected: "approvalSelected" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["[data-test=dhis2-uiwidgets-pagination]{display:flex!important;flex-direction:row!important;justify-content:space-between!important;align-items:center!important}\n"] }); }
|
|
3515
3519
|
}
|
|
3516
3520
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: LineListTableComponent, decorators: [{
|
|
3517
3521
|
type: Component,
|
|
@@ -3540,6 +3544,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
|
3540
3544
|
type: Output
|
|
3541
3545
|
}], approvalSelected: [{
|
|
3542
3546
|
type: Output
|
|
3547
|
+
}], isButtonLoading: [{
|
|
3548
|
+
type: Input
|
|
3549
|
+
}], buttonLabel: [{
|
|
3550
|
+
type: Input
|
|
3543
3551
|
}] } });
|
|
3544
3552
|
|
|
3545
3553
|
class LineListModule {
|
|
@@ -4667,7 +4675,7 @@ class BaseFormFieldComponent extends ReactWrapperModule {
|
|
|
4667
4675
|
if (!(changes['field'] || {})?.firstChange) {
|
|
4668
4676
|
this.InputField = this.#getInputField();
|
|
4669
4677
|
this.component = this.#getInputField();
|
|
4670
|
-
|
|
4678
|
+
this.render();
|
|
4671
4679
|
}
|
|
4672
4680
|
}
|
|
4673
4681
|
#getInputField() {
|
|
@@ -4808,7 +4816,7 @@ class BaseFormFieldComponent extends ReactWrapperModule {
|
|
|
4808
4816
|
});
|
|
4809
4817
|
setValue(event.selected);
|
|
4810
4818
|
setTouched(true);
|
|
4811
|
-
} }, (this.field().options || []).map((option) => (React__default.createElement(SingleSelectOption, { key:
|
|
4819
|
+
} }, (this.field().options || []).map((option) => (React__default.createElement(SingleSelectOption, { key: option.key, label: option.label, value: option.value })))));
|
|
4812
4820
|
case 'multi-dropdown':
|
|
4813
4821
|
return (React__default.createElement(MultiSelectField, { clearText: "Clear", clearable: true, empty: "No data found", filterable: (this.field().options || []).length > 5, filterPlaceholder: "Type to filter options", error: hasError, validationText: validationError, inputWidth: this.fieldConfig()?.inputWidth, label: this.label(), name: this.field().id, required: this.field().required, loadingText: "Loading options", noMatchText: "No options found", onChange: (event) => {
|
|
4814
4822
|
const selectedValue = (event.selected || []).join(',');
|
|
@@ -4822,7 +4830,7 @@ class BaseFormFieldComponent extends ReactWrapperModule {
|
|
|
4822
4830
|
});
|
|
4823
4831
|
setValue(selectedValue);
|
|
4824
4832
|
setTouched(true);
|
|
4825
|
-
}, selected: arrayValue }, (this.field().options || []).map((option) => (React__default.createElement(MultiSelectOption, { key:
|
|
4833
|
+
}, selected: arrayValue }, (this.field().options || []).map((option) => (React__default.createElement(MultiSelectOption, { key: option.key, label: option.label, value: option.value })))));
|
|
4826
4834
|
case 'file':
|
|
4827
4835
|
return (React__default.createElement(FileInputField, { accept: "*", buttonLabel: "Upload a file", label: this.label(), name: this.field().id, files: this.uploadedFiles, onChange: (event) => {
|
|
4828
4836
|
this.uploadedFiles.push((event?.files || [])[0]);
|
|
@@ -5689,12 +5697,12 @@ class SelectionFiltersComponent extends ReactWrapperModule {
|
|
|
5689
5697
|
display: 'grid',
|
|
5690
5698
|
gridTemplateColumns: 'repeat(4, 1fr)',
|
|
5691
5699
|
gap: '16px',
|
|
5692
|
-
} }, filters.programAttributesFilters.map((filter, index) => (React__default.createElement("div", { key: index, style: { gridColumn: getAttributeColumnSpan(index) } }, filter.hasOptions && filter.options.length > 0 ? (React__default.createElement(SingleSelectField, { className: "single-select", label: filter.name || 'Select Option', type: filter.valueType, selected: filter.value, onChange: (event) => handleAttributeChange(index, event.selected) }, filter.options.map((option, i) => (React__default.createElement(SingleSelectOption, { key:
|
|
5700
|
+
} }, filters.programAttributesFilters.map((filter, index) => (React__default.createElement("div", { key: index, style: { gridColumn: getAttributeColumnSpan(index) } }, filter.hasOptions && filter.options.length > 0 ? (React__default.createElement(SingleSelectField, { className: "single-select", label: filter.name || 'Select Option', type: filter.valueType, selected: filter.value, onChange: (event) => handleAttributeChange(index, event.selected) }, filter.options.map((option, i) => (React__default.createElement(SingleSelectOption, { key: i, label: option.name, value: option.code }))))) : (React__default.createElement(InputField$1, { className: "input-field", label: filter.name || 'Program name', type: filter.valueType, value: filter.value, onChange: (event) => handleAttributeChange(index, event.value) })))))),
|
|
5693
5701
|
React__default.createElement("div", { style: {
|
|
5694
5702
|
display: 'grid',
|
|
5695
5703
|
gridTemplateColumns: 'repeat(4, 1fr)',
|
|
5696
5704
|
gap: '16px',
|
|
5697
|
-
} }, filters.programStageDataElementFilters.map((filter, index) => (React__default.createElement("div", { key: index, style: { gridColumn: getDataElementColumnSpan(index) } }, filter.hasOptions && filter.options.length > 0 ? (React__default.createElement(SingleSelectField, { className: "single-select", label: filter.name || 'Aggregation type', type: filter.valueType, selected: filter.value, onChange: (event) => handleDataElementChange(index, event.selected) }, filter.options.map((option, i) => (React__default.createElement(SingleSelectOption, { key:
|
|
5705
|
+
} }, filters.programStageDataElementFilters.map((filter, index) => (React__default.createElement("div", { key: index, style: { gridColumn: getDataElementColumnSpan(index) } }, filter.hasOptions && filter.options.length > 0 ? (React__default.createElement(SingleSelectField, { className: "single-select", label: filter.name || 'Aggregation type', type: filter.valueType, selected: filter.value, onChange: (event) => handleDataElementChange(index, event.selected) }, filter.options.map((option, i) => (React__default.createElement(SingleSelectOption, { key: i, label: option.name, value: option.code }))))) : (React__default.createElement(InputField$1, { className: "input-field", type: filter.valueType, label: filter.name || 'Program name', value: filter.value, onChange: (event) => handleDataElementChange(index, event.value) })))))),
|
|
5698
5706
|
React__default.createElement("div", { style: { textAlign: 'right', marginTop: '16px' } },
|
|
5699
5707
|
React__default.createElement(Button$1, { onClick: handleSearch }, "Search"))));
|
|
5700
5708
|
};
|