From 421ee9179ded9b40e30205c125c2e636593c2aa3 Mon Sep 17 00:00:00 2001 From: lars Date: Tue, 24 Jun 2025 14:18:14 +0200 Subject: [PATCH 1/3] grouped the participants list --- .../getParticipantsResponse.dart | 15 ++++--- .../participants/participantsListView.dart | 40 ++++++++++++++----- pubspec.yaml | 1 + 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart b/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart index 1be47ce..0a8468c 100644 --- a/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart +++ b/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart @@ -55,12 +55,15 @@ class GetParticipantsResponseObject { } enum GetParticipantsResponseObjectParticipantType { - @JsonValue(1) owner, - @JsonValue(2) moderator, - @JsonValue(3) user, - @JsonValue(4) guest, - @JsonValue(5) userFollowingPublicLink, - @JsonValue(6) guestWithModeratorPermissions + @JsonValue(1) owner('Besitzer'), + @JsonValue(2) moderator('Moderator'), + @JsonValue(3) user('Benutzer'), + @JsonValue(4) guest('Gast'), + @JsonValue(5) userFollowingPublicLink('Link Nutzer'), + @JsonValue(6) guestWithModeratorPermissions('Gast Moderator'); + + const GetParticipantsResponseObjectParticipantType(this.prettyName); + final String prettyName; } enum GetParticipantsResponseObjectParticipantsInCallFlags { diff --git a/lib/view/pages/talk/chatDetails/participants/participantsListView.dart b/lib/view/pages/talk/chatDetails/participants/participantsListView.dart index fd6013a..01f49ee 100644 --- a/lib/view/pages/talk/chatDetails/participants/participantsListView.dart +++ b/lib/view/pages/talk/chatDetails/participants/participantsListView.dart @@ -1,3 +1,4 @@ +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import '../../../../../api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart'; @@ -9,22 +10,43 @@ class ParticipantsListView extends StatelessWidget { @override Widget build(BuildContext context) { - final participants = participantsResponse.data.map((participant) => ListTile( - leading: UserAvatar(id: participant.actorId), - title: Text(participant.displayName), - subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null, - )).toList(); + // final participants = participantsResponse.data.map((participant) => ListTile( + // leading: UserAvatar(id: participant.actorId), + // title: Text(participant.displayName), + // subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null, + // )).toList(); - lastname(participant) => participant.title.toString().split(' ').last; - participants.sort((a, b) => lastname(a).compareTo(lastname(b))); + lastname(participant) => participant.displayName.toString().split(' ').last; + + final participants = participantsResponse.data + .sorted((a, b) => lastname(a).compareTo(lastname(b))) + .sorted((a, b) => a.participantType.index.compareTo(b.participantType.index)); + var groupedParticipants = participants.groupListsBy((participant) => participant.participantType); + + // Map> return Scaffold( appBar: AppBar( title: const Text('Teilnehmende'), ), body: ListView( - children: participants, - ), + children: [ + ...groupedParticipants.entries.map((entry) => Column( + children: [ + ListTile( + title: Text(entry.key.prettyName), + titleTextStyle: TextStyle(fontWeight: FontWeight.bold), + ), + ...entry.value.map((participant) => ListTile( + leading: UserAvatar(id: participant.actorId), + title: Text(participant.displayName), + subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null, + )), + Divider(), + ], + )) + ], + ) ); } } diff --git a/pubspec.yaml b/pubspec.yaml index fe83157..842dcb8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -101,6 +101,7 @@ dependencies: time_range_picker: ^2.3.0 url_launcher: ^6.3.1 uuid: ^4.5.1 + collection: ^1.19.0 dev_dependencies: flutter_test: From e4582eaac55628863be4ec9010531916d1ef4c3c Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 6 Sep 2025 15:46:55 +0200 Subject: [PATCH 2/3] removed commented code --- .../chatDetails/participants/participantsListView.dart | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/view/pages/talk/chatDetails/participants/participantsListView.dart b/lib/view/pages/talk/chatDetails/participants/participantsListView.dart index 01f49ee..4b10ce2 100644 --- a/lib/view/pages/talk/chatDetails/participants/participantsListView.dart +++ b/lib/view/pages/talk/chatDetails/participants/participantsListView.dart @@ -10,12 +10,6 @@ class ParticipantsListView extends StatelessWidget { @override Widget build(BuildContext context) { - // final participants = participantsResponse.data.map((participant) => ListTile( - // leading: UserAvatar(id: participant.actorId), - // title: Text(participant.displayName), - // subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null, - // )).toList(); - lastname(participant) => participant.displayName.toString().split(' ').last; final participants = participantsResponse.data @@ -23,8 +17,6 @@ class ParticipantsListView extends StatelessWidget { .sorted((a, b) => a.participantType.index.compareTo(b.participantType.index)); var groupedParticipants = participants.groupListsBy((participant) => participant.participantType); - // Map> - return Scaffold( appBar: AppBar( title: const Text('Teilnehmende'), From 22d3d18a170db777295b038ab0f11570df9fb287 Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 6 Sep 2025 16:09:47 +0200 Subject: [PATCH 3/3] changed naming for participants --- .../talk/getParticipants/getParticipantsResponse.dart | 4 ++-- lib/view/pages/talk/chatDetails/chatInfo.dart | 2 +- .../talk/chatDetails/participants/participantsListView.dart | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart b/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart index 0a8468c..3d0e9ff 100644 --- a/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart +++ b/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart @@ -57,9 +57,9 @@ class GetParticipantsResponseObject { enum GetParticipantsResponseObjectParticipantType { @JsonValue(1) owner('Besitzer'), @JsonValue(2) moderator('Moderator'), - @JsonValue(3) user('Benutzer'), + @JsonValue(3) user('Teilnehmer'), @JsonValue(4) guest('Gast'), - @JsonValue(5) userFollowingPublicLink('Link Nutzer'), + @JsonValue(5) userFollowingPublicLink('Teilnehmer über Link'), @JsonValue(6) guestWithModeratorPermissions('Gast Moderator'); const GetParticipantsResponseObjectParticipantType(this.prettyName); diff --git a/lib/view/pages/talk/chatDetails/chatInfo.dart b/lib/view/pages/talk/chatDetails/chatInfo.dart index 2460704..81ca7a3 100644 --- a/lib/view/pages/talk/chatDetails/chatInfo.dart +++ b/lib/view/pages/talk/chatDetails/chatInfo.dart @@ -66,7 +66,7 @@ class _ChatInfoState extends State { if(participants != null) ...[ ListTile( leading: const Icon(Icons.supervised_user_circle), - title: Text('${participants!.data.length} Teilnehmer'), + title: Text('${participants!.data.length} Mitglieder'), trailing: const Icon(Icons.arrow_right), onTap: () => TalkNavigator.pushSplitView(context, ParticipantsListView(participants!)), ), diff --git a/lib/view/pages/talk/chatDetails/participants/participantsListView.dart b/lib/view/pages/talk/chatDetails/participants/participantsListView.dart index 4b10ce2..db25cb7 100644 --- a/lib/view/pages/talk/chatDetails/participants/participantsListView.dart +++ b/lib/view/pages/talk/chatDetails/participants/participantsListView.dart @@ -19,7 +19,7 @@ class ParticipantsListView extends StatelessWidget { return Scaffold( appBar: AppBar( - title: const Text('Teilnehmende'), + title: const Text('Mitglieder'), ), body: ListView( children: [