fluffychat/lib/pangea/activity_sessions/activity_roles_model.dart
ggurdin 677e9ce594
3822 begin activity design implementation (#3827)
* file reorganization

* added activity summary widget to show in chat view and activity launch view

* more updates to activity sessions start page

* function to ping course

* remove duplicate loading of participants

* nav bar visibility changes

* add generalized image from url widget

* update bottom of screen activity status message and add summaries to chat event list

* scroll to summary on click

* show invited activity sessions in course chats view
2025-09-02 12:37:16 -04:00

44 lines
1.1 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 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,
);
}
}