You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.2 KiB
Dart
49 lines
1.2 KiB
Dart
import 'package:collection/collection.dart';
|
|
|
|
import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart';
|
|
|
|
class ActivityRolesModel {
|
|
final Map<String, ActivityRoleModel> roles;
|
|
|
|
const ActivityRolesModel(this.roles);
|
|
|
|
ActivityRoleModel? role(String userId) {
|
|
return roles.values.firstWhereOrNull((r) => r.userId == userId);
|
|
}
|
|
|
|
void updateRole(ActivityRoleModel role) {
|
|
roles[role.id] = role;
|
|
}
|
|
|
|
void dismissTooltip(ActivityRoleModel role) {
|
|
roles[role.id]?.dismissedGoalTooltip = true;
|
|
}
|
|
|
|
void finishAll() {
|
|
for (final id in roles.keys) {
|
|
if (roles[id]!.isFinished) continue;
|
|
roles[id]!.finishedAt = DateTime.now();
|
|
}
|
|
}
|
|
|
|
static ActivityRolesModel get empty {
|
|
final roles = <String, ActivityRoleModel>{};
|
|
return ActivityRolesModel(roles);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
"roles": roles.map((id, role) => MapEntry(id, role.toJson())),
|
|
};
|
|
}
|
|
|
|
static ActivityRolesModel fromJson(Map<String, dynamic> json) {
|
|
final roles = (json['roles'] as Map<String, dynamic>)
|
|
.map((id, value) => MapEntry(id, ActivityRoleModel.fromJson(value)));
|
|
|
|
return ActivityRolesModel(
|
|
roles,
|
|
);
|
|
}
|
|
}
|