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