@iapps/ng-dhis2-ui 1.2.96 → 1.2.98

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.
@@ -4011,6 +4011,7 @@ class LineListTableComponent extends ReactWrapperModule {
4011
4011
  const [triggerRefetch, setTriggerRefetch] = useState(this.triggerRefetch);
4012
4012
  const [showActionButtons, setShowActionButtons] = useState(this.showActionButtons);
4013
4013
  const [orgUnitModalVisible, setOrgUnitModalVisible] = useState(false);
4014
+ const [error, setError] = useState(null);
4014
4015
  const d2 = window.d2Web;
4015
4016
  // Stores updaters in refs for Angular to access
4016
4017
  const updateRefs = useRef({
@@ -4025,26 +4026,35 @@ class LineListTableComponent extends ReactWrapperModule {
4025
4026
  setTriggerRefetch,
4026
4027
  setTriggerTokenState,
4027
4028
  });
4029
+ // useEffect(() => {
4030
+ // this.setReactStateUpdaters?.(updateRefs.current);
4031
+ // }, []);
4028
4032
  useEffect(() => {
4029
4033
  this.setReactStateUpdaters?.(updateRefs.current);
4030
- }, []);
4031
- useEffect(() => {
4032
- setLoading(true);
4033
4034
  const fetchmetaData = async () => {
4035
+ setLoading(true);
4036
+ if (!this.programId) {
4037
+ setMetaData(null);
4038
+ setLoading(false);
4039
+ return;
4040
+ }
4041
+ setError(null);
4034
4042
  try {
4035
4043
  const trackerResponse = (await d2.trackerModule.trackedEntity
4036
4044
  .setProgram(this.programId)
4037
4045
  .getMetaData({ skipProgramRules: true }));
4046
+ if (!trackerResponse || !trackerResponse.programType) {
4047
+ throw new Error('failed to load data.');
4048
+ }
4038
4049
  const data = trackerResponse;
4039
4050
  setMetaData(data);
4040
4051
  }
4041
4052
  catch (error) {
4042
- console.error('Failed to metadata:', error);
4053
+ setError(error);
4054
+ setLoading(false);
4043
4055
  }
4044
4056
  };
4045
- if (this.programId) {
4046
- fetchmetaData();
4047
- }
4057
+ fetchmetaData();
4048
4058
  }, []);
4049
4059
  useEffect(() => {
4050
4060
  if (!metaData) {
@@ -4086,9 +4096,10 @@ class LineListTableComponent extends ReactWrapperModule {
4086
4096
  // this.actionOptions
4087
4097
  // );
4088
4098
  let updatedFilterableColumnIds;
4089
- if (Array.isArray(this.filterableColumnIds) && this.filterableColumnIds.length > 0) {
4099
+ if (Array.isArray(this.filterableColumnIds) &&
4100
+ this.filterableColumnIds.length > 0) {
4090
4101
  const filterableColumnIdsSet = new Set(this.filterableColumnIds);
4091
- updatedFilterableColumnIds = columns.filter(column => filterableColumnIdsSet.has(column.key));
4102
+ updatedFilterableColumnIds = columns.filter((column) => filterableColumnIdsSet.has(column.key));
4092
4103
  }
4093
4104
  else {
4094
4105
  updatedFilterableColumnIds = columns;
@@ -4102,74 +4113,76 @@ class LineListTableComponent extends ReactWrapperModule {
4102
4113
  });
4103
4114
  }
4104
4115
  else if (isTracker) {
4105
- setLoading(true);
4106
- d2.trackerModule.trackedEntity
4107
- .setEndDate(endDate)
4108
- .setStartDate(startDateState)
4109
- .setProgram(this.programId)
4110
- .setProgramStage(this.programStageId)
4111
- .setOrgUnit(orgUnitState)
4112
- .setOuMode(this.ouMode)
4113
- .setStatus(this.enrollmentStatus)
4114
- .setEventStatus(this.eventStatus?.status, this.eventStatus?.programStage)
4115
- .setFilters(dataQueryFiltersState)
4116
- .setPagination(new Pager({
4117
- pageSize: pager.pageSize,
4118
- page: pager.page,
4119
- }))
4120
- .setOrderCriterias([
4121
- new DataOrderCriteria().setField('createdAt').setOrder('desc'),
4122
- ])
4123
- .get()
4124
- .then((response) => {
4125
- const trackedEntityInstances = Array.isArray(response.data)
4126
- ? response.data
4127
- : [response.data];
4128
- const orgUnitIdsFromEnrollments = new Set(trackedEntityInstances.map((tei) => tei.latestEnrollment.orgUnit));
4129
- const orgUnitsFromAttributes = new Set(trackedEntityInstances.flatMap((tei) => tei.attributes
4130
- ?.filter((attr) => attr.valueType === 'ORGANISATION_UNIT')
4131
- .map((attr) => attr.value) || []));
4132
- const uniqueOrgUnitIds = [
4133
- ...orgUnitIdsFromEnrollments,
4134
- ...orgUnitsFromAttributes,
4135
- ];
4136
- this.lineListService.fetchOrgUnits(uniqueOrgUnitIds).subscribe({
4137
- next: (fetchedOrgUnits) => {
4138
- const trackedEntityResponse = {
4139
- trackedEntityInstances: response.data,
4140
- pager: pager,
4141
- orgUnitsMap: fetchedOrgUnits,
4142
- };
4143
- const { columns, data, filteredEntityColumns, orgUnitLabel } = getTrackedEntityTableData({ data: trackedEntityResponse }, this.programId, pager, metaData);
4144
- setFilteredColumns((prev) => filteredEntityColumns.length > 0
4145
- ? filteredEntityColumns
4146
- : prev);
4147
- let updatedFilterableColumnIds;
4148
- if (Array.isArray(this.filterableColumnIds) && this.filterableColumnIds.length > 0) {
4149
- const filterableColumnIdsSet = new Set(this.filterableColumnIds);
4150
- updatedFilterableColumnIds = columns.filter(column => filterableColumnIdsSet.has(column.key));
4151
- }
4152
- else {
4153
- updatedFilterableColumnIds = columns;
4154
- }
4155
- const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...updatedFilterableColumnIds], this.actionOptions);
4156
- // const finalColumns: ColumnDefinition[] = addActionsColumn(
4157
- // [{ label: '#', key: 'index' }, ...columns],
4158
- // this.actionOptions
4159
- // );
4160
- const pagerResponse = response.pagination;
4161
- setLoading(false);
4162
- setColumns(finalColumns);
4163
- setData(data);
4164
- setPager(new Pager(pagerResponse || {}));
4165
- setOrgUnitLabel(orgUnitLabel);
4166
- },
4167
- error: (err) => {
4168
- console.error('Error fetching org units:', err);
4169
- setLoading(false);
4170
- },
4171
- });
4172
- });
4116
+ const fetchTrackerData = async () => {
4117
+ try {
4118
+ setLoading(true);
4119
+ const response = await d2.trackerModule.trackedEntity
4120
+ .setEndDate(endDate)
4121
+ .setStartDate(startDateState)
4122
+ .setProgram(this.programId)
4123
+ .setProgramStage(this.programStageId)
4124
+ .setOrgUnit(orgUnitState)
4125
+ .setOuMode(this.ouMode)
4126
+ .setStatus(this.enrollmentStatus)
4127
+ .setEventStatus(this.eventStatus?.status, this.eventStatus?.programStage)
4128
+ .setFilters(dataQueryFiltersState)
4129
+ .setPagination(new Pager({
4130
+ pageSize: pager.pageSize,
4131
+ page: pager.page,
4132
+ }))
4133
+ .setOrderCriterias([
4134
+ new DataOrderCriteria().setField('createdAt').setOrder('desc'),
4135
+ ])
4136
+ .get();
4137
+ const trackedEntityInstances = Array.isArray(response.data)
4138
+ ? response.data
4139
+ : [response.data];
4140
+ const orgUnitIdsFromEnrollments = new Set(trackedEntityInstances.map((tei) => tei.latestEnrollment.orgUnit));
4141
+ const orgUnitsFromAttributes = new Set(trackedEntityInstances.flatMap((tei) => tei.attributes
4142
+ ?.filter((attr) => attr.valueType === 'ORGANISATION_UNIT')
4143
+ .map((attr) => attr.value) || []));
4144
+ const uniqueOrgUnitIds = [
4145
+ ...orgUnitIdsFromEnrollments,
4146
+ ...orgUnitsFromAttributes,
4147
+ ];
4148
+ const fetchedOrgUnits = await firstValueFrom(this.lineListService.fetchOrgUnits(uniqueOrgUnitIds));
4149
+ const trackedEntityResponse = {
4150
+ trackedEntityInstances: response.data,
4151
+ pager: pager,
4152
+ orgUnitsMap: fetchedOrgUnits,
4153
+ };
4154
+ const { columns, data, filteredEntityColumns, orgUnitLabel } = getTrackedEntityTableData({ data: trackedEntityResponse }, this.programId, pager, metaData);
4155
+ setFilteredColumns((prev) => filteredEntityColumns.length > 0 ? filteredEntityColumns : prev);
4156
+ let updatedFilterableColumnIds;
4157
+ if (Array.isArray(this.filterableColumnIds) &&
4158
+ this.filterableColumnIds.length > 0) {
4159
+ const filterableColumnIdsSet = new Set(this.filterableColumnIds);
4160
+ updatedFilterableColumnIds = columns.filter((column) => filterableColumnIdsSet.has(column.key));
4161
+ }
4162
+ else {
4163
+ updatedFilterableColumnIds = columns;
4164
+ }
4165
+ const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...updatedFilterableColumnIds], this.actionOptions);
4166
+ // const finalColumns: ColumnDefinition[] = addActionsColumn(
4167
+ // [{ label: '#', key: 'index' }, ...columns],
4168
+ // this.actionOptions
4169
+ // );
4170
+ const pagerResponse = response.pagination;
4171
+ // setLoading(false);
4172
+ setColumns(finalColumns);
4173
+ setData(data);
4174
+ setPager(new Pager(pagerResponse || {}));
4175
+ setOrgUnitLabel(orgUnitLabel);
4176
+ }
4177
+ catch (error) {
4178
+ console.error('Failed to fetch tracker data:', error);
4179
+ setError('Could not load records. Please reload.');
4180
+ }
4181
+ finally {
4182
+ setLoading(false);
4183
+ }
4184
+ };
4185
+ fetchTrackerData();
4173
4186
  }
4174
4187
  }, [
4175
4188
  metaData,