From 0302e09981fc91408b0670c9d789132a71cf9265 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 5 Jan 2026 15:20:38 +0700 Subject: [PATCH] TF-4233 Show popup menu when click three dot on label item --- .../handle_label_action_type_extension.dart | 20 ++ .../labels/presentation/label_controller.dart | 3 +- .../mixin/label_context_menu_mixin.dart | 71 +++++++ .../models/label_action_type.dart | 46 +++++ .../models/popup_menu_item_label_action.dart | 32 ++++ .../presentation/base_mailbox_view.dart | 39 +++- .../handle_label_action_type_extension.dart | 41 ++++ .../labels/label_method_action_define.dart | 13 ++ .../widgets/labels/label_list_item.dart | 175 +++++++++++++++--- .../widgets/labels/label_list_view.dart | 7 + lib/l10n/intl_messages.arb | 14 +- lib/main/localizations/app_localizations.dart | 14 ++ 12 files changed, 438 insertions(+), 37 deletions(-) create mode 100644 lib/features/labels/presentation/extensions/handle_label_action_type_extension.dart create mode 100644 lib/features/labels/presentation/mixin/label_context_menu_mixin.dart create mode 100644 lib/features/labels/presentation/models/label_action_type.dart create mode 100644 lib/features/labels/presentation/models/popup_menu_item_label_action.dart create mode 100644 lib/features/mailbox/presentation/extensions/handle_label_action_type_extension.dart create mode 100644 lib/features/mailbox/presentation/utils/labels/label_method_action_define.dart diff --git a/lib/features/labels/presentation/extensions/handle_label_action_type_extension.dart b/lib/features/labels/presentation/extensions/handle_label_action_type_extension.dart new file mode 100644 index 000000000..babb8ead0 --- /dev/null +++ b/lib/features/labels/presentation/extensions/handle_label_action_type_extension.dart @@ -0,0 +1,20 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:labels/model/label.dart'; +import 'package:tmail_ui_user/features/labels/presentation/label_controller.dart'; +import 'package:tmail_ui_user/features/labels/presentation/models/label_action_type.dart'; + +extension HandleLabelActionTypeExtension on LabelController { + void handleLabelActionType({ + required LabelActionType actionType, + required AccountId? accountId, + Label? label, + }) { + switch (actionType) { + case LabelActionType.create: + openCreateNewLabelModal(accountId); + break; + case LabelActionType.edit: + break; + } + } +} diff --git a/lib/features/labels/presentation/label_controller.dart b/lib/features/labels/presentation/label_controller.dart index 62be0b758..509636d6e 100644 --- a/lib/features/labels/presentation/label_controller.dart +++ b/lib/features/labels/presentation/label_controller.dart @@ -16,6 +16,7 @@ import 'package:tmail_ui_user/features/labels/domain/state/get_all_label_state.d import 'package:tmail_ui_user/features/labels/domain/usecases/create_new_label_interactor.dart'; import 'package:tmail_ui_user/features/labels/domain/usecases/get_all_label_interactor.dart'; import 'package:tmail_ui_user/features/labels/presentation/label_interactor_bindings.dart'; +import 'package:tmail_ui_user/features/labels/presentation/mixin/label_context_menu_mixin.dart'; import 'package:tmail_ui_user/features/labels/presentation/widgets/create_new_label_modal.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_label_setting_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_setting_state_interactor.dart'; @@ -24,7 +25,7 @@ import 'package:tmail_ui_user/main/exceptions/logic_exception.dart'; import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; -class LabelController extends BaseController { +class LabelController extends BaseController with LabelContextMenuMixin { final labels =