Conditionally render participants (#3700)

* chore: only show activity participants in state event widget it user has assigned role

* chore: show participants in activity state event if there are no available roles
pull/2245/head
ggurdin 3 months ago committed by GitHub
parent 1e3529180b
commit b1d9b30b29
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,3 +1,5 @@
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:collection/collection.dart';
@ -55,7 +57,7 @@ extension ActivityRoomExtension on Room {
Future<void> continueActivity() async {
final currentRoles = activityRoles ?? ActivityRolesModel.empty;
final role = currentRoles.role(client.userID!);
final role = ownRole;
if (role == null || !role.isFinished) return;
role.finishedAt = null; // Reset finished state
@ -75,7 +77,7 @@ extension ActivityRoomExtension on Room {
}
final currentRoles = activityRoles ?? ActivityRolesModel.empty;
final role = currentRoles.role(client.userID!);
final role = ownRole;
if (role == null || role.isFinished) return;
role.finishedAt = DateTime.now();
currentRoles.updateRole(role);
@ -101,7 +103,7 @@ extension ActivityRoomExtension on Room {
Future<void> archiveActivity() async {
final currentRoles = activityRoles ?? ActivityRolesModel.empty;
final role = currentRoles.role(client.userID!);
final role = ownRole;
if (role == null || !role.isFinished) return;
role.archivedAt = DateTime.now();
@ -256,6 +258,14 @@ extension ActivityRoomExtension on Room {
}
}
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);
}
bool get showActivityChatUI {
return activityPlan != null &&
powerForChangingStateEvent(PangeaEventTypes.activityRole) == 0 &&
@ -264,18 +274,17 @@ extension ActivityRoomExtension on Room {
bool get isActiveInActivity {
if (!showActivityChatUI) return false;
final role = activityRoles?.role(client.userID!);
final role = ownRole;
return role != null && !role.isFinished;
}
bool get isInactiveInActivity {
if (!showActivityChatUI) return false;
final role = activityRoles?.role(client.userID!);
final role = ownRole;
return role == null || role.isFinished;
}
bool get hasCompletedActivity =>
activityRoles?.role(client.userID!)?.isFinished ?? false;
bool get hasCompletedActivity => ownRole?.isFinished ?? false;
bool get activityIsFinished {
final roles = activityRoles?.roles.values.where(
@ -295,6 +304,5 @@ extension ActivityRoomExtension on Room {
});
}
bool get isHiddenActivityRoom =>
activityRoles?.role(client.userID!)?.isArchived ?? false;
bool get isHiddenActivityRoom => ownRole?.isArchived ?? false;
}

@ -46,6 +46,8 @@ class ActivityStateEvent extends StatelessWidget {
activity.markdown,
style: const TextStyle(fontSize: 14.0),
),
if (event.room.ownRole != null ||
event.room.remainingRoles == 0) ...[
Wrap(
alignment: WrapAlignment.center,
spacing: 12.0,
@ -111,6 +113,7 @@ class ActivityStateEvent extends StatelessWidget {
}).toList(),
),
],
],
),
);
} catch (e) {

@ -20,7 +20,7 @@ class ActivityStatusMessage extends StatelessWidget {
return const SizedBox.shrink();
}
final role = room.activityRoles?.role(room.client.userID!);
final role = room.ownRole;
if (role != null && !role.isFinished) {
return const SizedBox.shrink();
}

@ -72,6 +72,7 @@ class ActivityUnfinishedStatusMessageState
),
const SizedBox(height: 16.0),
],
if (completed || remainingRoles > 0)
ElevatedButton(
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.symmetric(

Loading…
Cancel
Save