From 127b1dbce9fe6299a9b69da4d1e8fc0633185267 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 26 Dec 2025 17:42:51 +0700 Subject: [PATCH] TF-4227 Enable label item clickable action --- .../presentation/base_mailbox_view.dart | 5 +++ .../model/presentation_label_mailbox.dart | 37 +++++++++++++++++++ .../widgets/labels/label_list_item.dart | 5 +++ .../widgets/labels/label_list_view.dart | 3 ++ 4 files changed, 50 insertions(+) create mode 100644 lib/features/mailbox/presentation/model/presentation_label_mailbox.dart diff --git a/lib/features/mailbox/presentation/base_mailbox_view.dart b/lib/features/mailbox/presentation/base_mailbox_view.dart index 192893bb7..37affb3e8 100644 --- a/lib/features/mailbox/presentation/base_mailbox_view.dart +++ b/lib/features/mailbox/presentation/base_mailbox_view.dart @@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/extensions/toggle_ex import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/presentation_label_mailbox.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/styles/mailbox_item_widget_styles.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/folders_bar_widget.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/labels/label_list_view.dart'; @@ -406,6 +407,10 @@ abstract class BaseMailboxView extends GetWidget labels: labels, imagePaths: controller.imagePaths, isDesktop: isDesktop, + onOpenLabelCallback: (label) => controller.openMailbox( + context, + PresentationLabelMailbox.initial(label), + ), ) : const Offstage(), ); diff --git a/lib/features/mailbox/presentation/model/presentation_label_mailbox.dart b/lib/features/mailbox/presentation/model/presentation_label_mailbox.dart new file mode 100644 index 000000000..d6ff94d1f --- /dev/null +++ b/lib/features/mailbox/presentation/model/presentation_label_mailbox.dart @@ -0,0 +1,37 @@ +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:labels/model/label.dart'; +import 'package:model/mailbox/mailbox_state.dart'; +import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:model/mailbox/select_mode.dart'; + +class PresentationLabelMailbox extends PresentationMailbox { + final Label label; + + PresentationLabelMailbox( + super.id, + this.label, { + super.name, + super.parentId, + super.role, + super.sortOrder, + super.totalEmails, + super.unreadEmails, + super.totalThreads, + super.unreadThreads, + super.myRights, + super.isSubscribed, + super.selectMode = SelectMode.INACTIVE, + super.mailboxPath, + super.state = MailboxState.activated, + super.namespace, + super.displayName, + super.rights, + }); + + factory PresentationLabelMailbox.initial(Label label) { + return PresentationLabelMailbox(MailboxId(label.id!), label); + } + + @override + List get props => [label, ...super.props]; +} diff --git a/lib/features/mailbox/presentation/widgets/labels/label_list_item.dart b/lib/features/mailbox/presentation/widgets/labels/label_list_item.dart index de8237f38..88198a376 100644 --- a/lib/features/mailbox/presentation/widgets/labels/label_list_item.dart +++ b/lib/features/mailbox/presentation/widgets/labels/label_list_item.dart @@ -6,15 +6,19 @@ import 'package:tmail_ui_user/features/mailbox/presentation/styles/mailbox_item_ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/labels/label_icon_widget.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/labels/label_name_widget.dart'; +typedef OnOpenLabelCallback = void Function(Label label); + class LabelListItem extends StatelessWidget { final Label label; final ImagePaths imagePaths; final bool isDesktop; + final OnOpenLabelCallback onOpenLabelCallback; const LabelListItem({ super.key, required this.label, required this.imagePaths, + required this.onOpenLabelCallback, this.isDesktop = false, }); @@ -32,6 +36,7 @@ class LabelListItem extends StatelessWidget { type: MaterialType.transparency, child: InkWell( borderRadius: borderRadius, + onTap: () => onOpenLabelCallback(label), child: Container( decoration: BoxDecoration(borderRadius: borderRadius), padding: EdgeInsetsDirectional.symmetric( diff --git a/lib/features/mailbox/presentation/widgets/labels/label_list_view.dart b/lib/features/mailbox/presentation/widgets/labels/label_list_view.dart index c1d0785a8..6e21327e6 100644 --- a/lib/features/mailbox/presentation/widgets/labels/label_list_view.dart +++ b/lib/features/mailbox/presentation/widgets/labels/label_list_view.dart @@ -7,11 +7,13 @@ class LabelListView extends StatelessWidget { final List