Merge pull request #4605 from pangeachat/course-chats-issues

chore: filter out unjoined activities without members and ones with a…
This commit is contained in:
ggurdin 2025-11-05 12:57:49 -05:00 committed by GitHub
commit 8d69de4586
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 4 deletions

View file

@ -16,6 +16,8 @@ import 'package:fluffychat/pangea/common/utils/error_handler.dart';
import 'package:fluffychat/pangea/course_chats/course_chats_view.dart';
import 'package:fluffychat/pangea/course_chats/extended_space_rooms_chunk.dart';
import 'package:fluffychat/pangea/course_plans/course_activities/activity_summaries_provider.dart';
import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart';
import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
import 'package:fluffychat/pangea/public_spaces/public_room_bottom_sheet.dart';
import 'package:fluffychat/pangea/spaces/constants/space_constants.dart';
@ -42,7 +44,7 @@ class CourseChats extends StatefulWidget {
}
class CourseChatsController extends State<CourseChats>
with ActivitySummariesProvider {
with ActivitySummariesProvider, CoursePlanProvider {
String get roomId => widget.roomId;
Room? get room => widget.client.getRoomById(widget.roomId);
@ -117,6 +119,7 @@ class CourseChatsController extends State<CourseChats>
final Map<ActivityPlanModel, List<ExtendedSpaceRoomsChunk>> sessionsMap =
{};
final validIDs = course?.activityIDs ?? {};
for (final chunk in discoveredChildren!) {
if (chunk.roomType?.startsWith(PangeaRoomTypes.activitySession) != true) {
continue;
@ -130,6 +133,11 @@ class CourseChatsController extends State<CourseChats>
final activity = summary.activityPlan;
final users =
summary.activityRoles.roles.values.map((r) => r.userId).toList();
if (users.isEmpty || !validIDs.contains(activity.activityId)) {
continue;
}
if (activity.req.numberOfParticipants <= users.length) {
// Don't show full activities
continue;
@ -198,9 +206,19 @@ class CourseChatsController extends State<CourseChats>
await _loadHierarchy(activeSpace: room, reload: reload);
if (mounted) await _joinDefaultChats();
if (mounted) {
await loadRoomSummaries(
room.spaceChildren.map((c) => c.roomId).whereType<String>().toList(),
);
final futures = [
loadRoomSummaries(
room.spaceChildren
.map((c) => c.roomId)
.whereType<String>()
.toList(),
),
if (room.coursePlan?.uuid != null) loadCourse(room.coursePlan!.uuid),
];
await Future.wait(futures);
if (mounted) {
await loadTopics();
}
}
} catch (e, s) {
Logs().w('Unable to load hierarchy', e, s);

View file

@ -99,6 +99,9 @@ class CoursePlanModel {
),
).topics;
Set<String> get activityIDs =>
loadedTopics.values.expand((topic) => topic.activityIds).toSet();
Future<Map<String, CourseTopicModel>> fetchTopics() async {
final resp = await CourseTopicRepo.get(
TranslateTopicRequest(