Merge pull request #3094 from pangeachat/3087-participants-shown-instead-of-knocking-people
chore: update presence avatar when user ID changes, go right to knock…
This commit is contained in:
commit
cc5691952d
6 changed files with 77 additions and 6 deletions
|
|
@ -653,6 +653,9 @@ abstract class AppRoutes {
|
|||
state,
|
||||
ChatMembersPage(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
// #Pangea
|
||||
filter: state.uri.queryParameters['filter'],
|
||||
// Pangea#
|
||||
),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
|
|||
|
|
@ -5017,5 +5017,15 @@
|
|||
"newDirectMessage": "New direct message",
|
||||
"speakingExercisesTooltip": "Speaking practice",
|
||||
"noChatsFoundHereYet": "No chats found here yet",
|
||||
"transcriptionFailed": "Failed to transcribe audio"
|
||||
"transcriptionFailed": "Failed to transcribe audio",
|
||||
"aUserIsKnocking": "1 user is requesting to join your space",
|
||||
"usersAreKnocking": "{users} users are requesting to join your space",
|
||||
"@usersAreKnocking": {
|
||||
"type": "int",
|
||||
"placeholders": {
|
||||
"users": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,8 +9,18 @@ import 'chat_members_view.dart';
|
|||
|
||||
class ChatMembersPage extends StatefulWidget {
|
||||
final String roomId;
|
||||
// #Pangea
|
||||
final String? filter;
|
||||
// Pangea#
|
||||
|
||||
const ChatMembersPage({required this.roomId, super.key});
|
||||
// #Pangea
|
||||
// const ChatMembersPage({required this.roomId, super.key});
|
||||
const ChatMembersPage({
|
||||
required this.roomId,
|
||||
this.filter,
|
||||
super.key,
|
||||
});
|
||||
// Pangea#
|
||||
|
||||
@override
|
||||
State<ChatMembersPage> createState() => ChatMembersController();
|
||||
|
|
@ -24,6 +34,22 @@ class ChatMembersController extends State<ChatMembersPage> {
|
|||
|
||||
final TextEditingController filterController = TextEditingController();
|
||||
|
||||
// #Pangea
|
||||
@override
|
||||
void didUpdateWidget(ChatMembersPage oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
// Update the membership filter if the widget's filter changes
|
||||
if (oldWidget.filter != widget.filter) {
|
||||
setState(() {
|
||||
membershipFilter = Membership.values.firstWhere(
|
||||
(membership) => membership.name == widget.filter,
|
||||
orElse: () => Membership.join,
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
// Pangea#
|
||||
|
||||
void setMembershipFilter(Membership membership) {
|
||||
membershipFilter = membership;
|
||||
setFilter();
|
||||
|
|
@ -110,6 +136,15 @@ class ChatMembersController extends State<ChatMembersPage> {
|
|||
false,
|
||||
)
|
||||
.listen(refreshMembers);
|
||||
|
||||
// #Pangea
|
||||
if (widget.filter != null) {
|
||||
membershipFilter = Membership.values.firstWhere(
|
||||
(membership) => membership.name == widget.filter,
|
||||
orElse: () => Membership.join,
|
||||
);
|
||||
}
|
||||
// Pangea#
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import 'package:matrix/matrix.dart';
|
|||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/utils/stream_extension.dart';
|
||||
|
||||
|
|
@ -89,15 +90,16 @@ class KnockingUsersIndicatorState extends State<KnockingUsersIndicator> {
|
|||
Expanded(
|
||||
child: Text(
|
||||
_knockingUsers.length == 1
|
||||
? "1 user is requesting to join your space"
|
||||
: "${_knockingUsers.length} users are requesting to join your space",
|
||||
? L10n.of(context).aUserIsKnocking
|
||||
: L10n.of(context)
|
||||
.usersAreKnocking(_knockingUsers.length),
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
onTap: () => context.push(
|
||||
"/rooms/${widget.room.id}/details/members",
|
||||
"/rooms/${widget.room.id}/details/members?filter=knock",
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -48,7 +48,10 @@ class LeaderboardParticipantListState
|
|||
return LoadParticipantsUtil(
|
||||
space: widget.space,
|
||||
builder: (participantsLoader) {
|
||||
final participants = participantsLoader.filteredParticipants("");
|
||||
final participants = participantsLoader
|
||||
.filteredParticipants("")
|
||||
.where((p) => p.membership == Membership.join)
|
||||
.toList();
|
||||
|
||||
return AnimatedSize(
|
||||
duration: FluffyThemes.animationDuration,
|
||||
|
|
|
|||
|
|
@ -48,6 +48,24 @@ class _PresenceBuilderState extends State<PresenceBuilder> {
|
|||
}
|
||||
}
|
||||
|
||||
// #Pangea
|
||||
@override
|
||||
void didUpdateWidget(PresenceBuilder oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.userId == widget.userId) return;
|
||||
|
||||
final client = widget.client ?? Matrix.of(context).client;
|
||||
final userId = widget.userId;
|
||||
if (userId != null) {
|
||||
client.fetchCurrentPresence(userId).then(_updatePresence);
|
||||
_sub?.cancel();
|
||||
_sub = client.onPresenceChanged.stream
|
||||
.where((presence) => presence.userid == userId)
|
||||
.listen(_updatePresence);
|
||||
}
|
||||
}
|
||||
// Pangea#
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_sub?.cancel();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue