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.
fluffychat/lib/pangea/activity_sessions/activity_roles_model.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,
);
}
}