From 7b0e0404c06faa5f78dfae6e65a36c1dd3deed39 Mon Sep 17 00:00:00 2001 From: Krille Date: Mon, 15 Jul 2024 13:39:12 +0200 Subject: [PATCH] chore: Follow up select chats --- assets/l10n/intl_en.arb | 7 ++++++- lib/pages/chat_list/chat_list.dart | 19 +++++++++++++------ lib/pages/chat_list/chat_list_body.dart | 8 +++++--- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index ab0ba910d..904b06c9c 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -2705,5 +2705,10 @@ "restricted": "Restricted", "@restricted": {}, "knockRestricted": "Knock restricted", - "@knockRestricted": {} + "@knockRestricted": {}, + "goToSpace": "Go to space: {space}", + "@goToSpace": { + "type": "text", + "space": {} + } } diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index d057cf181..7084a082d 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -612,19 +612,22 @@ class ChatListController extends State super.dispose(); } - void chatContextAction(Room room) async { + void chatContextAction(Room room, [Room? space]) async { final action = await showModalActionSheet( context: context, - title: room.getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)), actions: [ + if (space != null) + SheetAction( + key: ChatContextAction.goToSpace, + icon: Icons.workspaces_outlined, + label: L10n.of(context)!.goToSpace(space.getLocalizedDisplayname()), + ), SheetAction( key: ChatContextAction.markUnread, icon: room.markedUnread ? Icons.mark_as_unread : Icons.mark_as_unread_outlined, - label: room.markedUnread - ? L10n.of(context)!.markAsRead - : L10n.of(context)!.unread, + label: L10n.of(context)!.toggleUnread, ), SheetAction( key: ChatContextAction.favorite, @@ -656,8 +659,11 @@ class ChatListController extends State await showFutureLoadingDialog( context: context, - future: () { + future: () async { switch (action) { + case ChatContextAction.goToSpace: + setActiveSpace(space!.id); + return; case ChatContextAction.favorite: return room.setFavourite(!room.isFavourite); case ChatContextAction.markUnread: @@ -872,6 +878,7 @@ enum InviteActions { enum AddRoomType { chat, subspace } enum ChatContextAction { + goToSpace, favorite, markUnread, mute, diff --git a/lib/pages/chat_list/chat_list_body.dart b/lib/pages/chat_list/chat_list_body.dart index fd063ddba..0b9c00889 100644 --- a/lib/pages/chat_list/chat_list_body.dart +++ b/lib/pages/chat_list/chat_list_body.dart @@ -27,13 +27,15 @@ class ChatListViewBody extends StatelessWidget { @override Widget build(BuildContext context) { + final client = Matrix.of(context).client; final activeSpace = controller.activeSpaceId; if (activeSpace != null) { return SpaceView( spaceId: activeSpace, onBack: controller.clearActiveSpace, onChatTab: (room) => controller.onChatTap(room), - onChatContext: (room) => controller.chatContextAction(room), + onChatContext: (room) => + controller.chatContextAction(room, client.getRoomById(activeSpace)), activeChat: controller.activeChat, toParentSpace: controller.setActiveSpace, ); @@ -45,7 +47,6 @@ class ChatListViewBody extends StatelessWidget { .where((room) => room.roomType == 'm.space') .toList(); final userSearchResult = controller.userSearchResult; - final client = Matrix.of(context).client; const dummyChatCount = 4; final titleColor = Theme.of(context).textTheme.bodyLarge!.color!.withAlpha(100); @@ -304,7 +305,8 @@ class ChatListViewBody extends StatelessWidget { key: Key('chat_list_item_${room.id}'), filter: filter, onTap: () => controller.onChatTap(room), - onLongPress: () => controller.chatContextAction(room), + onLongPress: () => + controller.chatContextAction(room, space), activeChat: controller.activeChat == room.id, ); },