diff --git a/lib/pangea/activity_sessions/activity_room_extension.dart b/lib/pangea/activity_sessions/activity_room_extension.dart index 699218208..a160caa61 100644 --- a/lib/pangea/activity_sessions/activity_room_extension.dart +++ b/lib/pangea/activity_sessions/activity_room_extension.dart @@ -252,12 +252,25 @@ extension ActivityRoomExtension on Room { } } + Map? get assignedRoles { + final roles = activityRoles?.roles; + if (roles == null) return null; + + final participants = getParticipants(); + return Map.fromEntries( + roles.entries.where( + (r) => participants.any( + (p) => p.id == r.value.userId && p.membership == Membership.join, + ), + ), + ); + } + ActivityRoleModel? get ownRole => activityRoles?.role(client.userID!); int get remainingRoles { final availableRoles = activityPlan!.roles; - final assignedRoles = activityRoles?.roles ?? {}; - return max(0, availableRoles.length - assignedRoles.length); + return max(0, availableRoles.length - (assignedRoles?.length ?? 0)); } bool get showActivityChatUI { @@ -286,6 +299,8 @@ extension ActivityRoomExtension on Room { ); if (roles == null || roles.isEmpty) return false; + if (!roles.any((r) => r.isFinished)) return false; + return roles.every((r) { if (r.isFinished) return true; diff --git a/lib/pangea/activity_sessions/activity_state_event.dart b/lib/pangea/activity_sessions/activity_state_event.dart index a62aedfb8..c6a6bf23d 100644 --- a/lib/pangea/activity_sessions/activity_state_event.dart +++ b/lib/pangea/activity_sessions/activity_state_event.dart @@ -23,7 +23,7 @@ class ActivityStateEvent extends StatelessWidget { try { final activity = ActivityPlanModel.fromJson(event.content); final availableRoles = event.room.activityPlan!.roles; - final assignedRoles = event.room.activityRoles?.roles ?? {}; + final assignedRoles = event.room.assignedRoles ?? {}; final remainingMembers = event.room.getParticipants().where( (p) => !assignedRoles.values.any((r) => r.userId == p.id), diff --git a/lib/pangea/activity_sessions/activity_unfinished_status_message.dart b/lib/pangea/activity_sessions/activity_unfinished_status_message.dart index 336f7db97..33881f315 100644 --- a/lib/pangea/activity_sessions/activity_unfinished_status_message.dart +++ b/lib/pangea/activity_sessions/activity_unfinished_status_message.dart @@ -36,7 +36,7 @@ class ActivityUnfinishedStatusMessageState final completed = widget.room.hasCompletedActivity; final availableRoles = widget.room.activityPlan!.roles; - final assignedRoles = widget.room.activityRoles?.roles ?? {}; + final assignedRoles = widget.room.assignedRoles ?? {}; final remainingRoles = availableRoles.length - assignedRoles.length; final unassignedIds = availableRoles.keys