@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.
@@ -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
- setStartDateState(selectedDate.calendarDateString);
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
- setEndDateState(selectedDate.calendarDateString);
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((attr) => ({
3791
- label: attr.name,
3792
- key: attr.id,
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 }; // Leave value as is on parse failure
3849
+ return { ...attr };
3841
3850
  }
3842
3851
  }
3843
3852
  return attr;
3844
3853
  });
3845
3854
  attributesData.forEach((attr) => {
3846
- row[attr.attribute] = { value: attr.value };
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
- // Find the matching data element in dataElementOptions by ID
3868
+ // Finds the matching data element in dataElementOptions by ID
3850
3869
  const dataElementOption = dataElementOptions.find((deo) => deo.id === element.dataElement);
3851
- // find a matching option within that data element's options
3870
+ // finds a matching option within that data element's options
3852
3871
  const matchingOption = dataElementOption?.options?.find((opt) => opt.name === element.value);
3853
- // Build the row entry with value and optionally style
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
- // Include orgUnit in the row for id access with style
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 (isTracker) {
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'] ?? field['label']),
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: true,
7147
+ excludeInheritedAttributes: false,
7053
7148
  }).toJson();
7054
7149
  }
7055
7150
  }