From 4680c186b034db2f36c39d730b1d252fc5c995c2 Mon Sep 17 00:00:00 2001 From: Wilson Date: Thu, 11 Sep 2025 22:32:58 +0700 Subject: [PATCH] fix: Correctly fetch activity images (#3943) * fix fetching images and parsing url * small fix for getting activity image URLs --------- Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com> Co-authored-by: ggurdin --- .../course_plans/course_activity_repo.dart | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/pangea/course_plans/course_activity_repo.dart b/lib/pangea/course_plans/course_activity_repo.dart index c966be165..ebd372c21 100644 --- a/lib/pangea/course_plans/course_activity_repo.dart +++ b/lib/pangea/course_plans/course_activity_repo.dart @@ -95,7 +95,7 @@ class CourseActivityRepo { ); final imageUrls = await _fetchImageUrls( - cmsCoursePlanActivitiesResult.docs.map((a) => a.id).toList(), + cmsCoursePlanActivitiesResult.docs, ); final activities = cmsCoursePlanActivitiesResult.docs @@ -113,12 +113,23 @@ class CourseActivityRepo { } static Future> _fetchImageUrls( - List activityIds, + List activities, ) async { + // map of mediaId to activityId + final activityToMediaId = Map.fromEntries( + activities + .where((a) => a.coursePlanActivityMedia?.docs?.isNotEmpty ?? false) + .map((a) { + final mediaIds = a.coursePlanActivityMedia?.docs; + return MapEntry(mediaIds?.firstOrNull, a.id); + }), + ); + + final mediaIds = activityToMediaId.keys.whereType().toList(); final where = { - "id": {"in": activityIds.join(",")}, + "id": {"in": mediaIds.join(",")}, }; - final limit = activityIds.length; + final limit = mediaIds.length; final PayloadClient payload = PayloadClient( baseUrl: Environment.cmsApi, @@ -132,8 +143,15 @@ class CourseActivityRepo { page: 1, sort: "createdAt", ); + return Map.fromEntries( - cmsCoursePlanActivityMediasResult.docs.map((e) => MapEntry(e.id, e.url!)), + cmsCoursePlanActivityMediasResult.docs.map((media) { + final activityId = activityToMediaId[media.id]; + if (activityId != null && media.url != null) { + return MapEntry(activityId, '${Environment.cmsApi}${media.url!}'); + } + return null; + }).whereType>(), ); } }