downloadRelatedTrackedEntityInstances method
Future<List<TrackedEntityInstance> >
downloadRelatedTrackedEntityInstances({
- required List<
TrackedEntityInstanceRelationship> relationships, - Dio? dioTestClient,
Implementation
Future<List<TrackedEntityInstance>> downloadRelatedTrackedEntityInstances(
{required List<TrackedEntityInstanceRelationship> relationships,
Dio? dioTestClient}) async {
final requests = (await Future.wait(relationships.map((relationship) async {
ProgramRelationship? programRelationship =
await ProgramRelationshipQuery(database: database)
.byId(relationship.relationshipType)
.getOne();
Map<String, dynamic> resultMap = {};
resultMap['trackedEntityInstance'] = relationship.toTrackedInstance;
resultMap['program'] = programRelationship?.toProgram;
return programRelationship?.toProgram != null ? resultMap : null;
})))
.skipWhile((value) => value == null);
Map<String, List<String>> requestByProgram = {};
requests.forEach((request) {
if (request != null && request['program'] != null) {
requestByProgram[request['program']] = [
...(requestByProgram[request['program']] ?? []),
request['trackedEntityInstance']
];
}
});
final queue = Queue(parallel: 50);
num availableItemCount = 0;
requestByProgram.keys.forEach((String program) {
availableItemCount++;
queue.add(() => downloadByProgramAndInstances(
program: program,
trackedEntityInstances: requestByProgram[program] as List<String>,
dioTestClient: dioTestClient));
});
if (availableItemCount == 0) {
queue.cancel();
} else {
await queue.onComplete;
}
return [];
}