From 141d3c5175c3b00790cd522b5f617a35a4157134 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:15:56 -0400 Subject: [PATCH] reload space hierarchy on invite update (#3949) --- lib/pangea/course_chats/course_chats_page.dart | 14 ++++++++++++-- lib/pangea/course_plans/course_activity_repo.dart | 4 ++++ lib/pangea/payload_client/payload_client.dart | 7 +++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/pangea/course_chats/course_chats_page.dart b/lib/pangea/course_chats/course_chats_page.dart index 5c04452a5..17d4aa92c 100644 --- a/lib/pangea/course_chats/course_chats_page.dart +++ b/lib/pangea/course_chats/course_chats_page.dart @@ -759,8 +759,11 @@ class CourseChatsController extends State { /// space so that the view can be auto-reloaded in the room subscription bool _hasHierarchyUpdate(SyncUpdate update) { final joinUpdate = update.rooms?.join; + final inviteUpdate = update.rooms?.invite; final leaveUpdate = update.rooms?.leave; - if (joinUpdate == null && leaveUpdate == null) return false; + if (joinUpdate == null && leaveUpdate == null && inviteUpdate == null) { + return false; + } final joinedRooms = joinUpdate?.entries .where( @@ -769,6 +772,13 @@ class CourseChatsController extends State { .map((e) => e.value.timeline?.events) .whereType>(); + final invitedRooms = inviteUpdate?.entries + .where( + (e) => childrenIds.contains(e.key), + ) + .map((e) => e.value.inviteState) + .whereType>(); + final leftRooms = leaveUpdate?.entries .where( (e) => childrenIds.contains(e.key), @@ -794,7 +804,7 @@ class CourseChatsController extends State { ) ?? false; - if (hasJoinedRoom || hasLeftRoom) { + if (hasJoinedRoom || hasLeftRoom || (invitedRooms?.isNotEmpty ?? false)) { return true; } diff --git a/lib/pangea/course_plans/course_activity_repo.dart b/lib/pangea/course_plans/course_activity_repo.dart index ebd372c21..e54c613ec 100644 --- a/lib/pangea/course_plans/course_activity_repo.dart +++ b/lib/pangea/course_plans/course_activity_repo.dart @@ -126,6 +126,10 @@ class CourseActivityRepo { ); final mediaIds = activityToMediaId.keys.whereType().toList(); + if (mediaIds.isEmpty) { + return {}; + } + final where = { "id": {"in": mediaIds.join(",")}, }; diff --git a/lib/pangea/payload_client/payload_client.dart b/lib/pangea/payload_client/payload_client.dart index b0717b5e7..d00c8d021 100644 --- a/lib/pangea/payload_client/payload_client.dart +++ b/lib/pangea/payload_client/payload_client.dart @@ -124,6 +124,13 @@ class PayloadClient { final endpoint = '$basePath/$collection${queryParams.isNotEmpty ? '?${queryStringify(queryParams)}' : ''}'; final response = await get(endpoint); + + if (response.statusCode != 200) { + throw Exception( + 'Failed to load documents: ${response.statusCode} ${response.body}', + ); + } + final json = jsonDecode(response.body) as Map; return PayloadPaginatedResponse.fromJson(json, fromJson);