From 7e22f5ddee8587f0cffdddc1a5fa34aba42246f1 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 17 Jun 2025 11:16:12 +0700 Subject: [PATCH] TF-3766 Remove MailboxDashboardController dependency in PopupContextMenuActionMixin Signed-off-by: dab246 --- .../popup_context_menu_action_mixin.dart | 23 ++-------- .../email/presentation/email_view.dart | 9 +++- .../handle_mailbox_action_extension.dart | 7 ++- .../handle_open_context_menu_extension.dart | 46 +++++++++++++++++++ .../mailbox_dashboard_view_web.dart | 7 +-- .../presentation/search_mailbox_view.dart | 9 +++- ...xt_menu_filter_email_action_extension.dart | 6 ++- .../thread/presentation/thread_view.dart | 9 +++- 8 files changed, 86 insertions(+), 30 deletions(-) create mode 100644 lib/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart diff --git a/lib/features/base/mixin/popup_context_menu_action_mixin.dart b/lib/features/base/mixin/popup_context_menu_action_mixin.dart index d88c2e8ce..a2af8502f 100644 --- a/lib/features/base/mixin/popup_context_menu_action_mixin.dart +++ b/lib/features/base/mixin/popup_context_menu_action_mixin.dart @@ -7,7 +7,6 @@ import 'package:flutter/material.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:tmail_ui_user/features/base/widget/context_menu/context_menu_dialog_view.dart'; import 'package:tmail_ui_user/features/base/widget/context_menu/context_menu_item_action.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; @@ -28,9 +27,6 @@ mixin PopupContextMenuActionMixin { required OnContextMenuActionClick onContextMenuActionClick, Key? key, }) async { - if (PlatformInfo.isWeb) { - getBinding()?.isContextMenuOpened.value = true; - } return await showModalBottomSheet( context: context, showDragHandle: true, @@ -57,24 +53,17 @@ mixin PopupContextMenuActionMixin { ), ); }, - ).whenComplete(() { - if (PlatformInfo.isWeb) { - getBinding()?.isContextMenuOpened.value = false; - } - }); + ); } Future openPopupMenuAction( BuildContext context, - RelativeRect? position, + RelativeRect position, List popupMenuItems, ) async { - if (PlatformInfo.isWeb) { - getBinding()?.isPopupMenuOpened.value = true; - } return await showMenu( context: context, - position: position ?? const RelativeRect.fromLTRB(16, 40, 16, 16), + position: position, color: Colors.white, surfaceTintColor: Colors.white, menuPadding: const EdgeInsets.symmetric(vertical: 8), @@ -84,11 +73,7 @@ mixin PopupContextMenuActionMixin { ), constraints: const BoxConstraints(maxWidth: 300, minWidth: 178), items: popupMenuItems, - ).whenComplete(() { - if (PlatformInfo.isWeb) { - getBinding()?.isPopupMenuOpened.value = false; - } - }); + ); } Widget buildCancelButton(BuildContext context) { diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index c5dda0c7f..d9bcf3abc 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -33,6 +33,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_loa import 'package:tmail_ui_user/features/email/presentation/widgets/information_sender_and_receiver_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/mail_unsubscribed_banner.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/view_entire_message_with_message_clipped_widget.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/verify_display_overlay_view_on_iframe_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart'; @@ -561,7 +562,7 @@ class EmailView extends GetWidget { )) .toList(); - controller.openBottomSheetContextMenuAction( + controller.mailboxDashBoardController.openBottomSheetContextMenu( context: context, itemActions: contextMenuActions, onContextMenuActionClick: (menuAction) { @@ -595,7 +596,11 @@ class EmailView extends GetWidget { ); }).toList(); - controller.openPopupMenuAction(context, position, popupMenuItems); + controller.mailboxDashBoardController.openPopupMenu( + context, + position, + popupMenuItems, + ); } } } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/extensions/handle_mailbox_action_extension.dart b/lib/features/mailbox/presentation/extensions/handle_mailbox_action_extension.dart index 30f3b692a..0c2d87e3c 100644 --- a/lib/features/mailbox/presentation/extensions/handle_mailbox_action_extension.dart +++ b/lib/features/mailbox/presentation/extensions/handle_mailbox_action_extension.dart @@ -8,6 +8,7 @@ import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_item_ac import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; @@ -102,6 +103,10 @@ extension HandleMailboxActionExtension on MailboxController { ); }).toList(); - return openPopupMenuAction(context, position, popupMenuItems); + return mailboxDashBoardController.openPopupMenu( + context, + position, + popupMenuItems, + ); } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart b/lib/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart new file mode 100644 index 000000000..2f38601fa --- /dev/null +++ b/lib/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart @@ -0,0 +1,46 @@ +import 'package:core/utils/platform_info.dart'; +import 'package:flutter/material.dart'; +import 'package:tmail_ui_user/features/base/widget/context_menu/context_menu_item_action.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; + +extension HandleOpenContextMenuExtension on MailboxDashBoardController { + Future openBottomSheetContextMenu({ + required BuildContext context, + required List itemActions, + required OnContextMenuActionClick onContextMenuActionClick, + Key? key, + }) { + if (PlatformInfo.isWeb) { + isContextMenuOpened.value = true; + } + return openBottomSheetContextMenuAction( + context: context, + itemActions: itemActions, + onContextMenuActionClick: onContextMenuActionClick, + key: key, + ).whenComplete(() { + if (PlatformInfo.isWeb) { + isContextMenuOpened.value = false; + } + }); + } + + Future openPopupMenu( + BuildContext context, + RelativeRect position, + List popupMenuItems, + ) { + if (PlatformInfo.isWeb) { + isPopupMenuOpened.value = true; + } + return openPopupMenuAction( + context, + position, + popupMenuItems, + ).whenComplete(() { + if (PlatformInfo.isWeb) { + isPopupMenuOpened.value = false; + } + }); + } +} diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 8d831d9ec..cd6bad03d 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -17,6 +17,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_view_web.dar import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_drawer_changed_extension.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_profile_setting_action_type_click_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; @@ -464,7 +465,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { ); }).toList(); - controller.openPopupMenuAction(context, buttonPosition, popupMenuItems); + controller.openPopupMenu(context, buttonPosition, popupMenuItems); } void _onDeleteFilterMessageOptionAction() { @@ -725,7 +726,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { ); }).toList(); - controller.openPopupMenuAction(context, position, popupMenuItems); + controller.openPopupMenu(context, position, popupMenuItems); } void _openPopupMenuSortFilter(BuildContext context, RelativeRect position) { @@ -747,6 +748,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { ); }).toList(); - controller.openPopupMenuAction(context, position, popupMenuItems); + controller.openPopupMenu(context, position, popupMenuItems); } } \ No newline at end of file diff --git a/lib/features/search/mailbox/presentation/search_mailbox_view.dart b/lib/features/search/mailbox/presentation/search_mailbox_view.dart index ff8e733fb..79e60d8c9 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_view.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_view.dart @@ -19,6 +19,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/mixin/mailbox_widget import 'package:tmail_ui_user/features/mailbox/presentation/model/context_item_mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart'; import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_controller.dart'; import 'package:tmail_ui_user/features/search/mailbox/presentation/widgets/mailbox_searched_item_builder.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -282,7 +283,7 @@ class SearchMailboxView extends GetWidget controller.clearSearchInputFocus(); - return controller.openBottomSheetContextMenuAction( + return controller.dashboardController.openBottomSheetContextMenu( context: context, itemActions: contextMenuActions, onContextMenuActionClick: (menuAction) { @@ -325,7 +326,11 @@ class SearchMailboxView extends GetWidget ); }).toList(); - return controller.openPopupMenuAction(context, position, popupMenuItems); + return controller.dashboardController.openPopupMenu( + context, + position, + popupMenuItems, + ); } } } \ No newline at end of file diff --git a/lib/features/thread/presentation/extensions/handle_open_context_menu_filter_email_action_extension.dart b/lib/features/thread/presentation/extensions/handle_open_context_menu_filter_email_action_extension.dart index 365352ccf..4646470c1 100644 --- a/lib/features/thread/presentation/extensions/handle_open_context_menu_filter_email_action_extension.dart +++ b/lib/features/thread/presentation/extensions/handle_open_context_menu_filter_email_action_extension.dart @@ -34,6 +34,10 @@ extension HandleOpenContextMenuFilterEmailActionExtension on ThreadController { ); }).toList(); - openPopupMenuAction(context, position, popupMenuItems); + mailboxDashBoardController.openPopupMenuAction( + context, + position, + popupMenuItems, + ); } } diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 84d73c534..783a66aee 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -16,6 +16,7 @@ import 'package:tmail_ui_user/features/email/presentation/model/context_item_ema import 'package:tmail_ui_user/features/email/presentation/model/popup_menu_item_email_action.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/clear_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_open_context_menu_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recover_deleted_message_loading_banner_widget.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart'; @@ -639,7 +640,7 @@ class ThreadView extends GetWidget )) .toList(); - return controller.openBottomSheetContextMenuAction( + return controller.mailboxDashBoardController.openBottomSheetContextMenu( context: context, itemActions: contextMenuActions, onContextMenuActionClick: (menuAction) { @@ -673,7 +674,11 @@ class ThreadView extends GetWidget ); }).toList(); - return controller.openPopupMenuAction(context, position, popupMenuItems); + return controller.mailboxDashBoardController.openPopupMenuAction( + context, + position, + popupMenuItems, + ); } }