@iapps/ng-dhis2-ui 1.2.6 → 1.2.61
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 +125 -30
- package/fesm2022/iapps-ng-dhis2-ui.mjs.map +1 -1
- package/lib/modules/form/models/form-metadata-section.model.d.ts +0 -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/models/filter-config.model.d.ts +6 -0
- package/lib/modules/line-list/models/line-list.models.d.ts +1 -1
- package/lib/modules/line-list/utils/event-table-data-util.d.ts +6 -0
- package/lib/modules/program-entry-form/program-entry-form.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -3314,15 +3314,14 @@ const FilterToolbar = ({ orgUnitLabel, selectedOrgUnit, setSelectedOrgUnit, setO
|
|
|
3314
3314
|
setOrgUnitState(defaultOrgUnit);
|
|
3315
3315
|
} }),
|
|
3316
3316
|
React__default.createElement(CalendarInput, { label: "Start date:", calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", className: "custom-input", clearable: !!startDateState, date: startDateState, onDateSelect: (selectedDate) => {
|
|
3317
|
-
if (!(selectedDate.calendarDateString === null)) {
|
|
3318
|
-
|
|
3319
|
-
}
|
|
3320
|
-
console.log(selectedDate.calendarDateString);
|
|
3317
|
+
// if (!(selectedDate.calendarDateString === null)) {
|
|
3318
|
+
setStartDateState(selectedDate.calendarDateString);
|
|
3319
|
+
//}
|
|
3321
3320
|
} }),
|
|
3322
3321
|
React__default.createElement(CalendarInput, { label: "End date:", calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", className: "custom-input", clearable: !!endDateState, date: endDateState, onDateSelect: (selectedDate) => {
|
|
3323
|
-
if (!(selectedDate.calendarDateString === null)) {
|
|
3324
|
-
|
|
3325
|
-
}
|
|
3322
|
+
// if (!(selectedDate.calendarDateString === null)) {
|
|
3323
|
+
setEndDateState(selectedDate.calendarDateString);
|
|
3324
|
+
//}
|
|
3326
3325
|
} }),
|
|
3327
3326
|
(visibleFilters ?? []).map(({ label, key, valueType, options }) => {
|
|
3328
3327
|
if (valueType === 'DATE') {
|
|
@@ -3785,18 +3784,28 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
|
|
|
3785
3784
|
const orgUnitLabel = metaData.orgUnitLabel;
|
|
3786
3785
|
const orgUnitMap = response.data
|
|
3787
3786
|
.orgUnitsMap;
|
|
3787
|
+
console.log('thhis is the metadata', metaData);
|
|
3788
3788
|
const attributeColumns = metaData.displayInListTrackedEntityAttributes
|
|
3789
3789
|
.sort((a, b) => a.sortOrder - b.sortOrder)
|
|
3790
|
-
.map((
|
|
3791
|
-
label:
|
|
3792
|
-
key:
|
|
3793
|
-
}));
|
|
3794
|
-
const dataElementColumns = metaData.displayInListDataElements
|
|
3795
|
-
.sort((a, b) => a.sortOrder - b.sortOrder)
|
|
3796
|
-
.map((element) => ({
|
|
3797
|
-
label: element.name,
|
|
3798
|
-
key: element.id,
|
|
3790
|
+
.map((trackedEntityAttribute) => ({
|
|
3791
|
+
label: trackedEntityAttribute.formName ?? trackedEntityAttribute.name,
|
|
3792
|
+
key: trackedEntityAttribute.id,
|
|
3799
3793
|
}));
|
|
3794
|
+
// const dataElementColumns = metaData.displayInListDataElements
|
|
3795
|
+
// .sort((a, b) => a.sortOrder! - b.sortOrder!)
|
|
3796
|
+
// .map((dataElement) => ({
|
|
3797
|
+
// label: dataElement.formName || dataElement.name,
|
|
3798
|
+
// key: dataElement.id,
|
|
3799
|
+
// }));
|
|
3800
|
+
const dataElementColumns = metaData
|
|
3801
|
+
.programStages.sort((a, b) => a.sortOrder - b.sortOrder) // Sorts stages by sortOrder
|
|
3802
|
+
.flatMap((stage) => stage
|
|
3803
|
+
.programStageDataElements.filter((psde) => psde.displayInReports)
|
|
3804
|
+
.sort((a, b) => a.sortOrder - b.sortOrder) // Sorts data elements within stage
|
|
3805
|
+
.map((psde) => ({
|
|
3806
|
+
label: psde.dataElement.formName || psde.dataElement.name,
|
|
3807
|
+
key: psde.dataElement.id,
|
|
3808
|
+
})));
|
|
3800
3809
|
const dataElementOptions = metaData.displayInListDataElements.map((element) => ({
|
|
3801
3810
|
id: element.id,
|
|
3802
3811
|
options: element.optionSet?.options.map((opt) => ({
|
|
@@ -3837,20 +3846,30 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
|
|
|
3837
3846
|
};
|
|
3838
3847
|
}
|
|
3839
3848
|
catch {
|
|
3840
|
-
return { ...attr };
|
|
3849
|
+
return { ...attr };
|
|
3841
3850
|
}
|
|
3842
3851
|
}
|
|
3843
3852
|
return attr;
|
|
3844
3853
|
});
|
|
3845
3854
|
attributesData.forEach((attr) => {
|
|
3846
|
-
|
|
3855
|
+
const attributeMeta = metaData.programTrackedEntityAttributes?.find((metadata) => metadata.trackedEntityAttribute.id === attr.attribute);
|
|
3856
|
+
if (attributeMeta?.trackedEntityAttribute.optionSetValue) {
|
|
3857
|
+
const optionSet = attributeMeta?.trackedEntityAttribute?.optionSet;
|
|
3858
|
+
const option = optionSet?.options?.find((option) => option.code === attr.value);
|
|
3859
|
+
row[attr.attribute] = option
|
|
3860
|
+
? { value: option?.name }
|
|
3861
|
+
: { value: attr.value };
|
|
3862
|
+
}
|
|
3863
|
+
else {
|
|
3864
|
+
row[attr.attribute] = { value: attr.value };
|
|
3865
|
+
}
|
|
3847
3866
|
});
|
|
3848
3867
|
dataElementsData.forEach((element) => {
|
|
3849
|
-
//
|
|
3868
|
+
// Finds the matching data element in dataElementOptions by ID
|
|
3850
3869
|
const dataElementOption = dataElementOptions.find((deo) => deo.id === element.dataElement);
|
|
3851
|
-
//
|
|
3870
|
+
// finds a matching option within that data element's options
|
|
3852
3871
|
const matchingOption = dataElementOption?.options?.find((opt) => opt.name === element.value);
|
|
3853
|
-
//
|
|
3872
|
+
// Builds the row entry with value and optional style
|
|
3854
3873
|
if (matchingOption) {
|
|
3855
3874
|
row[element.dataElement] = {
|
|
3856
3875
|
value: element.value,
|
|
@@ -3863,7 +3882,7 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
|
|
|
3863
3882
|
};
|
|
3864
3883
|
}
|
|
3865
3884
|
});
|
|
3866
|
-
//
|
|
3885
|
+
// Includes orgUnit in the row for id access with style
|
|
3867
3886
|
row['orgUnitId'] = { value: matchingEnrollment.orgUnit };
|
|
3868
3887
|
row['orgUnit'] = {
|
|
3869
3888
|
value: orgUnitMap?.get(matchingEnrollment.orgUnit) || '-',
|
|
@@ -3887,6 +3906,58 @@ const addActionsColumn = (columns, actionOptions) => {
|
|
|
3887
3906
|
];
|
|
3888
3907
|
};
|
|
3889
3908
|
|
|
3909
|
+
const getEvents = (response, programStageId, pager, metaData) => {
|
|
3910
|
+
const events = response.data.events;
|
|
3911
|
+
const eventsiiii = response.data;
|
|
3912
|
+
const allDataElements = new Set();
|
|
3913
|
+
events.forEach((event) => {
|
|
3914
|
+
event.dataValues.forEach((dv) => allDataElements.add(dv.dataElement));
|
|
3915
|
+
});
|
|
3916
|
+
let stageFromMetaData;
|
|
3917
|
+
if (programStageId) {
|
|
3918
|
+
stageFromMetaData = metaData.programStages.find((stage) => stage.id === programStageId);
|
|
3919
|
+
}
|
|
3920
|
+
else if (metaData.programType === 'WITHOUT_REGISTRATION') {
|
|
3921
|
+
stageFromMetaData = metaData.programStages[0];
|
|
3922
|
+
}
|
|
3923
|
+
if (!stageFromMetaData) {
|
|
3924
|
+
throw new Error(`Program stage with ID ${programStageId} not found`);
|
|
3925
|
+
}
|
|
3926
|
+
const entityColumns = Array.from(allDataElements).map((dataElementId) => {
|
|
3927
|
+
const dataElementMeta = stageFromMetaData.programStageDataElements.find((psde) => psde.dataElement.id === dataElementId);
|
|
3928
|
+
return {
|
|
3929
|
+
label: dataElementMeta?.dataElement.name || dataElementId,
|
|
3930
|
+
key: dataElementId,
|
|
3931
|
+
};
|
|
3932
|
+
});
|
|
3933
|
+
const dataElementsData = events.map((event, idx) => {
|
|
3934
|
+
const row = {
|
|
3935
|
+
event: { value: event.event },
|
|
3936
|
+
index: {
|
|
3937
|
+
value: (pager.page - 1) * pager.pageSize + idx + 1,
|
|
3938
|
+
},
|
|
3939
|
+
};
|
|
3940
|
+
allDataElements.forEach((dataElementId) => {
|
|
3941
|
+
row[dataElementId] = { value: '' };
|
|
3942
|
+
});
|
|
3943
|
+
event.dataValues.forEach((dv) => {
|
|
3944
|
+
const dataElementMeta = stageFromMetaData.programStageDataElements.find((psde) => psde.dataElement.id === dv.dataElement);
|
|
3945
|
+
if (dataElementMeta?.dataElement.optionSet) {
|
|
3946
|
+
const optionSet = dataElementMeta.dataElement.optionSet;
|
|
3947
|
+
const matchingOption = optionSet.options.find((option) => option.code === dv.value);
|
|
3948
|
+
row[dv.dataElement] = matchingOption
|
|
3949
|
+
? { value: matchingOption.name }
|
|
3950
|
+
: { value: dv.value };
|
|
3951
|
+
}
|
|
3952
|
+
else {
|
|
3953
|
+
row[dv.dataElement] = { value: dv.value };
|
|
3954
|
+
}
|
|
3955
|
+
});
|
|
3956
|
+
return row;
|
|
3957
|
+
});
|
|
3958
|
+
return { columns: entityColumns, data: dataElementsData };
|
|
3959
|
+
};
|
|
3960
|
+
|
|
3890
3961
|
// src/app/line-list-table.component.ts
|
|
3891
3962
|
class LineListTableComponent extends ReactWrapperModule {
|
|
3892
3963
|
constructor() {
|
|
@@ -3974,10 +4045,36 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3974
4045
|
if (!metaData) {
|
|
3975
4046
|
return undefined;
|
|
3976
4047
|
}
|
|
3977
|
-
setLoading(true);
|
|
3978
4048
|
const isTracker = metaData.programType === 'WITH_REGISTRATION';
|
|
4049
|
+
const isEvent = metaData.programType === 'WITHOUT_REGISTRATION';
|
|
3979
4050
|
const endDate = endDateState ?? new Date().toISOString().split('T')[0];
|
|
3980
|
-
if (
|
|
4051
|
+
if (this.programStageId || isEvent) {
|
|
4052
|
+
setLoading(true);
|
|
4053
|
+
d2.eventModule.event
|
|
4054
|
+
.setProgram(this.programId)
|
|
4055
|
+
.setProgramStage(this.programStageId)
|
|
4056
|
+
.setPagination(new Pager({
|
|
4057
|
+
pageSize: pager.pageSize,
|
|
4058
|
+
page: pager.page,
|
|
4059
|
+
}))
|
|
4060
|
+
.get()
|
|
4061
|
+
.then((response) => {
|
|
4062
|
+
const eventsResponse = {
|
|
4063
|
+
events: response.data,
|
|
4064
|
+
pager: pager,
|
|
4065
|
+
// orgUnitsMap: fetchedOrgUnits,
|
|
4066
|
+
};
|
|
4067
|
+
const { columns, data } = getEvents({ data: eventsResponse }, this.programStageId, pager, metaData);
|
|
4068
|
+
const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...columns], this.actionOptions);
|
|
4069
|
+
const pagerResponse = response.pagination;
|
|
4070
|
+
setLoading(false);
|
|
4071
|
+
setColumns(finalColumns);
|
|
4072
|
+
setData(data);
|
|
4073
|
+
setPager(new Pager(pagerResponse || {}));
|
|
4074
|
+
});
|
|
4075
|
+
}
|
|
4076
|
+
else if (isTracker) {
|
|
4077
|
+
setLoading(true);
|
|
3981
4078
|
d2.trackerModule.trackedEntity
|
|
3982
4079
|
.setEndDate(endDate)
|
|
3983
4080
|
.setStartDate(startDateState)
|
|
@@ -4028,9 +4125,6 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4028
4125
|
});
|
|
4029
4126
|
});
|
|
4030
4127
|
}
|
|
4031
|
-
else {
|
|
4032
|
-
//TODO: TO IMPLEMEMNT EVENT QUERY FOR FILTERING EVENTS WHEN PROGRAM STAGE IS PASSED OR DEALING WITH EVENT PROGRAM USING TRACKER SDK QUERY
|
|
4033
|
-
}
|
|
4034
4128
|
}, [
|
|
4035
4129
|
metaData,
|
|
4036
4130
|
programIdState,
|
|
@@ -5009,7 +5103,9 @@ class FormFieldGroup {
|
|
|
5009
5103
|
...field,
|
|
5010
5104
|
id: field.id,
|
|
5011
5105
|
code: fieldMetaData['code'],
|
|
5012
|
-
label: (fieldMetaData['formName'] ??
|
|
5106
|
+
label: (fieldMetaData['formName'] ??
|
|
5107
|
+
fieldMetaData['name'] ??
|
|
5108
|
+
field['label']),
|
|
5013
5109
|
key: camelCase(fieldMetaData['code']) || field.id,
|
|
5014
5110
|
required: (fieldMetaData['mandatory'] ??
|
|
5015
5111
|
fieldMetaData['required']),
|
|
@@ -5140,7 +5236,6 @@ class FormMetadataSection {
|
|
|
5140
5236
|
return programTrackedEntityAttributes.map((programTrackedEntityAttribute) => {
|
|
5141
5237
|
return {
|
|
5142
5238
|
...programTrackedEntityAttribute['trackedEntityAttribute'],
|
|
5143
|
-
formName: (programTrackedEntityAttribute['trackedEntityAttribute'] || {})['name'],
|
|
5144
5239
|
sortOrder: programTrackedEntityAttribute['sortOrder'],
|
|
5145
5240
|
mandatory: programTrackedEntityAttribute['mandatory'],
|
|
5146
5241
|
allowFutureDate: programTrackedEntityAttribute['allowFutureDate'],
|
|
@@ -7049,7 +7144,7 @@ class TrackerFormComponent {
|
|
|
7049
7144
|
programs: [program],
|
|
7050
7145
|
programStage: this.programStage(),
|
|
7051
7146
|
disableEnrollmentDate: true,
|
|
7052
|
-
excludeInheritedAttributes:
|
|
7147
|
+
excludeInheritedAttributes: false,
|
|
7053
7148
|
}).toJson();
|
|
7054
7149
|
}
|
|
7055
7150
|
}
|